def test_empty_search_term(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("") self.assertEqual(0, search_result_object.result_count) self.assertEqual([], search_result_object.expression) self.assertEqual([], search_result_object.reading) self.assertEqual([], search_result_object.meaning)
def test_no_result(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("nonsensicalgibberish") self.assertEqual(0, search_result_object.result_count) self.assertEqual([], search_result_object.expression) self.assertEqual([], search_result_object.reading) self.assertEqual([], search_result_object.meaning)
def test_syoumetsu(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("消滅") self.assertEqual(2, search_result_object.result_count) self.assertEqual(u'消滅', search_result_object.get_expression_number(0)) self.assertEqual(u'しょうめつ', search_result_object.get_reading_number(0)) self.assertEqual( u'lapse; annihilation (Physics term) ;\nextinguishment; termination (e.g. of legal representation);\n(Mathematical term) vanishing', search_result_object.get_meaning_number(0))
def test_kaku(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("各") self.assertEqual(20, search_result_object.result_count) self.assertEqual(u'各', search_result_object.get_expression_number(0)) self.assertEqual(u'かく', search_result_object.get_reading_number(0)) self.assertEqual( u'each; every; all', search_result_object.get_meaning_number(0))
def test_surrounding_expression(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("*け賜*") self.assertEqual(1, search_result_object.result_count) self.assertEqual(u'受け賜る', search_result_object.get_expression_number(0)) self.assertEqual(u'うけたまわる', search_result_object.get_reading_number(0)) self.assertEqual( u'(Humble (kenjougo) language) to hear; to be told; to know;\nto receive (order); to undertake; to comply; to take (a reservation, etc.)', search_result_object.get_meaning_number(0))
def test_unfinished(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("tabe") self.assertEqual(20, search_result_object.result_count) self.assertEqual(u'多弁', search_result_object.get_expression_number(0)) self.assertEqual(u'たべん', search_result_object.get_reading_number(0)) self.maxDiff = None self.assertEqual( u'talkativeness; verbosity', search_result_object.get_meaning_number(0))
def test_nasty_example(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("掛ける") self.assertEqual(1, search_result_object.result_count) self.assertEqual(u'掛ける', search_result_object.get_expression_number(0)) self.assertEqual(u'かける', search_result_object.get_reading_number(0)) self.maxDiff = None self.assertEqual( 'to hang (e.g. picture); to hoist (e.g. sail); to raise (e.g. flag);\nto sit;\n() to be partway (verb); to begin (but not complete);\nto take (time, money); to expend (money, time, etc.);\nto make (a call);\nto multiply;\nto secure (e.g. lock);\nto put on (glasses, etc.);\nto cover;\nto burden someone;\nto apply (insurance);\nto turn on (an engine, etc.); to set (a dial, an alarm clock, etc.);\nto put an effect (spell, anaesthetic, etc.) on;\nto hold an emotion for (pity, hope, etc.);\nto bind;\nto pour (or sprinkle, spray, etc.) onto;\nto argue (in court); to deliberate (in a meeting); to present (e.g. idea to a conference, etc.);\nto increase further;\nto catch (in a trap, etc.);\nto set atop;\nto erect (a makeshift building);\nto hold (a play, festival, etc.);\n(Auxiliary verb) (after -masu stem of verb) indicates (verb) is being directed to (someone)', search_result_object.get_meaning_number(0))
def test_simple_example(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("taberu") self.assertEqual(2, search_result_object.result_count) self.assertEqual(u'食べる', search_result_object.get_expression_number(0)) self.assertEqual(u'たべる', search_result_object.get_reading_number(0)) self.assertEqual(u'to eat;\nto live on (e.g. a salary); to live off; to subsist on', search_result_object.get_meaning_number(0)) self.assertEqual(u'喰べる', search_result_object.get_expression_number(1)) self.assertEqual(u'たべる', search_result_object.get_reading_number(1)) self.assertEqual(u'to eat;\nto live on (e.g. a salary); to live off; to subsist on', search_result_object.get_meaning_number(1))
def test_wildcard_reading(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.get_search_result("*けたまわる") self.assertEqual(2, search_result_object.result_count) self.assertEqual(u'承る', search_result_object.get_expression_number(0)) self.assertEqual(u'うけたまわる', search_result_object.get_reading_number(0)) self.assertEqual( u'to hear; to be told; to know;\nto receive (order); to undertake; to comply; to take (a reservation, etc.)', search_result_object.get_meaning_number(0)) self.assertEqual(u'受け賜る', search_result_object.get_expression_number(1)) self.assertEqual(u'うけたまわる', search_result_object.get_reading_number(1)) self.assertEqual( u'to hear; to be told; to know;\nto receive (order); to undertake; to comply; to take (a reservation, etc.)', search_result_object.get_meaning_number(1))
def add_main_button(self): self.searcher = Jp_to_eng_word_search_handler() search_button = QPushButton('Click me', self.widget) search_button.resize(0, 0) search_button.clicked.connect(self.on_search) search_button.setShortcut(QKeySequence("return"))
def test_a(self): searcher_handler = Jp_to_eng_word_search_handler() search_result_object = searcher_handler.search("a") self.assertEqual(20, search_result_object.result_count) self.assertEqual(u'', search_result_object.get_expression_number(0)) self.assertEqual(u'あ', search_result_object.get_reading_number(0)) self.assertEqual(u'Ah! (expression of surprise, recollection, etc.); Oh!;\nHey! (to get someone\'s attention)', search_result_object.get_meaning_number(0)) self.assertEqual(u'亜', search_result_object.get_expression_number(1)) self.assertEqual(u'あ', search_result_object.get_reading_number(1)) self.assertEqual(u'sub-;\n-ous (indicating a low oxidation state); -ite', search_result_object.get_meaning_number(1)) self.assertEqual(u'吾', search_result_object.get_expression_number(2)) self.assertEqual(u'あ', search_result_object.get_reading_number(2)) self.assertEqual(u'I; me', search_result_object.get_meaning_number(2))
class User_Interface(): def __init__(self): self.search_result = None self.small_font = 9 self.big_font = 16 mw.myWidget = self.widget = QWidget() self.widget.resize(1020, 700) self.add_input_textbox() self.add_inner_box() self.add_scroll_area() self.add_main_button() self.add_deck_textbox() self.add_deck_selector_button() self.add_hotkeys() self.widget.show() def add_inner_box(self): self.inner_box = QWidget() self.inner_box.resize(1000, 2300) self.numbercolumn = QListWidget(self.inner_box) self.numbercolumn.move(0, 0) self.numbercolumn.resize(25, 500) self.column1 = QListWidget(self.inner_box) self.column1.move(28, 0) self.column1.resize(300, 500) self.column2 = QListWidget(self.inner_box) self.column2.move(348, 0) self.column2.resize(300, 500) self.column3 = QListWidget(self.inner_box) self.column3.move(668, 0) self.column3.resize(300, 500) def add_scroll_area(self): mw.scrollarea = self.scrollarea = QScrollArea(self.widget) self.scrollarea.move(0, 50) self.scrollarea.resize(1020, 650) self.scrollarea.setWidget(self.inner_box) def add_input_textbox(self): mw.textbox = self.textbox = QLineEdit(self.widget) self.textbox.move(300, 0) self.textbox.resize(400, 30) def add_deck_textbox(self): config_parser.read_config() self.deck_textbox = QLineEdit(self.widget) self.deck_textbox.move(750, 0) self.deck_textbox.resize(110, 30) self.deck_textbox.setText(config_parser.deck_name) def add_main_button(self): self.searcher = Jp_to_eng_word_search_handler() search_button = QPushButton('Click me', self.widget) search_button.resize(0, 0) search_button.clicked.connect(self.on_search) search_button.setShortcut(QKeySequence("return")) def add_deck_selector_button(self): deck_select_button = QPushButton('Set deck', self.widget) deck_select_button.clicked.connect(self.on_deck_select) deck_select_button.move(860,0) def on_deck_select(self): config_parser.deck_name = self.deck_textbox.text() config_parser.write_config() def on_search(self): self.search_result = self.searcher.get_search_result(self.textbox.text()) if self.search_result.get_result_count() > 0: self.textbox.setText("") self.column1.clear() self.column2.clear() self.column3.clear() self.numbercolumn.clear() self.realign_columns() for i in range(0, self.search_result.get_result_count()): self.add_to_third_column(i, self.search_result) self.add_to_number_column(i, self.search_result) self.add_to_first_column(i, self.search_result) self.add_to_second_column(i, self.search_result) def realign_columns(self): column_height = self.get_column3_height() self.resize_column_heights(column_height) self.move_columns() def column12_width(self): width_in_pixels = 210 for i in range(0, self.search_result.get_result_count()): if self.search_result.get_reading_number(i).__len__() * 22 > width_in_pixels: width_in_pixels = self.search_result.get_reading_number(i).__len__() * 22 if self.search_result.get_expression_number(i).__len__() * 22 > width_in_pixels: width_in_pixels = self.search_result.get_expression_number(i).__len__() * 22 return width_in_pixels def move_columns(self): self.column2.move(25 + self.column12_width(), 0) self.column3.move(25 + (self.column12_width() * 2), 0) def resize_column_heights(self, new_height): self.column1.resize(self.column12_width(), new_height) self.column2.resize(self.column12_width(), new_height) self.column3.resize(1200 - self.column12_width() - self.column12_width(), new_height) self.numbercolumn.resize(50, new_height) self.inner_box.resize(1000, new_height + 50) def get_column3_height(self): total_lines = 0 for i in range(0, self.search_result.get_result_count()): total_lines += self.count_lines(self.search_result.get_meaning_number(i)) return total_lines * 15 + 40 + (self.search_result.get_result_count() * 32) def add_to_third_column(self, i, result): self.add_string_to_list(self.column3, result.get_meaning_number(i), self.small_font) self.column3_line_count = self.count_lines(result.get_meaning_number(i)) self.add_padding_column3() self.add_padding_other_columns() def add_padding_column3(self): if self.column3_line_count == 1: self.add_string_to_list(self.column3, "\n", self.small_font) else: self.add_string_to_list(self.column3, "", self.small_font) def add_padding_other_columns(self): if self.column3_line_count < 3: self.lines_off_padding = self.make_newlines(0) else: self.lines_off_padding = self.make_newlines(self.column3_line_count - 1) def add_to_number_column(self, i, result): shortcut_list = ( "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P") self.add_string_to_list(self.numbercolumn, shortcut_list[i], self.big_font) self.add_string_to_list(self.numbercolumn, self.lines_off_padding, self.small_font) def add_to_first_column(self, i, result): self.add_string_to_list(self.column1, result.get_expression_number(i), self.big_font) self.add_string_to_list(self.column1, self.lines_off_padding, self.small_font) def add_to_second_column(self, i, result): self.add_string_to_list(self.column2, result.get_reading_number(i), self.big_font) self.add_string_to_list(self.column2, self.lines_off_padding, self.small_font) def add_string_to_list(self, itemlist, string, fontsize): item = QListWidgetItem(string) font = QFont() # font.setFamily("Lucida") font.setPointSize(fontsize) item.setFont(font) itemlist.addItem(item) def make_newlines(self, number): result = " " for i in range(0, number - 1): result += "\n" return result def count_lines(self, string): counter = 1 for char in string: if char == '\n': counter += 1 return counter def add_hotkeys(self): self.hk = Hotkeys(self)