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()
Ejemplo n.º 2
0
 def setUp(self):
     self.view_model = LinesIntersectViewModel(logger=FakeLogger())
Ejemplo n.º 3
0
 def setUp(self):
     self.view_model = LinesIntersectViewModel()
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 def test_is_valid_coord_with_multispace(self):
     self.assertTrue(LinesIntersectViewModel.is_valid_coord('1   -2'))
Ejemplo n.º 7
0
 def test_is_valid_coord4(self):
     self.assertFalse(LinesIntersectViewModel.is_valid_coord('1.,-0.2'))
Ejemplo n.º 8
0
 def test_is_valid_coord2(self):
     self.assertTrue(LinesIntersectViewModel.is_valid_coord('1. -0.2'))