python-efl/tests/edje/test_04_edit.py

476 lines
16 KiB
Python

#!/usr/bin/env python
from efl import evas
from efl import ecore
from efl import edje
from efl.edje import EDJE_PART_TYPE_RECTANGLE
from efl.edje_edit import EdjeEdit, Text_Style, Text_Style_Tag, Color_Class, \
Part, Program
import os, unittest
theme_file = os.path.join(os.path.dirname(__file__), "theme.edj")
class TestEdjeEditBase(unittest.TestCase):
def setUp(self):
self.canvas = evas.Canvas(method="buffer",
size=(400, 500),
viewport=(0, 0, 400, 500))
self.canvas.engine_info_set(self.canvas.engine_info_get())
def tearDown(self):
self.canvas.delete()
def testConstructor(self):
o = EdjeEdit(self.canvas, file=theme_file, group="main")
self.assertIsInstance(o, EdjeEdit)
o.delete()
self.assertTrue(o.is_deleted())
class TestEdjeEditGeneral(unittest.TestCase):
def setUp(self):
self.canvas = evas.Canvas(method="buffer",
size=(400, 500),
viewport=(0, 0, 400, 500))
self.canvas.engine_info_set(self.canvas.engine_info_get())
self.o = EdjeEdit(self.canvas, file=theme_file, group="main")
def tearDown(self):
self.o.delete()
self.canvas.delete()
def testGeneral(self):
self.assertEqual(self.o.compiler_get(), "edje_cc")
self.assertEqual(self.o.file_get(), (theme_file, "main"))
# o.print_internal_status() # FIXME this crash badly
def testGroup(self):
g = self.o.current_group
self.assertEqual((g.w_min, g.w_max), (200, 400))
self.assertEqual((g.h_min, g.h_max), (200, 400))
g.w_min = g.h_min = 201
g.w_max = g.h_max = 401
self.assertEqual((g.w_min, g.w_max), (201, 401))
self.assertEqual((g.h_min, g.h_max), (201, 401))
# TODO test g.rename
def testGroupAdd(self):
self.assertFalse(self.o.group_exist("test_new_group"))
self.o.group_add("test_new_group")
self.assertTrue(self.o.group_exist("test_new_group"))
@unittest.skip("crash badly") # TODO FIXME
def testGroupDel(self):
self.o.group_add("test_new_group2")
self.o.group_del("test_new_group2")
self.assertFalse(o.group_exist("test_new_group2"))
def testData(self):
self.assertIn("key1", self.o.data)
self.assertIn("key2", self.o.data)
self.assertEqual(self.o.data_get("key1"), "value1")
self.assertEqual(self.o.data_get("key2"), "value2")
self.o.data_set("key1", "new_value1")
self.o.data_set("key2", "new_value2")
self.assertEqual(self.o.data_get("key1"), "new_value1")
self.assertEqual(self.o.data_get("key2"), "new_value2")
self.o.data_add("key5", "value5")
self.assertEqual(self.o.data_get("key5"), "value5")
self.o.data_rename("key5", "key55")
self.assertEqual(self.o.data_get("key55"), "value5")
# self.o.data_del("key44") # FIXME this crash badly
# self.assertNotIn("key44", self.o.data)
def testGroupData(self):
self.assertIn("key3", self.o.group_data)
self.assertIn("key4", self.o.group_data)
self.assertEqual(self.o.group_data_get("key3"), "value3")
self.assertEqual(self.o.group_data_get("key4"), "value4")
self.o.group_data_set("key3", "new_value3")
self.o.group_data_set("key4", "new_value4")
self.assertEqual(self.o.group_data_get("key3"), "new_value3")
self.assertEqual(self.o.group_data_get("key4"), "new_value4")
self.o.group_data_add("key6", "value6")
self.assertEqual(self.o.group_data_get("key6"), "value6")
self.o.group_data_del("key6")
self.assertNotIn("key6", self.o.group_data)
def testTextStyles(self):
self.assertIn("style1", self.o.text_styles)
self.assertIn("style2", self.o.text_styles)
self.assertNotIn("styleNOTEXISTS", self.o.text_styles)
style = self.o.text_style_get("style1")
self.assertIsInstance(style, Text_Style)
self.assertIn("DEFAULT", style.tags)
self.assertIn("br", style.tags)
self.assertIn("tab", style.tags)
self.assertNotIn("b", style.tags)
tag = style.tag_get("DEFAULT")
self.assertIsInstance(tag, Text_Style_Tag)
# TODO more test for tags add/del
def testColorClasses(self):
self.assertIn("colorclass1", self.o.color_classes)
self.assertIn("colorclass2", self.o.color_classes)
self.assertNotIn("colorclassNOTEXISTS", self.o.color_classes)
cc1 = self.o.color_class_get("colorclass1")
cc2 = self.o.color_class_get("colorclass2")
self.assertIsInstance(cc1, Color_Class)
self.assertIsInstance(cc2, Color_Class)
self.assertEqual(cc1.name, "colorclass1")
self.assertEqual(cc2.name, "colorclass2")
cc1.name = "colorclass1_new"
self.assertEqual(cc1.name, "colorclass1_new")
self.assertEqual(cc1.colors_get(), ((1,2,3,4),(5,6,7,8),(9,10,11,12)))
self.assertEqual(cc2.colors_get(), ((13,14,15,16),(17,18,19,20),(21,22,23,24)))
cc1.colors_set(50,51,52,53, 54,55,56,57, 58,59,60,61)
cc2.colors_set(70,71,72,73, 74,75,76,77, 78,79,80,81)
self.assertEqual(cc1.colors_get(), ((50,51,52,53),(54,55,56,57),(58,59,60,61)))
self.assertEqual(cc2.colors_get(), ((70,71,72,73),(74,75,76,77),(78,79,80,81)))
self.o.color_class_add("colorclass3")
self.assertIn("colorclass3", self.o.color_classes)
cc3 = self.o.color_class_get("colorclass3")
self.assertIsInstance(cc3, Color_Class)
cc3.colors_set(85,86,87,88, 89,90,91,92, 93,94,95,96)
self.assertEqual(cc3.colors_get(), ((85,86,87,88),(89,90,91,92),(93,94,95,96)))
self.o.color_class_del("colorclass3")
self.assertNotIn("colorclass3", self.o.color_classes)
@unittest.skip("need to fix external_del to not leave a NULL element") # TODO FIXME
def testExternal(self):
self.assertEqual(self.o.externals, ['elm'])
self.o.external_add('emotion')
self.assertEqual(self.o.externals, ['elm', 'emotion'])
self.o.external_del('emotion')
self.assertEqual(self.o.externals, ['elm'])
# TODO test for images, image_id_get, image_del
def testScript(self):
self.assertEqual(len(self.o.script), 104)
# TODO test setting .script, compile and .script_errors
class TestEdjeEditParts(unittest.TestCase):
def setUp(self):
self.canvas = evas.Canvas(method="buffer",
size=(400, 500),
viewport=(0, 0, 400, 500))
self.canvas.engine_info_set(self.canvas.engine_info_get())
self.o = EdjeEdit(self.canvas, file=theme_file, group="main")
def tearDown(self):
self.o.delete()
self.canvas.delete()
def testPart(self):
self.assertEqual(len(self.o.parts), 42)
self.assertTrue(self.o.part_exist("bg"))
self.assertTrue(self.o.part_exist("rect"))
self.assertFalse(self.o.part_exist("NOTEXIST"))
p = self.o.part_get("rect")
self.assertIsInstance(p, Part)
self.assertEqual(p.type, EDJE_PART_TYPE_RECTANGLE)
def testPartRename(self):
p = self.o.part_get("rect")
self.assertEqual(p.name, "rect")
p.name = "rect_new_name"
self.assertEqual(p.name, "rect_new_name")
p.rename("rect")
self.assertEqual(p.name, "rect")
def testPartAdd(self):
self.o.part_add("new_part", EDJE_PART_TYPE_RECTANGLE)
self.assertTrue(self.o.part_exist("new_part"))
self.assertEqual(len(self.o.parts), 43)
p = self.o.part_get("new_part")
self.assertIsInstance(p, Part)
@unittest.skip("part_del() crash") # TODO FIXME
def testPartDel(self):
self.assertTrue(self.o.part_exist("rect"))
self.o.part_del("rect")
self.assertFalse(self.o.part_exist("rect"))
@unittest.skip("cause segfault") # TODO FIXME
def testPartStacking(self):
# print(self.o.parts)
p = self.o.part_get("rect")
self.assertEqual(p.below_get(), "bg")
self.assertEqual(p.above_get(), "label")
p.restack_below()
p.restack_above()
self.assertEqual(p.below_get(), "bg")
self.assertEqual(p.above_get(), "label")
@unittest.skip("cause segfault") # TODO FIXME
def testPartClip(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.clip_to, "test_clip")
p.clip_to = "bg"
self.assertEqual(p.clip_to, "bg")
def testPartSource(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.source, None)
def testPartMouseEvents(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.mouse_events, False)
p.mouse_events = True
self.assertEqual(p.mouse_events, True)
def testPartRepeatEvents(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.repeat_events, False)
p.repeat_events = True
self.assertEqual(p.repeat_events, True)
def testPartEffect(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.effect, 18)
p.effect = 2
self.assertEqual(p.effect, 2)
def testPartIgnoreFlags(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.ignore_flags, 1)
p.ignore_flags = 0
self.assertEqual(p.ignore_flags, 0)
def testPartScale(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.scale, True)
p.scale = False
self.assertEqual(p.scale, False)
def testPartDrag(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.drag, (1,1))
p.drag = (0,0)
self.assertEqual(p.drag, (0,0))
def testPartDragStep(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.drag_step, (6,7))
p.drag_step = (16,17)
self.assertEqual(p.drag_step, (16,17))
def testPartDragCount(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.drag_count, (8,9))
p.drag_count = (18,19)
self.assertEqual(p.drag_count, (18,19))
def testPartDragConfine(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.drag_confine, "label")
p.drag_confine = "bg"
self.assertEqual(p.drag_confine, "bg")
def testPartDragEvent(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.drag_event, "edit_test_drag_event")
p.drag_event = "edit_test_drag_event"
self.assertEqual(p.drag_event, "edit_test_drag_event")
def testPartApi(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.api, ("api_name", "api_description"))
p.api = ("new_api_name", "new_api_desc")
self.assertEqual(p.api, ("new_api_name", "new_api_desc"))
class TestEdjeEditPrograms(unittest.TestCase):
def setUp(self):
self.canvas = evas.Canvas(method="buffer",
size=(400, 500),
viewport=(0, 0, 400, 500))
self.canvas.engine_info_set(self.canvas.engine_info_get())
self.o = EdjeEdit(self.canvas, file=theme_file, group="main")
def tearDown(self):
self.o.delete()
self.canvas.delete()
def testProgram(self):
o = self.o
self.assertIn("prog1", o.programs)
self.assertIn("prog2", o.programs)
self.assertIn("prog3", o.programs)
self.assertNotIn("progNOTIN", o.programs)
pr1 = o.program_get("prog1")
self.assertIsInstance(pr1, Program)
self.assertEqual(pr1.edje_get(), self.o)
o.program_add("prog5")
pr5 = o.program_get("prog5")
self.assertIsInstance(pr5, Program)
self.assertTrue(o.program_exist("prog5"))
pr5.name = "prog10"
self.assertTrue(o.program_exist("prog10"))
self.assertFalse(o.program_exist("prog5"))
pr5.rename("prog5")
o.program_del("prog5")
self.assertFalse(o.program_exist("prog5"))
self.assertNotIn("prog5", o.programs)
# TODO test Program.run()
def testProgramSource(self):
p = self.o.program_get("prog1")
self.assertEqual(p.source_get(), "edit_test")
p.source_set("edit_*")
self.assertEqual(p.source_get(), "edit_*")
def testProgramSignal(self):
p = self.o.program_get("prog1")
self.assertEqual(p.signal_get(), "mouse,down,1")
p.signal_set("mouse,down,2")
self.assertEqual(p.signal_get(), "mouse,down,2")
def testProgramIn(self):
p = self.o.program_get("prog1")
self.assertEqual(p.in_from_get(), 1.1)
self.assertEqual(p.in_range_get(), 2.2)
p.in_from_set(3.3)
p.in_range_set(4.4)
self.assertEqual(p.in_from_get(), 3.3)
self.assertEqual(p.in_range_get(), 4.4)
def testProgramAction(self):
p = self.o.program_get("prog1")
self.assertEqual(p.action_get(), 1)
p.action_set(2)
self.assertEqual(p.action_get(), 2)
# restore the original to not mess stuff
p.action_set(1)
def testProgramTargets(self):
p = self.o.program_get("prog1")
self.assertEqual(p.targets_get(), ["edit_test", "test_clip"])
p.target_del("test_clip")
self.assertEqual(p.targets_get(), ["edit_test"])
p.target_add("test_clip")
self.assertEqual(p.targets_get(), ["edit_test", "test_clip"])
p.targets_clear()
self.assertEqual(p.targets_get(), [])
@unittest.skip("Program.after_add() does not work")
def testProgramAfters(self):
p = self.o.program_get("prog1")
self.assertEqual(p.afters_get(), ["prog2", "prog3"])
p.after_del("prog2")
self.assertEqual(p.afters_get(), ["prog3"])
p.after_add("prog4")
self.assertEqual(p.afters_get(), ["prog3", "prog4"])
p.afters_clear()
self.assertEqual(p.afters_get(), [])
def testProgramState(self):
p = self.o.program_get("prog1")
self.assertEqual(p.state_get(), "state2")
self.assertEqual(p.value_get(), 0.1)
p.state_set("state1")
p.value_set(0.0)
self.assertEqual(p.state_get(), "state1")
self.assertEqual(p.value_get(), 0.0)
def testProgramApi(self):
p = self.o.program_get("prog1")
self.assertEqual(p.api, ("p_api_name", "p_api_desc"))
p.api = ("new_name", "new_desc")
self.assertEqual(p.api, ("new_name", "new_desc"))
@unittest.skip("Program.script does not work")
def testProgramScript(self):
p = self.o.program_get("emit_back_message")
print(p.script)
class TestEdjeEditPartStates(unittest.TestCase):
def setUp(self):
self.canvas = evas.Canvas(method="buffer",
size=(400, 500),
viewport=(0, 0, 400, 500))
self.canvas.engine_info_set(self.canvas.engine_info_get())
self.o = EdjeEdit(self.canvas, file=theme_file, group="main")
def tearDown(self):
self.o.delete()
self.canvas.delete()
def testPartStates(self):
p = self.o.part_get("edit_test")
self.assertEqual(p.states, ["default 0.00","state1 0.00","state2 0.00","state2 0.10"])
# state_add()
p.state_add("state9", 0.1)
self.assertEqual(p.states, ["default 0.00","state1 0.00","state2 0.00","state2 0.10","state9 0.10"])
# state_selected TODO FIXME state_selected_set does not work
# self.assertEqual(p.state_selected_get(), ("default", 0.0))
# p.state_selected_set("state2", 0.1)
# self.assertEqual(p.state_selected_get(), ("state2", 0.1))
# state del() TODO FIXME state_del does not work
# p.state_del("state9", 0.1)
# self.assertEqual(p.states, ["default 0.00","state1 0.00","state2 0.00","state2 0.10"])
# TODO test state_copy
@unittest.skip("state_exist does not work") # TODO FIXME
def testPartStateExist(self):
p = self.o.part_get("edit_test")
self.assertFalse(p.state_exist("stateNOTEXISTS", 0.1))
self.assertTrue(p.state_exist("state1", 0.0))
self.assertTrue(p.state_exist("state2", 0.1))
@unittest.skip("PartState does not work") # TODO FIXME
def testPartStateProps(self):
p = self.o.part_get("edit_test")
s = p.state_get("state1", 0.0)
print(s)
print(s.rel1_to_get())
if __name__ == '__main__':
unittest.main(verbosity=2)
edje.shutdown()
ecore.shutdown()
evas.shutdown()