aboutsummaryrefslogtreecommitdiffstats
path: root/src/scripts/pyolian
diff options
context:
space:
mode:
authorDave Andreoli <dave@gurumeditation.it>2018-02-28 14:18:45 +0100
committerDave Andreoli <dave@gurumeditation.it>2018-02-28 14:31:59 +0100
commitd176a37f32b47208aea57bb7fdf9934c4287d25a (patch)
treece3809a772164bccf7a94c55f008407e61eb889b /src/scripts/pyolian
parentPyolian: add API to get file name of a unit (diff)
downloadefl-d176a37f32b47208aea57bb7fdf9934c4287d25a.tar.gz
Pyolian: add APIs to retrieve units from a state
Also fixed a declaration error from previous commit
Diffstat (limited to 'src/scripts/pyolian')
-rw-r--r--src/scripts/pyolian/eolian.py8
-rw-r--r--src/scripts/pyolian/eolian_lib.py12
-rwxr-xr-xsrc/scripts/pyolian/test_eolian.py19
3 files changed, 37 insertions, 2 deletions
diff --git a/src/scripts/pyolian/eolian.py b/src/scripts/pyolian/eolian.py
index 6a5cdb0cfe..0243a7f1bb 100644
--- a/src/scripts/pyolian/eolian.py
+++ b/src/scripts/pyolian/eolian.py
@@ -483,6 +483,14 @@ class Eolian_State(Eolian_Unit):
def all_eot_files_parse(self):
return bool(lib.eolian_state_all_eot_files_parse(self._obj))
+ def unit_by_file_get(self, file_name):
+ c_unit = lib.eolian_state_unit_by_file_get(self._obj, _str_to_bytes(file_name))
+ return Eolian_Unit(c_unit) if c_unit else None
+
+ @property
+ def units(self):
+ return Iterator(Eolian_Unit, lib.eolian_state_units_get(self._obj))
+
### Namespace Utility Class #################################################
diff --git a/src/scripts/pyolian/eolian_lib.py b/src/scripts/pyolian/eolian_lib.py
index 5f45c0c73d..e86929e773 100644
--- a/src/scripts/pyolian/eolian_lib.py
+++ b/src/scripts/pyolian/eolian_lib.py
@@ -85,6 +85,14 @@ lib.eolian_state_all_eo_files_parse.restype = c_bool
lib.eolian_state_all_eot_files_parse.argtypes = [c_void_p,]
lib.eolian_state_all_eot_files_parse.restype = c_bool
+# EAPI const Eolian_Unit *eolian_state_unit_by_file_get(const Eolian_State *state, const char *file_name);
+lib.eolian_state_unit_by_file_get.argtypes = [c_void_p, c_char_p]
+lib.eolian_state_unit_by_file_get.restype = c_void_p
+
+# EAPI Eina_Iterator *eolian_state_units_get(const Eolian_State *state);
+lib.eolian_state_units_get.argtypes = [c_void_p,]
+lib.eolian_state_units_get.restype = c_void_p
+
# EAPI Eina_Iterator *eolian_declarations_get_by_file(const Eolian_State *state, const char *fname);
lib.eolian_declarations_get_by_file.argtypes = [c_void_p, c_char_p]
lib.eolian_declarations_get_by_file.restype = c_void_p
@@ -96,8 +104,8 @@ lib.eolian_unit_children_get.argtypes = [c_void_p,]
lib.eolian_unit_children_get.restype = c_void_p
# EAPI const char *eolian_unit_file_get(const Eolian_Unit *unit);
-lib.eolian_unit_children_get.argtypes = [c_void_p,]
-lib.eolian_unit_children_get.restype = c_char_p
+lib.eolian_unit_file_get.argtypes = [c_void_p,]
+lib.eolian_unit_file_get.restype = c_char_p
# EAPI const Eolian_Class *eolian_class_get_by_name(const Eolian_Unit *unit, const char *class_name);
lib.eolian_class_get_by_name.argtypes = [c_void_p, c_char_p]
diff --git a/src/scripts/pyolian/test_eolian.py b/src/scripts/pyolian/test_eolian.py
index f02b782c51..b53ae26caf 100755
--- a/src/scripts/pyolian/test_eolian.py
+++ b/src/scripts/pyolian/test_eolian.py
@@ -52,7 +52,26 @@ class TestBaseObject(unittest.TestCase):
self.assertNotEqual(cls1, enum1)
+class TestEolianState(unittest.TestCase):
+ def test_unit_getters(self):
+ count = 0
+ for unit in eolian_db.units:
+ self.assertIsInstance(unit, eolian.Eolian_Unit)
+ self.assertTrue(unit.file.endswith(('.eo', '.eot')))
+ count += 1
+ self.assertGreater(count, 500)
+
+ unit = eolian_db.unit_by_file_get('efl_ui_win.eo')
+ self.assertIsInstance(unit, eolian.Eolian_Unit)
+ self.assertEqual(unit.file, 'efl_ui_win.eo')
+
+
class TestEolianUnit(unittest.TestCase):
+ def test_file_get(self):
+ unit = eolian_db.unit_by_file_get('efl_ui_win.eo')
+ self.assertIsInstance(unit, eolian.Eolian_Unit)
+ self.assertEqual(unit.file, 'efl_ui_win.eo')
+
def test_children_listing(self):
l = list(eolian_db.children)
self.assertGreater(len(l), 500)