def test_calculate_invert(self): right_bit_array_string = '00000111' view_model = BitArrayViewModel() right_bit_array = view_model.bit_array_from_string( right_bit_array_string) result = ~right_bit_array view_model.set_operation(Operation.INVERT) view_model.set_right_bit_array(right_bit_array_string) view_model.calculate() self.assertEqual(result, view_model.get_result())
def test_get_string_result(self): right_bit_array_string = '00000111' view_model = BitArrayViewModel() result = '11111000' view_model.set_operation(Operation.INVERT) view_model.set_right_bit_array(right_bit_array_string) view_model.calculate() self.assertEqual(result, view_model.get_result_string())
def test_set_operation_not_disable_left_bit_array(self): view_model = BitArrayViewModel() view_model.set_operation(Operation.OR) self.assertTrue(view_model.get_left_bit_array_enabled())
def test_set_operation_disable_left_bit_array(self): view_model = BitArrayViewModel() view_model.set_operation(Operation.INVERT) self.assertFalse(view_model.get_left_bit_array_enabled())
def test_default_operation(self): view_model = BitArrayViewModel() self.assertEqual(view_model.get_operation(), Operation.OR)
def test_set_operation(self): view_model = BitArrayViewModel() view_model.set_operation(Operation.AND) self.assertEqual(view_model.get_operation(), Operation.AND)
def setUp(self): self.view_model = BitArrayViewModel(RealLogger())
def test_calculate_or(self): left_bit_array_string = '1010111111' right_bit_array_string = '00000111' view_model = BitArrayViewModel() left_bit_array = view_model.bit_array_from_string( left_bit_array_string) right_bit_array = view_model.bit_array_from_string( right_bit_array_string) result = left_bit_array | right_bit_array view_model.set_operation(Operation.OR) view_model.set_left_bit_array(left_bit_array_string) view_model.set_right_bit_array(right_bit_array_string) view_model.calculate() self.assertEqual(result, view_model.get_result())
def test_can_not_convert_from_invalid_string(self): string = 'god_help_me' with self.assertRaises(ValueError): BitArrayViewModel().bit_array_from_string(string)
def test_get_empty_right_bit_array(self): view_model = BitArrayViewModel() self.assertEqual(view_model.get_right_bit_array_string(), '')
def test_get_bool_result_as_yes(self): view_model = BitArrayViewModel() view_model.set_operation(Operation.NEQ) view_model.set_left_bit_array('111') view_model.set_right_bit_array('101') view_model.calculate() self.assertEqual(view_model.get_result_string(), 'YES')
def test_get_empty_result(self): view_model = BitArrayViewModel() self.assertEqual(view_model.get_result_string(), '')
def test_clear_result(self): right_bit_array_string = '00000111' view_model = BitArrayViewModel() view_model.set_operation(Operation.INVERT) view_model.set_right_bit_array(right_bit_array_string) view_model.calculate() view_model.clear_result() self.assertEqual(view_model.get_result(), None)
def test_convert_from_string_hold_true_length(self): string = '0000110011' bit_array = BitArrayViewModel().bit_array_from_string(string) self.assertEqual(bit_array.get_length(), len(string))
def test_set_right_bit_array(self): string = '000110011' view_model = BitArrayViewModel() view_model.set_right_bit_array(string) self.assertTrue( isinstance(view_model.get_right_bit_array_string(), str))
class TestViewModelFakeLogging(unittest.TestCase): def setUp(self): self.view_model = BitArrayViewModel(FakeLogger()) def test_logging_init(self): self.assertEqual('Welcome!', self.view_model.logger.get_last_message()) def test_logging_set_left_bit_array(self): self.view_model.set_left_bit_array('11011') self.assertEqual('Set left bit array with 00011011', self.view_model.logger.get_last_message()) def test_logging_set_right_bit_array(self): self.view_model.set_right_bit_array('101') self.assertEqual('Set right bit array with 00000101', self.view_model.logger.get_last_message()) def test_logging_set_left_bit_array_error(self): try: self.view_model.set_left_bit_array('qwe') except Exception: pass result = 'Error:\n '\ 'Can\'t convert "qwe" '\ 'to bit array' self.assertEqual(result, self.view_model.logger.get_last_message()) def test_logging_set_right_bit_array_error(self): try: self.view_model.set_right_bit_array('123') except Exception: pass result = 'Error:\n '\ 'Can\'t convert "123" '\ 'to bit array' self.assertEqual(result, self.view_model.logger.get_last_message()) def test_logging_clear_result(self): self.view_model.clear_result() self.assertEqual('Clear previous result', self.view_model.logger.get_last_message()) def test_logging_set_operation(self): self.view_model.set_operation(Operation.AND) self.assertEqual('Set operation with AND', self.view_model.logger.get_last_message()) def test_logging_set_operation_with_disable(self): self.view_model.set_operation(Operation.INVERT) self.assertEqual('Disable left bit array', self.view_model.logger.get_last_message()) def test_logging_set_result(self): self.view_model.set_operation(Operation.AND) self.view_model.set_left_bit_array('111') self.view_model.set_right_bit_array('101') self.view_model.calculate() self.assertEqual('Set result with 00000101', self.view_model.logger.get_last_message()) def test_logging_set_result_bool_as_no(self): self.view_model.set_operation(Operation.EQ) self.view_model.set_left_bit_array('111') self.view_model.set_right_bit_array('101') self.view_model.calculate() self.assertEqual('Set result with NO', self.view_model.logger.get_last_message()) def test_logging_set_result_bool_as_yes(self): self.view_model.set_operation(Operation.NEQ) self.view_model.set_left_bit_array('111') self.view_model.set_right_bit_array('101') self.view_model.calculate() self.assertEqual('Set result with YES', self.view_model.logger.get_last_message())
def test_get_right_bit_array(self): string = '000110011' view_model = BitArrayViewModel() view_model.set_right_bit_array(string) self.assertEqual(view_model.get_right_bit_array_string(), string)
def test_convert_from_string_returns_true_string(self): string = '00011110' bit_array = BitArrayViewModel().bit_array_from_string(string) print(bit_array.to_string()) self.assertEqual(bit_array.to_string(), string)
class GUIView(ttk.Frame): view_model = BitArrayViewModel() def __init__(self): self.view_model.set_operation(Operation.OR) ttk.Frame.__init__(self) self.master.title("Bit array") self.master.geometry("450x100") self.left_bit_array_label = ttk.Label(text="Left bit array", font="Arial 16") self.left_bit_array_label.grid(row=0, column=0) self.left_bit_array_entry = ttk.Entry() self.left_bit_array_entry.grid(row=1, column=0) self.operation_combobox = ttk.Combobox(values=Operation.ALL, state="readonly", width="6") self.operation_combobox.grid(row=1, column=1) self.right_bit_array_label = ttk.Label(text="Right bit array", font="Arial 16") self.right_bit_array_label.grid(row=0, column=2) self.right_bit_array_entry = ttk.Entry() self.right_bit_array_entry.grid(row=1, column=2) self.calc_button = ttk.Button(text="Calculate") self.calc_button.grid(row=2, column=0) self.result_entry = ttk.Label() self.result_entry.grid(row=2, column=1, columnspan=3) self.bind_events() self.mvvm_bind() def bind_events(self): self.operation_combobox.bind('<<ComboboxSelected>>', self.operation_changed) self.calc_button.bind('<Button-1>', self.calculate_clicked) def operation_changed(self, event): self.view_model.set_operation(self.operation_combobox.get()) if self.view_model.get_left_bit_array_enabled(): self.left_bit_array_entry.configure(state=tk.NORMAL) else: self.left_bit_array_entry.configure(state=tk.DISABLED) def calculate_clicked(self, event): try: self.mvvm_back_bind() except ValueError: self.result_entry.configure( text='Wrong input. Expected: word of 0 and 1.') return self.view_model.calculate() self.mvvm_bind() def mvvm_bind(self): self.update_text(self.left_bit_array_entry, self.view_model.get_left_bit_array_string()) self.operation_combobox.set(self.view_model.get_operation()) self.update_text(self.right_bit_array_entry, self.view_model.get_right_bit_array_string()) self.result_entry.configure(text=self.view_model.get_result_string()) if self.view_model.get_left_bit_array_enabled(): self.left_bit_array_entry.configure(state=tk.NORMAL) else: self.left_bit_array_entry.configure(state=tk.DISABLED) def mvvm_back_bind(self): self.view_model.clear_result() self.view_model.set_operation(self.operation_combobox.get()) self.view_model.set_left_bit_array(self.left_bit_array_entry.get()) self.view_model.set_right_bit_array(self.right_bit_array_entry.get()) @staticmethod def update_text(obj, text): obj.delete(0, tk.END) obj.insert(0, text)
def test_can_convert_from_string(self): string = '000011' bit_array = BitArrayViewModel().bit_array_from_string(string) self.assertTrue(isinstance(bit_array, BitArray))