class CalculatorGUI(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.calculator=CalculatorModel() self.calculator.addObserver(self) self.pack() self._create_widgets() def _create_widgets(self): self.Display = Entry(self) self.Display.pack({"side": "left"}) Operators = Frame(self) self.PlusBtn = Button(Operators) self.PlusBtn["text"] = "+" self.PlusBtn["command"] = self.press_plus self.PlusBtn.pack({"side": "left"}) self.MinusBtn = Button(Operators) self.MinusBtn["text"] = "-" self.MinusBtn["command"] = None self.MinusBtn.pack({"side": "left"}) self.EqualsBtn = Button(Operators) self.EqualsBtn["text"] = "=" self.EqualsBtn["command"] = self.press_equal self.EqualsBtn.pack({"side": "left"}) Operators.pack() Digits = Frame(self) self.DigitBtn = [] for i in range(0,10): TheButton = Button(Digits, text=str(i)) TheButton.pack(side=LEFT) self.DigitBtn = self.DigitBtn + [TheButton] Digits.pack() self.DigitBtn[0]["command"] = lambda: self.press_digit(0) self.DigitBtn[1]["command"] = lambda: self.press_digit(1) self.DigitBtn[2]["command"] = lambda: self.press_digit(2) self.DigitBtn[3]["command"] = lambda: self.press_digit(3) self.DigitBtn[4]["command"] = lambda: self.press_digit(4) self.DigitBtn[5]["command"] = lambda: self.press_digit(5) self.DigitBtn[6]["command"] = lambda: self.press_digit(6) self.DigitBtn[7]["command"] = lambda: self.press_digit(7) self.DigitBtn[8]["command"] = lambda: self.press_digit(8) self.DigitBtn[9]["command"] = lambda: self.press_digit(9) def update(self): self.Display.delete(0, END) self.Display.insert(0, self.calculator.display()) print(self.calculator.display()) def press_digit(self, digit): self.calculator.press_digit(digit) def press_plus(self): self.calculator.press_plus() def press_equal(self): self.calculator.press_equals()
class TestCalc( unittest.TestCase ): def setUp(self): self.c = CalculatorModel() def tearDown(self): self.c = None def test_work(self): print(self) def test_fail(self): self.assertTrue(not False) def testShouldShowZeroWhenInitialized(self): self.assertEqual("0", self.c.display()) def testShouldReturnOneWhenOneIsPressed(self): self.c.press_digit(1); self.assertEqual("1", self.c.display()) def testShouldReturnTwoWhenOnePlusOne(self): self.c.press_digit(1); self.assertEqual("1", self.c.display()) self.c.press_plus(); self.assertEqual("1", self.c.display()) self.c.press_digit(1); self.assertEqual("1", self.c.display()) self.c.press_equals(); self.assertEqual("2", self.c.display()) def testMinus(self): self.c.press_minus() self.c.press_digit(1) self.c.press_equals() self.assertEqual("-1", self.c.display()) def testMult(self): self.c.press_digit(2) self.c.press_mult() self.c.press_digit(2) self.c.press_equals() self.assertEqual("4", self.c.display(), "2*2=4") def testShouldRefuseStrings(self): self.assertRaises(CalcError, self.c.press_digit, "aas") def testShouldRefuseMoreThanOneDigit(self): self.assertRaises(CalcError, self.c.press_digit, 99)