Esempio n. 1
0
 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())
Esempio n. 2
0
 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())
Esempio n. 3
0
 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())
Esempio n. 4
0
 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())
Esempio n. 5
0
 def test_default_operation(self):
     view_model = BitArrayViewModel()
     self.assertEqual(view_model.get_operation(), Operation.OR)
Esempio n. 6
0
 def test_set_operation(self):
     view_model = BitArrayViewModel()
     view_model.set_operation(Operation.AND)
     self.assertEqual(view_model.get_operation(), Operation.AND)
Esempio n. 7
0
 def setUp(self):
     self.view_model = BitArrayViewModel(RealLogger())
Esempio n. 8
0
 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())
Esempio n. 9
0
 def test_can_not_convert_from_invalid_string(self):
     string = 'god_help_me'
     with self.assertRaises(ValueError):
         BitArrayViewModel().bit_array_from_string(string)
Esempio n. 10
0
 def test_get_empty_right_bit_array(self):
     view_model = BitArrayViewModel()
     self.assertEqual(view_model.get_right_bit_array_string(), '')
Esempio n. 11
0
 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')
Esempio n. 12
0
 def test_get_empty_result(self):
     view_model = BitArrayViewModel()
     self.assertEqual(view_model.get_result_string(), '')
Esempio n. 13
0
 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)
Esempio n. 14
0
 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))
Esempio n. 15
0
 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))
Esempio n. 16
0
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())
Esempio n. 17
0
 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)
Esempio n. 18
0
 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)
Esempio n. 20
0
 def test_can_convert_from_string(self):
     string = '000011'
     bit_array = BitArrayViewModel().bit_array_from_string(string)
     self.assertTrue(isinstance(bit_array, BitArray))