def test_model_perform_logging(self): model = QuadraticEquationViewModel() model.set_a(2) model.set_b(4) model.set_c(2) model.perform() self.assertEqual('Result = Answer:\n x = -1.0', model.logger.get_last_message())
def test_input_wrong_data(self): model = QuadraticEquationViewModel() model.set_a('@1') model.set_b(4) model.set_c(2) model.perform() wrong_message = 'Incorrect input' self.assertEqual(wrong_message, model.logger.get_last_message())
def test_model_perform_all_message_logging(self): model = QuadraticEquationViewModel() model.set_a(2) model.set_b(4) model.set_c(2) model.perform() log_message = [ 'Setting a = 2', 'Setting b = 4', 'Setting c = 2', 'Button clicked', 'a = 2, b = 4, c = 2', 'Result = Answer:\n x = -1.0' ] self.assertEqual(log_message, model.logger.get_log_messages()[-6:])
def test_set_c_logging(self): model = QuadraticEquationViewModel() model.set_c(2) self.assertEqual('Setting c = 2', model.logger.get_last_message())
def test_init_logging(self): model = QuadraticEquationViewModel(2, 4, 2) self.assertEqual('Welcome!', model.logger.get_last_message())
def test_by_default_button_is_disable(self): model = QuadraticEquationViewModel() self.assertEqual('disabled', model.is_button_enable())
def test_when_enter_incorrect_values(self): model = QuadraticEquationViewModel('-1a', '123', 'q9') self.assertEqual('disabled', model.is_button_enable())
def test_correct_set_value(self): model = QuadraticEquationViewModel() model.set_a(1) model.set_b(10) model.set_c(-12) self.assertEqual(1, model.get_a()) self.assertEqual(10, model.get_b()) self.assertEqual(-12, model.get_c())
def test_when_enter_incorrect_values_throw_exception(self): model = QuadraticEquationViewModel(2, '@48', 2) model.perform() answer = 'Incorrect input' self.assertEqual(answer, model.get_error_message())
def test_when_enter_values_display_result(self): model = QuadraticEquationViewModel(2, 4, 2) model.perform() answer = 'Answer:\n x = -1.0' self.assertEqual(answer, model.get_result())
def test_when_clear_c_button_disabled(self): model = QuadraticEquationViewModel(1, -1, 1) model.set_c(None) self.assertEqual('disabled', model.is_button_enable())
def test_when_enter_a_b_c_button_enabled(self): model = QuadraticEquationViewModel(1, 1, 1) self.assertTrue(model.is_button_enable())
class GUIView(object): view_model = QuadraticEquationViewModel() def __init__(self): self.root = tk.Tk() self.root['bg'] = 'maroon1' self.root.title('Solve quadratic equation') self.root.geometry('600x300') self.root.resizable(width=False, height=True) self.frame = tk.Frame(self.root, bg='SkyBlue1') self.title = tk.Label(self.frame, text='Введите начало и конец промежутка', bg='gray21', font=40) self.a_value = tk.Entry(self.frame, bg='white', state='normal') self.b_value = tk.Entry(self.frame, bg='white') self.c_value = tk.Entry(self.frame, bg='white') self.btn = tk.Button(self.frame, text='Solve', bg='gray21') self.res = tk.Label(self.frame, text='Result', bg='gray21', font=40) self.error_field = tk.Label(self.frame, text='', fg='red', bg='gray21', font=('', 12, 'bold')) self.set_weight_to_grid() self.bind_events() self.mvvm_bind() self.mvvm_back_bind() self.root.mainloop() def set_weight_to_grid(self): self.root.grid_rowconfigure(2, minsize=30) self.root.grid_rowconfigure(5, minsize=30, weight=60) self.frame.place(relx=0.05, rely=0.05, relwidth=0.9, relheight=0.9) self.a_value.grid(row=1, column=0, stick='wens', padx=5, pady=5) self.b_value.grid(row=1, column=2, stick='wens', padx=5, pady=5) self.c_value.grid(row=1, column=4, stick='wens', padx=5, pady=5) self.btn.grid(row=2, column=1, stick='wens') self.res.grid(row=4, column=0, columnspan=3, stick='we', padx=5) self.error_field.grid(row=5, column=0, columnspan=3, stick='we', padx=5) def bind_events(self): self.a_value.bind('<KeyRelease>', self.change_a) self.b_value.bind('<KeyRelease>', self.change_b) self.c_value.bind('<KeyRelease>', self.change_c) self.btn.bind('<Button-1>', self.btn_clicked) def btn_clicked(self, event): self.mvvm_bind() self.view_model.perform() self.mvvm_back_bind() def change_a(self, event): self.mvvm_bind() self.mvvm_back_bind() def change_b(self, event): self.mvvm_bind() self.mvvm_back_bind() def change_c(self, event): self.mvvm_bind() self.mvvm_back_bind() def mvvm_bind(self): self.view_model.set_a(self.a_value.get()) self.view_model.set_b(self.b_value.get()) self.view_model.set_c(self.c_value.get()) def mvvm_back_bind(self): self.a_value.delete(0, tk.END) self.a_value.insert(tk.END, self.view_model.get_a()) self.b_value.delete(0, tk.END) self.b_value.insert(tk.END, self.view_model.get_b()) self.c_value.delete(0, tk.END) self.c_value.insert(tk.END, self.view_model.get_c()) self.btn.config(state=self.view_model.is_button_enable()) self.res.config( text='{}\n'.format(get_result_text(self.view_model.get_result()))) self.error_field.config(text='{}\n'.format( get_error_text(self.view_model.get_error_message())))