class GUIView(tk.Frame): default_sticky = tk.W + tk.E + tk.N + tk.S view_model = LinesIntersectViewModel() def __init__(self): tk.Frame.__init__(self, background="bisque") self.master.geometry("460x90") self.master.title("GUI") self.master.rowconfigure(0, weight=1) self.master.columnconfigure(0, weight=1) self.grid(sticky=self.default_sticky) self.btn_calculate = tk.Button(self, text='Calculate') self.btn_calculate.grid(row=0, column=4, pady=5, sticky=self.default_sticky) self.text1 = ttk.Label(self, background="bisque", text=' a: ') self.text1.grid(row=0, column=0, sticky=self.default_sticky) self.text2 = ttk.Label(self, background="bisque", text=' b:') self.text2.grid(row=0, column=2, sticky=self.default_sticky) self.text3 = ttk.Label(self, background="bisque", text=' c: ') self.text3.grid(row=1, column=0, sticky=self.default_sticky) self.text4 = ttk.Label(self, background="bisque", text=' d:') self.text4.grid(row=1, column=2, sticky=self.default_sticky) self.point1 = ttk.Entry(self) self.point1.insert(0, "0 -0.1") self.point1.grid(row=0, column=1, pady=10, sticky=self.default_sticky) self.point2 = ttk.Entry(self) self.point2.insert(0, "1 0") self.point2.grid(row=0, column=3, pady=10, sticky=self.default_sticky, padx=10) self.point3 = ttk.Entry(self) self.point3.insert(0, "0 0") self.point3.grid(row=1, column=1, sticky=self.default_sticky) self.point4 = ttk.Entry(self) self.point4.insert(0, "1. 1") self.point4.grid(row=1, column=3, sticky=self.default_sticky, padx=10) self.res = ttk.Label(self, width=20, background="white") self.res.grid(row=1, column=4, sticky=self.default_sticky) self.bind_events() self.mvvm_bind() self.mvvm_back_bind() def bind_events(self): self.point1.bind('<KeyRelease>', self.entry_changed) self.point2.bind('<KeyRelease>', self.entry_changed) self.point3.bind('<KeyRelease>', self.entry_changed) self.point4.bind('<KeyRelease>', self.entry_changed) self.btn_calculate.bind('<Button-1>', self.calculate_clicked) def mvvm_bind(self): self.view_model.set_point1(self.point1.get()) self.view_model.set_point2(self.point2.get()) self.view_model.set_point3(self.point3.get()) self.view_model.set_point4(self.point4.get()) def mvvm_back_bind(self): self.point1.delete(0, tk.END) self.point1.insert(0, self.view_model.get_point1()) self.point2.delete(0, tk.END) self.point2.insert(0, self.view_model.get_point2()) self.point3.delete(0, tk.END) self.point3.insert(0, self.view_model.get_point3()) self.point4.delete(0, tk.END) self.point4.insert(0, self.view_model.get_point4()) self.btn_calculate.config( state=self.view_model.get_button_calculate_state()) self.res.config(text=self.view_model.get_result()) def calculate_clicked(self, event): self.mvvm_bind() self.view_model.click_calculate() self.mvvm_back_bind() def entry_changed(self, event): self.mvvm_bind() self.mvvm_back_bind()
def setUp(self): self.view_model = LinesIntersectViewModel(logger=FakeLogger())
def setUp(self): self.view_model = LinesIntersectViewModel()
class TestLinesIntersectViewModel(unittest.TestCase): def setUp(self): self.view_model = LinesIntersectViewModel() def test_is_valid_coord1(self): self.assertTrue(LinesIntersectViewModel.is_valid_coord('1 -2')) def test_is_valid_coord2(self): self.assertTrue(LinesIntersectViewModel.is_valid_coord('1. -0.2')) def test_is_valid_coord3(self): self.assertFalse(LinesIntersectViewModel.is_valid_coord('1.o -0.2')) def test_is_valid_coord4(self): self.assertFalse(LinesIntersectViewModel.is_valid_coord('1.,-0.2')) def test_is_valid_coord_with_multispace(self): self.assertTrue(LinesIntersectViewModel.is_valid_coord('1 -2')) def test_can_set_get_point1(self): self.view_model.set_point1("1 2") self.assertEqual("1 2", self.view_model.get_point1()) def test_can_set_get_point2(self): self.view_model.set_point2("1 2") self.assertEqual("1 2", self.view_model.get_point2()) def test_can_set_get_point3(self): self.view_model.set_point3("1 2") self.assertEqual("1 2", self.view_model.get_point3()) def test_can_set_get_point4(self): self.view_model.set_point4("1 2") self.assertEqual("1 2", self.view_model.get_point4()) def test_can_calculate(self): self.view_model.set_point1("2 3") self.view_model.set_point2("2 3") self.view_model.set_point3("2 3") self.view_model.set_point4("2 3") self.view_model.click_calculate() self.assertEqual(self.view_model.RESULT_STR % "True", self.view_model.get_result()) def test_check(self): self.view_model.set_point1("2 3") self.view_model.set_point2("2 3") self.view_model.set_point3("2 3") self.view_model.set_point4("2 error") self.view_model.click_calculate() self.assertEqual("", self.view_model.get_result())
class TestLinesIntersectFakeLogger(unittest.TestCase): def setUp(self): self.view_model = LinesIntersectViewModel(logger=FakeLogger()) def test_log_set_point1(self): self.view_model.set_point1("1 2") log = self.view_model.logger.get_logs() self.assertEqual(["Set point 1 to 1 2"], log) def test_log_set_point2(self): self.view_model.set_point2("2 3") log = self.view_model.logger.get_logs() self.assertEqual(["Set point 2 to 2 3"], log) def test_log_set_point3(self): self.view_model.set_point3("3 4") log = self.view_model.logger.get_logs() self.assertEqual(["Set point 3 to 3 4"], log) def test_log_set_point4(self): self.view_model.set_point4("5 6") log = self.view_model.logger.get_logs() self.assertEqual(["Set point 4 to 5 6"], log) def test_log_press_calculate_with_intersection(self): self.view_model.set_point1("1 2") self.view_model.set_point2("2 3") self.view_model.set_point3("1 3") self.view_model.set_point4("2 2") self.view_model.click_calculate() log = self.view_model.logger.get_logs(2) self.assertEqual(["Calculate clicked", "Intersection: True"], log) def test_log_press_calculate_without_intersection(self): self.view_model.set_point1("1 2") self.view_model.set_point2("2 3") self.view_model.set_point3("1 3") self.view_model.set_point4("2 4") self.view_model.click_calculate() log = self.view_model.logger.get_logs(2) self.assertEqual(["Calculate clicked", "Intersection: False"], log)
def test_is_valid_coord_with_multispace(self): self.assertTrue(LinesIntersectViewModel.is_valid_coord('1 -2'))
def test_is_valid_coord4(self): self.assertFalse(LinesIntersectViewModel.is_valid_coord('1.,-0.2'))
def test_is_valid_coord2(self): self.assertTrue(LinesIntersectViewModel.is_valid_coord('1. -0.2'))