コード例 #1
0
ファイル: ModelFileTest.py プロジェクト: kcgthb/lustre-shine
    def testDiff(self):
        """MultipleElement diff method"""

        elem = MultipleElement(SimpleElement(check='digit'))

        # (empty) <=> (empty)
        added, changed, removed = elem.diff(elem)
        self.assertTrue(len(added) == len(removed) == len(changed) == 0)

        elem.add(3)
        elem.add(4)

        # itself
        added, changed, removed = elem.diff(elem)
        self.assertTrue(len(added) == len(removed) == len(changed) == 0)

        # elem <=> (empty)
        added, changed, removed = elem.diff(elem.emptycopy())
        self.assertTrue(len(added) == len(changed) == 0)
        self.assertEqual(removed.get(), [3, 4])

        # (empty) <=> elem
        added, changed, removed = elem.emptycopy().diff(elem)
        self.assertTrue(len(removed) == len(changed) == 0)
        self.assertEqual(added.get(), [3, 4])

        # Mixed
        other = elem.copy()
        other.remove(4)
        other.add(5)
        added, changed, removed = elem.diff(other)
        self.assertTrue(len(changed) == 0)
        self.assertEqual(added.get(), [5])
        self.assertEqual(removed.get(), [4])
コード例 #2
0
ファイル: ModelFileTest.py プロジェクト: thiell/shine
    def testCopy(self):
        """MultipleElement copy methods"""
        elem = MultipleElement(SimpleElement(check='digit'))

        # Empty
        self.assertEqual(len(elem.emptycopy()), 0)
        self.assertEqual(elem.copy().as_dict(), elem.as_dict())

        # With some content
        elem.add(3)
        elem.add(5)
        self.assertEqual(len(elem.emptycopy()), 0)
        self.assertEqual(elem.copy().as_dict(), elem.as_dict())
コード例 #3
0
    def testCopy(self):
        """MultipleElement copy methods"""
        elem = MultipleElement(SimpleElement(check='digit'))

        # Empty
        self.assertEqual(len(elem.emptycopy()), 0)
        self.assertEqual(elem.copy().as_dict(), elem.as_dict())

        # With some content
        elem.add(3)
        elem.add(5)
        self.assertEqual(len(elem.emptycopy()), 0)
        self.assertEqual(elem.copy().as_dict(), elem.as_dict())
コード例 #4
0
ファイル: ModelFileTest.py プロジェクト: thiell/shine
    def test_diff_key_model_file(self):
        """MultipleElement diff method with ModelFile elements with a specific key"""
        class MyElement(ModelFile):
            def __init__(self, sep='=', linesep=" "):
                ModelFile.__init__(self, sep, linesep)
                self.add_element('node', check='string')
                self.add_element('data', check='string')

            def key(self):
                return self.get('node')

        elem = MultipleElement(MyElement())
        elem.parse("node=foo data=bar")

        other = elem.emptycopy()
        other.parse("node=foo data=bar")
        other.parse("node=foo2 data=else")

        added, changed, removed = elem.diff(other)
        self.assertEqual(added.as_dict(), [{'node': 'foo2', 'data': 'else'}])
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.get(), None)

        other.clear()
        other.parse("node=foo data=else")
        added, changed, removed = elem.diff(other)
        self.assertEqual(added.get(), None)
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.as_dict(), [{'node': 'foo', 'data': 'else'}])
        self.assertEqual(str(changed.elements()[0].old), "node=foo data=bar")
コード例 #5
0
    def test_diff_key_model_file(self):
        """MultipleElement diff method with ModelFile elements with a specific key"""

        class MyElement(ModelFile):
            def __init__(self, sep='=', linesep=" "):
                ModelFile.__init__(self, sep, linesep)
                self.add_element('node', check='string')
                self.add_element('data', check='string')
            def key(self):
                return self.get('node')

        elem = MultipleElement(MyElement())
        elem.parse("node=foo data=bar")

        other = elem.emptycopy()
        other.parse("node=foo data=bar")
        other.parse("node=foo2 data=else")

        added, changed, removed = elem.diff(other)
        self.assertEqual(added.as_dict(), [{'node':'foo2', 'data':'else'}])
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.get(), None)

        other.clear()
        other.parse("node=foo data=else")
        added, changed, removed = elem.diff(other)
        self.assertEqual(added.get(), None)
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.as_dict(), [{'node':'foo', 'data':'else'}])
        self.assertEqual(str(changed.elements()[0].old), "node=foo data=bar")
コード例 #6
0
    def test_diff_key_simple_element(self):
        """MultipleElement diff method with simple elements with a specific key"""

        class MyElement(SimpleElement):
            def __init__(self, check='digit', default=None, value=None):
                SimpleElement.__init__(self, check, default, value)
            def key(self):
                return self.get() / 2

        elem = MultipleElement(MyElement())
        elem.add(7)
        elem.add(4)

        other = elem.copy()
        other.remove(7)
        other.add(6)

        added, changed, removed = elem.diff(other)
        self.assertEqual(added.get(), None)
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.get(), [6])
        self.assertEqual(changed.elements()[0].old.get(), 7)
コード例 #7
0
ファイル: ModelFileTest.py プロジェクト: thiell/shine
    def test_diff_key_simple_element(self):
        """MultipleElement diff method with simple elements with a specific key"""
        class MyElement(SimpleElement):
            def __init__(self, check='digit', default=None, value=None):
                SimpleElement.__init__(self, check, default, value)

            def key(self):
                return self.get() / 2

        elem = MultipleElement(MyElement())
        elem.add(7)
        elem.add(4)

        other = elem.copy()
        other.remove(7)
        other.add(6)

        added, changed, removed = elem.diff(other)
        self.assertEqual(added.get(), None)
        self.assertEqual(removed.get(), None)
        self.assertEqual(changed.get(), [6])
        self.assertEqual(changed.elements()[0].old.get(), 7)
コード例 #8
0
    def test_str_fold(self):
        """MultipleElement uses range-based folding when format to str"""
        elem = MultipleElement(SimpleElement(check='string'))

        # By default, no folding is done when cast to str
        elem.add('3')
        elem.add('4')
        elem.add('5')
        self.assertEqual(str(elem), "3\n4\n5")

        # With enabled folding
        elem.fold = True
        self.assertEqual(str(elem), '[3-5]')

        # Folding keeps order
        elem.clear()
        elem.add('3')
        elem.add('5')
        elem.add('4')
        self.assertEqual(str(elem), "[3,5]\n4")
コード例 #9
0
    def testBase(self):
        """MultipleElement base methods"""

        elem = MultipleElement(SimpleElement(check='string'))

        # Default
        self.assertEqual(elem.get([]), [])

        # First add()
        elem.add("3")
        self.assertEqual(elem.get(), ["3"])
        self.assertEqual(elem.content(), ["3"])
        self.assertEqual(elem[0], "3")
        self.assertEqual(str(elem), "3")
        self.assertEqual(len(elem), 1)
        # Second add()
        elem.add("5")
        elem.add("7")
        self.assertEqual(elem.get(), ["3", "5", "7"])
        self.assertEqual(elem.content(), ["3", "5", "7"])
        self.assertEqual(elem[1], "5")
        self.assertEqual(str(elem), "3\n5\n7")
        self.assertEqual(len(elem), 3)

        # Remove an item
        del elem[1]
        self.assertEqual(elem.get(), ["3", "7"])
        self.assertEqual(len(elem), 2)
        elem.remove("3")
        self.assertEqual(elem.get(), ["7"])
        self.assertEqual(len(elem), 1)
        self.assertRaises(KeyError, elem.remove, "6")

        # replace()
        elem.replace("12")
        self.assertEqual(elem.get(), ["12"])

        # clear()
        elem.clear()
        self.assertEqual(len(elem), 0)

        # parse()
        elem.parse("4")
        self.assertEqual(elem.get(), ["4"])
        self.assertEqual(str(elem), "4")
        self.assertEqual(len(elem), 1)

        # __eq__
        other = elem.emptycopy()
        self.assertNotEqual(elem, other)
        other.add("4")
        self.assertEqual(elem, other)
コード例 #10
0
ファイル: Model.py プロジェクト: pombredanne/shine
 def __init__(self, orig_elem=None):
     MultipleElement.__init__(self, NidMap())
コード例 #11
0
ファイル: Model.py プロジェクト: thiell/shine
 def __init__(self, orig_elem=None):
     MultipleElement.__init__(self, NidMap())
コード例 #12
0
ファイル: ModelFileTest.py プロジェクト: thiell/shine
    def testDiff(self):
        """MultipleElement diff method"""

        elem = MultipleElement(SimpleElement(check='digit'))

        # (empty) <=> (empty)
        added, changed, removed = elem.diff(elem)
        self.assertTrue(len(added) == len(removed) == len(changed) == 0)

        elem.add(3)
        elem.add(9)
        elem.add(4)

        # itself
        added, changed, removed = elem.diff(elem)
        self.assertTrue(len(added) == len(removed) == len(changed) == 0)

        # elem <=> (empty)
        added, changed, removed = elem.diff(elem.emptycopy())
        self.assertTrue(len(added) == len(changed) == 0)
        self.assertEqual(removed.get(), [3, 9, 4])

        # (empty) <=> elem
        added, changed, removed = elem.emptycopy().diff(elem)
        self.assertTrue(len(removed) == len(changed) == 0)
        self.assertEqual(added.get(), [3, 9, 4])

        # Mixed
        other = elem.copy()
        other.remove(4)
        other.add(5)
        added, changed, removed = elem.diff(other)
        self.assertEqual(changed.get(), None)
        self.assertEqual(added.get(), [5])
        self.assertEqual(removed.get(), [4])
コード例 #13
0
ファイル: ModelFileTest.py プロジェクト: thiell/shine
    def testBase(self):
        """MultipleElement base methods"""

        elem = MultipleElement(SimpleElement(check='string'))

        # Default
        self.assertEqual(elem.get([]), [])

        # First add()
        elem.add("3")
        self.assertEqual(elem.get(), ["3"])
        self.assertEqual(elem.content(), ["3"])
        self.assertEqual(elem[0], "3")
        self.assertEqual(str(elem), "3")
        self.assertEqual(len(elem), 1)
        # Second add()
        elem.add("5")
        elem.add("7")
        self.assertEqual(elem.get(), ["3", "5", "7"])
        self.assertEqual(elem.content(), ["3", "5", "7"])
        self.assertEqual(elem[1], "5")
        self.assertEqual(str(elem), "3 5 7")
        self.assertEqual(len(elem), 3)

        # Remove an item
        del elem[1]
        self.assertEqual(elem.get(), ["3", "7"])
        self.assertEqual(len(elem), 2)
        elem.remove("3")
        self.assertEqual(elem.get(), ["7"])
        self.assertEqual(len(elem), 1)
        self.assertRaises(KeyError, elem.remove, "6")

        # replace()
        elem.replace("12")
        self.assertEqual(elem.get(), ["12"])

        # clear()
        elem.clear()
        self.assertEqual(len(elem), 0)

        # parse()
        elem.parse("4")
        self.assertEqual(elem.get(), ["4"])
        self.assertEqual(str(elem), "4")
        self.assertEqual(len(elem), 1)

        # __eq__
        other = elem.emptycopy()
        self.assertNotEqual(elem, other)
        other.add("4")
        self.assertEqual(elem, other)
コード例 #14
0
    def test_str_fold(self):
        """MultipleElement uses range-based folding when format to str"""
        elem = MultipleElement(SimpleElement(check='string'))

        # By default, no folding is done when cast to str
        elem.add('3')
        elem.add('4')
        elem.add('5')
        self.assertEqual(str(elem), "3\n4\n5")

        # With enabled folding
        elem.fold = True
        self.assertEqual(str(elem), '[3-5]')

        # Folding keeps order
        elem.clear()
        elem.add('3')
        elem.add('5')
        elem.add('4')
        self.assertEqual(str(elem), "[3,5]\n4")