Skip to content

Commit

Permalink
Merge pull request #18 from timonov/timonova-anastasia-lab3
Browse files Browse the repository at this point in the history
Тимонова - Лабораторная работа #3
  • Loading branch information
AoD314 committed Dec 15, 2015
2 parents 84e22ab + 6fa3d41 commit 5e1e2e4
Show file tree
Hide file tree
Showing 17 changed files with 233 additions and 194 deletions.
4 changes: 2 additions & 2 deletions code/timonova-anastasia/src/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import guiview
from my_gui_view import gui_view

if __name__ == '__main__':
guiview.GuiView().mainloop()
gui_view.GuiView().mainloop()
88 changes: 0 additions & 88 deletions code/timonova-anastasia/src/model/tests_for_matrix.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import tkinter as tk
import viewmodel
import Tkinter as Tk

from my_view_model import view_model

class SimpleTableInput(tk.Frame):

class SimpleTableInput(Tk.Frame):
def __init__(self, parent, rows, value):
tk.Frame.__init__(self, parent)
Tk.Frame.__init__(self, parent)

self._entry = {}
self.rows = rows
Expand All @@ -14,8 +15,8 @@ def __init__(self, parent, rows, value):
for row in range(self.rows):
for column in range(self.rows):
index = row, column
e = tk.Entry(self, validate="key", validatecommand=check_input)
e.insert(tk.END, str(value[row][column]))
e = Tk.Entry(self, validate="key", validatecommand=check_input)
e.insert(Tk.END, str(value[row][column]))
e.grid(row=row, column=column, stick="nsew")
self._entry[index] = e
for column in range(self.rows):
Expand All @@ -32,7 +33,8 @@ def get(self):
result.append(current_row)
return result

def _validate(self, p):
@classmethod
def _validate(cls, p):
if p.strip() == "":
return True
try:
Expand All @@ -42,40 +44,41 @@ def _validate(self, p):
return True


class GuiView(tk.Frame):
class GuiView(Tk.Frame):
def __init__(self):
tk.Frame.__init__(self)
Tk.Frame.__init__(self)
self.count_log_messages = 6

self.view_model = viewmodel.ViewModel()
self.view_model_error = viewmodel.ViewError()
self.view_model = view_model.ViewModel()
self.master.title("Determinant calculator")
self.master.minsize(width=150, height=150)

self.grid(sticky=tk.W + tk.E + tk.N + tk.S)
self.rows_label = tk.Label(self, text=" Enter rows and columns numbers ", fg='black',
self.grid(sticky=Tk.W + Tk.E + Tk.N + Tk.S)
self.rows_label = Tk.Label(self, text=" Enter rows and columns numbers ", fg='black',
font="Arial 12", bg="light yellow")
self.rows_label.pack()
self.rows = tk.Text(self, height=1, width=20)
self.rows = Tk.Text(self, height=1, width=20)
self.rows.pack()
self.enter = tk.Button(self, text="Change matrix rank", width=15, height=1, font="Arial 12",
self.enter = Tk.Button(self, text="Change matrix rank", width=15, height=1, font="Arial 12",
bg="light blue", command=self.on_change)
self.enter.pack()
self.table = SimpleTableInput(self, self.view_model.get_number_of_rows(),
self.view_model.get_matrix_as_list())
self.table.pack(side="top", fill="both", expand=True)
self.submit_matrix_for_calc_det = tk.Button(self, text="Submit", width=15, height=1, font="Arial 12",
self.submit_matrix_for_calc_det = Tk.Button(self, text="Submit", width=15, height=1, font="Arial 12",
bg="light blue", command=self.on_submit)
self.submit_matrix_for_calc_det.pack()

self.answer = tk.Label(self, text="You result", fg='black', font="Arial 12", bg="light yellow")
self.answer = Tk.Label(self, text="You result", fg='black', font="Arial 12", bg="light yellow")
self.answer.pack()
self.error_msg = tk.Label(self, text="", fg='black', font="Arial 12", bg="light yellow")
self.error_msg = Tk.Label(self, text="", fg='black', font="Arial 12", bg="light yellow")
self.error_msg.pack()

self.log_label = Tk.Label(self, text="", fg='black', font="Arial 12", bg="light yellow")
self.log_label.pack()
self.my_back_bind()

def on_submit(self):
if self.view_model.get_number_of_rows() == int(self.rows.get("1.0", tk.END).strip()):
if self.view_model.get_number_of_rows() == int(self.rows.get("1.0", Tk.END).strip()):
self.my_bind()
self.view_model.calculate_determinant()
self.my_back_bind()
Expand All @@ -87,7 +90,7 @@ def on_change(self):

def my_bind(self):
try:
self.view_model.set_number_of_rows(int(self.rows.get("1.0", tk.END).strip()))
self.view_model.set_number_of_rows(int(self.rows.get("1.0", Tk.END).strip()))
self.error_msg.config(text="")
except ValueError:
self.error_msg.config(text="Rows count should be number!")
Expand All @@ -99,8 +102,12 @@ def my_bind(self):
self.view_model.update_matrix_content(good_table)

def my_back_bind(self):
self.rows.delete("1.0", tk.END)
self.rows.insert(tk.END, self.view_model.get_number_of_rows())

logger_text = '\n'.join(self.view_model.my_logger.
get_last_messages_from_logs_list(self.count_log_messages))
self.log_label.config(text=logger_text)
self.rows.delete("1.0", Tk.END)
self.rows.insert(Tk.END, self.view_model.get_number_of_rows())
matrix_as_list = self.view_model.get_matrix_as_list()
self.table.pack_forget()
self.table = SimpleTableInput(self, self.view_model.rows, matrix_as_list)
Expand Down
5 changes: 5 additions & 0 deletions code/timonova-anastasia/src/my_infrastructure/fake_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from my_infrastructure.ilogger import ILogger


class FakeLogger(ILogger):
pass
13 changes: 13 additions & 0 deletions code/timonova-anastasia/src/my_infrastructure/ilogger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class ILogger(object):

def __init__(self):
self.logs_list = []

def get_logs_list(self):
return self.logs_list

def append_message_to_logs_list(self, message):
self.logs_list.append(message)

def get_last_messages_from_logs_list(self, count):
return self.logs_list[-count:]
13 changes: 13 additions & 0 deletions code/timonova-anastasia/src/my_infrastructure/real_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import logging

from my_infrastructure.ilogger import ILogger


class RealLogger(ILogger):
def __init__(self):
super(RealLogger, self).__init__()
logging.basicConfig(filename='matrix.log', level=logging.INFO)

def append_message_to_logs_list(self, message):
self.logs_list.append(message)
logging.info(message)
29 changes: 29 additions & 0 deletions code/timonova-anastasia/src/my_infrastructure/test_for_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import unittest

from my_infrastructure.fake_logger import FakeLogger


class TestForLogger(unittest.TestCase):
def setUp(self):
self.my_logger = FakeLogger()

def test_can_create_logger(self):
self.assertTrue(isinstance(self.my_logger, FakeLogger))

def test_by_default_log_is_empty(self):
log = self.my_logger.get_logs_list()
self.assertEqual(log, [])

def test_state_after_append_message_to_logs_list(self):
self.my_logger.append_message_to_logs_list('## testing line0 ##')
self.assertEqual(['## testing line0 ##'], self.my_logger.get_last_messages_from_logs_list(1))

def test_can_get_last_log(self):
self.my_logger.append_message_to_logs_list('## testing line1 ##')
self.my_logger.append_message_to_logs_list('## testing line2 ##')
self.assertEqual(['## testing line2 ##'], self.my_logger.get_last_messages_from_logs_list(1))

def test_can_log_several_messages(self):
self.my_logger.append_message_to_logs_list('## testing line3 ##')
self.my_logger.append_message_to_logs_list('## testing line4 ##')
self.assertEqual(['## testing line3 ##', '## testing line4 ##'], self.my_logger.get_logs_list())
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import unittest

from matrix import Matrix
from matrix import MatrixError
from my_model.matrix import Matrix
from my_model.matrix import MatrixError


class MatrixTests(unittest.TestCase):
Expand Down
Empty file.
96 changes: 96 additions & 0 deletions code/timonova-anastasia/src/my_view_model/tests_for_viewmodel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import unittest
from my_view_model.view_model import ViewModel
from my_infrastructure.fake_logger import FakeLogger
from my_infrastructure.real_logger import RealLogger


class TestForViewModel(unittest.TestCase):

def setUp(self):
self.view_model = ViewModel(FakeLogger())

def test_check_number_or_rows_in_init(self):
self.assertEqual(self.view_model.get_number_of_rows(), 3)

def test_check_init_matrix_by_zero_values(self):
self.assertEqual(self.view_model.get_matrix_as_list(), [[0]*3]*3)

def test_check_init_matrix_by_non_zero_values(self):
content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
self.view_model.update_matrix_content(content)
self.assertEqual(self.view_model.get_matrix_as_list(), [[2, 1, 2], [0, 3, 0], [3, 1, 1]])

def test_get_number_of_rows(self):
self.view_model.set_number_of_rows(4)
self.assertEqual(self.view_model.get_number_of_rows(), 4)

def test_change_matrix_rank(self):
self.view_model.set_number_of_rows(4)
self.assertEqual(self.view_model.init_zero_matrix_with_new_rank_value(), [[0]*4]*4)

def test_calculate_determinant(self):
content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
self.view_model.update_matrix_content(content)
self.assertEqual(self.view_model.calculate_determinant(), -12)

def test_set_answer(self):
answer_str = '1'
self.view_model.set_answer(answer_str)
self.assertEqual(self.view_model.answer, answer_str)

def test_check_correct_answer(self):
content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
self.view_model.update_matrix_content(content)
self.view_model.calculate_determinant()
self.assertEqual(self.view_model.answer, -12)


class TestForViewModeWithFakeLogging(unittest.TestCase):
def setUp(self):
self.view_model = ViewModel(FakeLogger())

def test_start_logging(self):
self.assertEqual(['\n\n## Start logging... ##'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_get_number_of_rows_logging(self):
self.view_model.get_number_of_rows()
self.assertEqual(['Getting matrix\'s rows: 3'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_set_number_of_rows(self):
self.view_model.set_number_of_rows(4)
self.assertEqual(['Setting matrix\'s rows: 4'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_get_matrix_as_list(self):
self.view_model.get_matrix_as_list()
self.assertEqual(['Getting matrix as data lines: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_set_answer(self):
self.view_model.set_answer('0')
self.assertEqual(['Setting answer: 0'], self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_update_matrix_content(self):
content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
self.view_model.update_matrix_content(content)
self.assertEqual(['Updating matrix\'s content: [[2, 1, 2], [0, 3, 0], [3, 1, 1]]'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_calculate_determinant(self):
content = [[2, 1, 2], [0, 3, 0], [3, 1, 1]]
self.view_model.update_matrix_content(content)
self.view_model.calculate_determinant()
self.assertEqual(['Calculating determinant: -12'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))

def test_init_zero_matrix_with_new_rank_value(self):
self.view_model.init_zero_matrix_with_new_rank_value()
self.assertEqual(['Getting matrix as data lines: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]'],
self.view_model.my_logger.get_last_messages_from_logs_list(1))


class TestForViewModeWithRealLogging(TestForViewModeWithFakeLogging):
def setUp(self):
self.view_model = ViewModel(RealLogger())
Loading

0 comments on commit 5e1e2e4

Please sign in to comment.