def test_cjk_forms(self): """ Check form widgets work with CJK characters. """ # Create a dummy screen. screen = MagicMock(spec=Screen, colours=8, unicode_aware=False) scene = MagicMock(spec=Scene) canvas = Canvas(screen, 10, 40, 0, 0) # Create the form we want to test. form = Frame(canvas, canvas.height, canvas.width, has_border=False) layout = Layout([100], fill_frame=True) mc_list = MultiColumnListBox(4, [3, 5, 0], [ (["1", "2", "3"], 1), ([u"你", u"確", u"定"], 2), ], titles=[u"你確定嗎?", u"你確定嗎?", u"你確定嗎?"]) text = Text() text_box = TextBox(3) form.add_layout(layout) layout.add_widget(mc_list) layout.add_widget(text) layout.add_widget(text_box) form.fix() form.register_scene(scene) form.reset() # Set some interesting values... text.value = u"你確定嗎? 你確定嗎? 你確定嗎?" text_box.value = [u"你確定嗎", u"?"] # Check that the CJK characters render correctly - no really this is correctly aligned! self.maxDiff = None form.update(0) self.assert_canvas_equals( canvas, u"你你 你你確確 你你確確定定嗎嗎?? \n" + u"1 2 3 \n" + u"你你 確確 定定 \n" + u" \n" + u"你你確確定定嗎嗎?? 你你確確定定嗎嗎?? 你你確確定定嗎嗎?? \n" + u"你你確確定定嗎嗎 \n" + u"?? \n" + u" \n" + u" \n" + u" \n") # Check that mouse input takes into account the glyph width self.process_mouse(form, [(5, 4, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["b"]) self.process_mouse(form, [(2, 4, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["p"]) form.save() self.assertEqual(text.value, u"你p確b定嗎? 你確定嗎? 你確定嗎?") self.process_mouse(form, [(2, 5, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["p"]) self.process_mouse(form, [(1, 6, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["b"]) form.save() self.assertEqual(text_box.value, [u"你p確定嗎", u"b?"])
def test_multi_column_list_box(self): """ Check MultiColumnListBox works as expected. """ # Create a dummy screen. screen = MagicMock(spec=Screen, colours=8, unicode_aware=False) scene = MagicMock(spec=Scene) canvas = Canvas(screen, 10, 40, 0, 0) # Create the form we want to test. form = Frame(canvas, canvas.height, canvas.width, has_border=False) layout = Layout([100], fill_frame=True) mc_list = MultiColumnListBox( Widget.FILL_FRAME, [3, "4", ">4", "<4", ">10%", "100%"], [ (["1", "2", "3", "4", "5", "6"], 1), (["11", "222", "333", "444", "555", "6"], 2), (["111", "2", "3", "4", "5", "6"], 3), (["1", "2", "33333", "4", "5", "6"], 4), (["1", "2", "3", "4", "5", "6666666666666666666666"], 5), ], titles=["A", "B", "C", "D", "E", "F"], name="mc_list") form.add_layout(layout) layout.add_widget(mc_list) form.fix() form.register_scene(scene) form.reset() # Check we have a default value for our list. form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that UP/DOWN change selection. self.process_keys(form, [Screen.KEY_DOWN]) form.save() self.assertEqual(form.data, {"mc_list": 2}) self.process_keys(form, [Screen.KEY_UP]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that PGUP/PGDN change selection. self.process_keys(form, [Screen.KEY_PAGE_DOWN]) form.save() self.assertEqual(form.data, {"mc_list": 5}) self.process_keys(form, [Screen.KEY_PAGE_UP]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that the widget is rendered correctly. form.update(0) self.assert_canvas_equals( canvas, "A B C D E F \n" + "1 2 3 4 5 6 \n" + "11 222 333 444 555 6 \n" + "...2 3 4 5 6 \n" + "1 2 3... 4 5 6 \n" + "1 2 3 4 5 6666666666666666666\n" + " \n" + " \n" + " \n" + " \n") # Check that mouse input changes selection. self.process_mouse(form, [(2, 2, MouseEvent.LEFT_CLICK)]) form.save() self.assertEqual(form.data, {"mc_list": 2}) self.process_mouse(form, [(2, 1, MouseEvent.LEFT_CLICK)]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that the start_line can be read and set - and enforces good behaviour mc_list.start_line = 0 self.assertEqual(mc_list.start_line, 0) mc_list.start_line = len(mc_list.options) - 1 self.assertEqual(mc_list.start_line, len(mc_list.options) - 1) mc_list.start_line = 10000000 self.assertEqual(mc_list.start_line, len(mc_list.options) - 1) # Check that options can be read and set. mc_list.options = [(["a", "b", "c", "d", "e", "f"], 0)] self.assertEqual(mc_list.options, [(["a", "b", "c", "d", "e", "f"], 0)]) mc_list.options = [] self.assertEqual(mc_list.options, []) # Check that the form re-renders correctly afterwards. form.update(1) self.assert_canvas_equals( canvas, "A B C D E F \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n") # Check that the current focus ignores unknown events. event = object() self.assertEqual(event, form.process_event(event))