Revision: 3264
Author: jussi.ao.malinen
Date: Tue May 11 06:15:00 2010
Log: added prototype for new parsing framework
http://code.google.com/p/robotframework/source/detail?r=3264

Added:
 /trunk/proto/newparsing
 /trunk/proto/newparsing/newparsing.py

=======================================
--- /dev/null
+++ /trunk/proto/newparsing/newparsing.py       Tue May 11 06:15:00 2010
@@ -0,0 +1,160 @@
+
+import unittest
+
+from robot.utils.asserts import *
+
+
+class TestTestCaseFile(unittest.TestCase):
+
+    def setUp(self):
+        self.tcf = TestCaseFile()
+
+    def test_create(self):
+        assert_none(self.tcf.source)
+        assert_true(isinstance(self.tcf.setting_table, SettingTable))
+        assert_true(isinstance(self.tcf.variable_table, VariableTable))
+        assert_true(isinstance(self.tcf.testcase_table, TestCaseTable))
+        assert_true(isinstance(self.tcf.keyword_table, KeywordTable))
+
+    def test_edited(self):
+        assert_false(self.tcf.edited())
+        assert_false(self.tcf.setting_table.edited())
+        assert_false(self.tcf.variable_table.edited())
+        self.tcf.setting_table.doc.set('content')
+        assert_true(self.tcf.edited())
+        assert_true(self.tcf.setting_table.edited())
+        assert_false(self.tcf.variable_table.edited())
+
+
+class TestSettingTable(unittest.TestCase):
+
+    def setUp(self):
+        self.table = TestCaseFile().setting_table
+
+    def test_create(self):
+        assert_true(isinstance(self.table.doc, Documentation))
+        assert_true(isinstance(self.table.suite_setup, Fixture))
+        assert_true(isinstance(self.table.suite_teardown, Fixture))
+        assert_true(isinstance(self.table.metadata, Metadata))
+        assert_true(isinstance(self.table.test_setup, Fixture))
+        assert_true(isinstance(self.table.test_teardown, Fixture))
+        assert_true(isinstance(self.table.test_timeout, Timeout))
+        assert_true(isinstance(self.table.force_tags, Tags))
+        assert_true(isinstance(self.table.default_tags, Tags))
+        assert_equal(self.table.imports, [])
+
+    def test_set_doc(self):
+        self.table.doc.set('hello')
+        assert_equal(self.table.doc.value, 'hello')
+        self.table.doc.set(['hello', 'world'])
+        assert_equal(self.table.doc.value, 'hello world')
+
+
+class TestVariableTable(unittest.TestCase):
+
+    def setUp(self):
+        self.table = TestCaseFile().variable_table
+
+    def test_variable_table(self):
+        assert_equal(self.table.variables, [])
+
+    def test_create_scalar(self):
+        self.table.create('${VAR}', 'hello')
+        assert_true(len(self.table.variables), 1)
+        assert_equal(self.table.variables[0].name, '${VAR}')
+        assert_equal(self.table.variables[0].value, ['hello'])
+
+    def test_create_list(self):
+        self.table.create('@{VAR}', ['hello', 'world'])
+
+
+class TestCaseFile(object):
+
+    def __init__(self, source=None):
+        self.source = source
+        self.setting_table = SettingTable()
+        self.variable_table = VariableTable()
+        self.testcase_table = TestCaseTable()
+        self.keyword_table = KeywordTable()
+
+    def __iter__(self):
+        for table in [self.setting_table, self.variable_table,
+                      self.testcase_table, self.keyword_table]:
+            yield table
+
+    def edited(self):
+        return any(table.edited() for table in self)
+
+
+class DataTable(object):
+
+    def edited(self):
+        return False
+
+class SettingTable(DataTable):
+
+    def __init__(self):
+        self.doc = Documentation()
+        self.suite_setup = Fixture()
+        self.suite_teardown = Fixture()
+        self.metadata = Metadata()
+        self.test_setup = Fixture()
+        self.test_teardown = Fixture()
+        self.test_timeout = Timeout()
+        self.force_tags = Tags()
+        self.default_tags = Tags()
+        self.imports = []
+
+    def __iter__(self):
+        for setting in [self.doc, self.suite_setup, self.suite_teardown,
+                        self.metadata, self.test_setup, self.test_teardown,
+ self.test_timeout, self.force_tags, self.default_tags] \
+                        + self.imports:
+            yield setting
+
+    def edited(self):
+        return any(setting.edited() for setting in self)
+
+class VariableTable(DataTable):
+    pass
+
+class TestCaseTable(DataTable):
+    pass
+
+class KeywordTable(DataTable):
+    pass
+
+
+class Setting(object):
+
+    def __init__(self):
+        self.value = []
+
+    def set(self, value):
+        self.value = value
+
+    def edited(self):
+        return bool(self.value)
+
+class Documentation(Setting):
+
+    def set(self, value):
+        if not isinstance(value, basestring):
+            value = ' '.join(value)
+        self.value = value
+
+class Fixture(Setting):
+    pass
+
+class Metadata(Setting):
+    pass
+
+class Timeout(Setting):
+    pass
+
+class Tags(Setting):
+    pass
+
+if __name__ == "__main__":
+    #import sys;sys.argv = ['', 'Test.test_create_test_case_file']
+    unittest.main()

Reply via email to