| @@ -0,0 +1,99 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import Argument, Text | |||
| from mwparserfromhell.smart_list import SmartList | |||
| from mwparserfromhell.wikicode import Wikicode | |||
| from ._test_tree_equality import TreeEqualityTestCase | |||
| wrap = lambda L: Wikicode(SmartList(L)) | |||
| class TestArgument(TreeEqualityTestCase): | |||
| """Test cases for the Argument node.""" | |||
| def test_unicode(self): | |||
| """test Argument.__unicode__()""" | |||
| node = Argument(wrap([Text("foobar")])) | |||
| self.assertEqual("{{{foobar}}}", str(node)) | |||
| node2 = Argument(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| self.assertEqual("{{{foo|bar}}}", str(node2)) | |||
| def test_strip(self): | |||
| """test Argument.__strip__()""" | |||
| node = Argument(wrap([Text("foobar")])) | |||
| self.assertIs(None, node.__strip__(True, True)) | |||
| self.assertIs(None, node.__strip__(True, False)) | |||
| self.assertIs(None, node.__strip__(False, True)) | |||
| self.assertIs(None, node.__strip__(False, False)) | |||
| node2 = Argument(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| self.assertEqual("bar", node2.__strip__(True, True)) | |||
| self.assertEqual("bar", node2.__strip__(True, False)) | |||
| self.assertEqual("bar", node2.__strip__(False, True)) | |||
| self.assertEqual("bar", node2.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test Argument.__showtree__()""" | |||
| output = [] | |||
| getter, marker = object(), object() | |||
| get = lambda code: output.append((getter, code)) | |||
| mark = lambda: output.append(marker) | |||
| node1 = Argument(wrap([Text("foobar")])) | |||
| node2 = Argument(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| node1.__showtree__(output.append, get, mark) | |||
| node2.__showtree__(output.append, get, mark) | |||
| valid = [ | |||
| "{{{", (getter, node1.name), "}}}", "{{{", (getter, node2.name), | |||
| " | ", marker, (getter, node2.default), "}}}"] | |||
| self.assertEqual(valid, output) | |||
| def test_name(self): | |||
| """test getter/setter for the name attribute""" | |||
| name = wrap([Text("foobar")]) | |||
| node1 = Argument(name) | |||
| node2 = Argument(name, wrap([Text("baz")])) | |||
| self.assertIs(name, node1.name) | |||
| self.assertIs(name, node2.name) | |||
| node1.name = "héhehé" | |||
| node2.name = "héhehé" | |||
| self.assertWikicodeEqual(wrap([Text("héhehé")]), node1.name) | |||
| self.assertWikicodeEqual(wrap([Text("héhehé")]), node2.name) | |||
| def test_default(self): | |||
| """test getter/setter for the default attribute""" | |||
| default = wrap([Text("baz")]) | |||
| node1 = Argument(wrap([Text("foobar")])) | |||
| node2 = Argument(wrap([Text("foobar")]), default) | |||
| self.assertIs(None, node1.default) | |||
| self.assertIs(default, node2.default) | |||
| node1.default = "buzz" | |||
| node2.default = None | |||
| self.assertWikicodeEqual(wrap([Text("buzz")]), node1.default) | |||
| self.assertIs(None, node2.default) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||
| @@ -0,0 +1,62 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import Comment | |||
| from ._test_tree_equality import TreeEqualityTestCase | |||
| class TestComment(TreeEqualityTestCase): | |||
| """Test cases for the Comment node.""" | |||
| def test_unicode(self): | |||
| """test Comment.__unicode__()""" | |||
| node = Comment("foobar") | |||
| self.assertEqual("<!--foobar-->", str(node)) | |||
| def test_strip(self): | |||
| """test Comment.__strip__()""" | |||
| node = Comment("foobar") | |||
| self.assertIs(None, node.__strip__(True, True)) | |||
| self.assertIs(None, node.__strip__(True, False)) | |||
| self.assertIs(None, node.__strip__(False, True)) | |||
| self.assertIs(None, node.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test Comment.__showtree__()""" | |||
| output = [] | |||
| node = Comment("foobar") | |||
| node.__showtree__(output.append, None, None) | |||
| self.assertEqual(["<!--foobar-->"], output) | |||
| def test_contents(self): | |||
| """test getter/setter for the contents attribute""" | |||
| node = Comment("foobar") | |||
| self.assertEqual("foobar", node.contents) | |||
| node.contents = "barfoo" | |||
| self.assertEqual("barfoo", node.contents) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||
| @@ -0,0 +1,88 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import Heading, Text | |||
| from mwparserfromhell.smart_list import SmartList | |||
| from mwparserfromhell.wikicode import Wikicode | |||
| from ._test_tree_equality import TreeEqualityTestCase | |||
| wrap = lambda L: Wikicode(SmartList(L)) | |||
| class TestHeading(TreeEqualityTestCase): | |||
| """Test cases for the Heading node.""" | |||
| def test_unicode(self): | |||
| """test Heading.__unicode__()""" | |||
| node = Heading(wrap([Text("foobar")]), 2) | |||
| self.assertEqual("==foobar==", str(node)) | |||
| node2 = Heading(wrap([Text(" zzz ")]), 5) | |||
| self.assertEqual("===== zzz =====", str(node2)) | |||
| def test_strip(self): | |||
| """test Heading.__strip__()""" | |||
| node = Heading(wrap([Text("foobar")]), 3) | |||
| self.assertEqual("foobar", node.__strip__(True, True)) | |||
| self.assertEqual("foobar", node.__strip__(True, False)) | |||
| self.assertEqual("foobar", node.__strip__(False, True)) | |||
| self.assertEqual("foobar", node.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test Heading.__showtree__()""" | |||
| output = [] | |||
| getter = object() | |||
| get = lambda code: output.append((getter, code)) | |||
| node1 = Heading(wrap([Text("foobar")]), 3) | |||
| node2 = Heading(wrap([Text(" baz ")]), 4) | |||
| node1.__showtree__(output.append, get, None) | |||
| node2.__showtree__(output.append, get, None) | |||
| valid = ["===", (getter, node1.title), "===", | |||
| "====", (getter, node2.title), "===="] | |||
| self.assertEqual(valid, output) | |||
| def test_title(self): | |||
| """test getter/setter for the title attribute""" | |||
| title = wrap([Text("foobar")]) | |||
| node = Heading(title, 3) | |||
| self.assertIs(title, node.title) | |||
| node.title = "héhehé" | |||
| self.assertWikicodeEqual(wrap([Text("héhehé")]), node.title) | |||
| def test_level(self): | |||
| """test getter/setter for the level attribute""" | |||
| node = Heading(wrap([Text("foobar")]), 3) | |||
| self.assertEqual(3, node.level) | |||
| node.level = 5 | |||
| self.assertEqual(5, node.level) | |||
| node.level = True | |||
| self.assertEqual(1, node.level) | |||
| self.assertRaises(ValueError, setattr, node, "level", 0) | |||
| self.assertRaises(ValueError, setattr, node, "level", 7) | |||
| self.assertRaises(ValueError, setattr, node, "level", "abc") | |||
| self.assertRaises(ValueError, setattr, node, "level", False) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||
| @@ -0,0 +1,172 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import HTMLEntity | |||
| from mwparserfromhell.smart_list import SmartList | |||
| from mwparserfromhell.wikicode import Wikicode | |||
| from ._test_tree_equality import TreeEqualityTestCase | |||
| wrap = lambda L: Wikicode(SmartList(L)) | |||
| class TestHTMLEntity(TreeEqualityTestCase): | |||
| """Test cases for the HTMLEntity node.""" | |||
| def test_unicode(self): | |||
| """test HTMLEntity.__unicode__()""" | |||
| node1 = HTMLEntity("nbsp", named=True, hexadecimal=False) | |||
| node2 = HTMLEntity("107", named=False, hexadecimal=False) | |||
| node3 = HTMLEntity("6b", named=False, hexadecimal=True) | |||
| node4 = HTMLEntity("6C", named=False, hexadecimal=True, hex_char="X") | |||
| self.assertEqual(" ", str(node1)) | |||
| self.assertEqual("k", str(node2)) | |||
| self.assertEqual("k", str(node3)) | |||
| self.assertEqual("l", str(node4)) | |||
| def test_strip(self): | |||
| """test HTMLEntity.__strip__()""" | |||
| node1 = HTMLEntity("nbsp", named=True, hexadecimal=False) | |||
| node2 = HTMLEntity("107", named=False, hexadecimal=False) | |||
| node3 = HTMLEntity("e9", named=False, hexadecimal=True) | |||
| self.assertEqual("\xa0", node1.__strip__(True, True)) | |||
| self.assertEqual("\xa0", node1.__strip__(True, False)) | |||
| self.assertEqual(" ", node1.__strip__(False, True)) | |||
| self.assertEqual(" ", node1.__strip__(False, False)) | |||
| self.assertEqual("k", node2.__strip__(True, True)) | |||
| self.assertEqual("k", node2.__strip__(True, False)) | |||
| self.assertEqual("k", node2.__strip__(False, True)) | |||
| self.assertEqual("k", node2.__strip__(False, False)) | |||
| self.assertEqual("é", node3.__strip__(True, True)) | |||
| self.assertEqual("é", node3.__strip__(True, False)) | |||
| self.assertEqual("é", node3.__strip__(False, True)) | |||
| self.assertEqual("é", node3.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test HTMLEntity.__showtree__()""" | |||
| output = [] | |||
| node1 = HTMLEntity("nbsp", named=True, hexadecimal=False) | |||
| node2 = HTMLEntity("107", named=False, hexadecimal=False) | |||
| node3 = HTMLEntity("e9", named=False, hexadecimal=True) | |||
| node1.__showtree__(output.append, None, None) | |||
| node2.__showtree__(output.append, None, None) | |||
| node3.__showtree__(output.append, None, None) | |||
| res = [" ", "k", "é"] | |||
| self.assertEqual(res, output) | |||
| def test_value(self): | |||
| """test HTMLEntity.value()""" | |||
| node1 = HTMLEntity("nbsp") | |||
| node2 = HTMLEntity("107") | |||
| node3 = HTMLEntity("e9") | |||
| self.assertEquals("nbsp", node1.value) | |||
| self.assertEquals("107", node2.value) | |||
| self.assertEquals("e9", node3.value) | |||
| node1.value = "ffa4" | |||
| node2.value = 72 | |||
| node3.value = "Sigma" | |||
| self.assertEquals("ffa4", node1.value) | |||
| self.assertFalse(node1.named) | |||
| self.assertTrue(node1.hexadecimal) | |||
| self.assertEquals("72", node2.value) | |||
| self.assertFalse(node2.named) | |||
| self.assertFalse(node2.hexadecimal) | |||
| self.assertEquals("Sigma", node3.value) | |||
| self.assertTrue(node3.named) | |||
| self.assertFalse(node3.hexadecimal) | |||
| node1.value = "10FFFF" | |||
| node2.value = 110000 | |||
| node2.value = 1114111 | |||
| self.assertRaises(ValueError, setattr, node3, "value", "") | |||
| self.assertRaises(ValueError, setattr, node3, "value", "foobar") | |||
| self.assertRaises(ValueError, setattr, node3, "value", True) | |||
| self.assertRaises(ValueError, setattr, node3, "value", -1) | |||
| self.assertRaises(ValueError, setattr, node1, "value", 110000) | |||
| self.assertRaises(ValueError, setattr, node1, "value", "1114112") | |||
| def test_named(self): | |||
| """test HTMLEntity.named()""" | |||
| node1 = HTMLEntity("nbsp") | |||
| node2 = HTMLEntity("107") | |||
| node3 = HTMLEntity("e9") | |||
| self.assertTrue(node1.named) | |||
| self.assertFalse(node2.named) | |||
| self.assertFalse(node3.named) | |||
| node1.named = 1 | |||
| node2.named = 0 | |||
| node3.named = 0 | |||
| self.assertTrue(node1.named) | |||
| self.assertFalse(node2.named) | |||
| self.assertFalse(node3.named) | |||
| self.assertRaises(ValueError, setattr, node1, "named", False) | |||
| self.assertRaises(ValueError, setattr, node2, "named", True) | |||
| self.assertRaises(ValueError, setattr, node3, "named", True) | |||
| def test_hexadecimal(self): | |||
| """test HTMLEntity.hexadecimal()""" | |||
| node1 = HTMLEntity("nbsp") | |||
| node2 = HTMLEntity("107") | |||
| node3 = HTMLEntity("e9") | |||
| self.assertFalse(node1.hexadecimal) | |||
| self.assertFalse(node2.hexadecimal) | |||
| self.assertTrue(node3.hexadecimal) | |||
| node1.hexadecimal = False | |||
| node2.hexadecimal = True | |||
| node3.hexadecimal = False | |||
| self.assertFalse(node1.hexadecimal) | |||
| self.assertTrue(node2.hexadecimal) | |||
| self.assertFalse(node3.hexadecimal) | |||
| self.assertRaises(ValueError, setattr, node1, "hexadecimal", True) | |||
| def test_hex_char(self): | |||
| """test HTMLEntity.hex_char()""" | |||
| node1 = HTMLEntity("e9") | |||
| node2 = HTMLEntity("e9", hex_char="X") | |||
| self.assertEquals("x", node1.hex_char) | |||
| self.assertEquals("X", node2.hex_char) | |||
| node1.hex_char = "X" | |||
| node2.hex_char = "x" | |||
| self.assertEquals("X", node1.hex_char) | |||
| self.assertEquals("x", node2.hex_char) | |||
| self.assertRaises(ValueError, setattr, node1, "hex_char", 123) | |||
| self.assertRaises(ValueError, setattr, node1, "hex_char", "foobar") | |||
| self.assertRaises(ValueError, setattr, node1, "hex_char", True) | |||
| def test_normalize(self): | |||
| """test HTMLEntity.normalize()""" | |||
| node1 = HTMLEntity("nbsp") | |||
| node2 = HTMLEntity("107") | |||
| node3 = HTMLEntity("e9") | |||
| node4 = HTMLEntity("1f648") | |||
| self.assertEquals("\xa0", node1.normalize()) | |||
| self.assertEquals("k", node2.normalize()) | |||
| self.assertEquals("é", node3.normalize()) | |||
| self.assertEquals("\U0001F648", node4.normalize()) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||
| @@ -0,0 +1,69 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import Text | |||
| class TestText(unittest.TestCase): | |||
| """Test cases for the Text node.""" | |||
| def test_unicode(self): | |||
| """test Text.__unicode__()""" | |||
| node = Text("foobar") | |||
| self.assertEqual("foobar", str(node)) | |||
| node2 = Text("fóóbar") | |||
| self.assertEqual("fóóbar", str(node2)) | |||
| def test_strip(self): | |||
| """test Text.__strip__()""" | |||
| node = Text("foobar") | |||
| self.assertIs(node, node.__strip__(True, True)) | |||
| self.assertIs(node, node.__strip__(True, False)) | |||
| self.assertIs(node, node.__strip__(False, True)) | |||
| self.assertIs(node, node.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test Text.__showtree__()""" | |||
| output = [] | |||
| node1 = Text("foobar") | |||
| node2 = Text("fóóbar") | |||
| node3 = Text("𐌲𐌿𐍄") | |||
| node1.__showtree__(output.append, None, None) | |||
| node2.__showtree__(output.append, None, None) | |||
| node3.__showtree__(output.append, None, None) | |||
| res = ["foobar", r"f\xf3\xf3bar", "\\U00010332\\U0001033f\\U00010344"] | |||
| self.assertEqual(res, output) | |||
| def test_value(self): | |||
| """test getter/setter for the value attribute""" | |||
| node = Text("foobar") | |||
| self.assertEqual("foobar", node.value) | |||
| self.assertIsInstance(node.value, str) | |||
| node.value = "héhéhé" | |||
| self.assertEqual("héhéhé", node.value) | |||
| self.assertIsInstance(node.value, str) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||
| @@ -0,0 +1,99 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # Copyright (C) 2012-2013 Ben Kurtovic <ben.kurtovic@verizon.net> | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to deal | |||
| # in the Software without restriction, including without limitation the rights | |||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| # copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
| # SOFTWARE. | |||
| from __future__ import unicode_literals | |||
| import unittest | |||
| from mwparserfromhell.compat import str | |||
| from mwparserfromhell.nodes import Text, Wikilink | |||
| from mwparserfromhell.smart_list import SmartList | |||
| from mwparserfromhell.wikicode import Wikicode | |||
| from ._test_tree_equality import TreeEqualityTestCase | |||
| wrap = lambda L: Wikicode(SmartList(L)) | |||
| class TestWikilink(TreeEqualityTestCase): | |||
| """Test cases for the Wikilink node.""" | |||
| def test_unicode(self): | |||
| """test Wikilink.__unicode__()""" | |||
| node = Wikilink(wrap([Text("foobar")])) | |||
| self.assertEqual("[[foobar]]", str(node)) | |||
| node2 = Wikilink(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| self.assertEqual("[[foo|bar]]", str(node2)) | |||
| def test_strip(self): | |||
| """test Wikilink.__strip__()""" | |||
| node = Wikilink(wrap([Text("foobar")])) | |||
| self.assertEqual("foobar", node.__strip__(True, True)) | |||
| self.assertEqual("foobar", node.__strip__(True, False)) | |||
| self.assertEqual("foobar", node.__strip__(False, True)) | |||
| self.assertEqual("foobar", node.__strip__(False, False)) | |||
| node2 = Wikilink(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| self.assertEqual("bar", node2.__strip__(True, True)) | |||
| self.assertEqual("bar", node2.__strip__(True, False)) | |||
| self.assertEqual("bar", node2.__strip__(False, True)) | |||
| self.assertEqual("bar", node2.__strip__(False, False)) | |||
| def test_showtree(self): | |||
| """test Wikilink.__showtree__()""" | |||
| output = [] | |||
| getter, marker = object(), object() | |||
| get = lambda code: output.append((getter, code)) | |||
| mark = lambda: output.append(marker) | |||
| node1 = Wikilink(wrap([Text("foobar")])) | |||
| node2 = Wikilink(wrap([Text("foo")]), wrap([Text("bar")])) | |||
| node1.__showtree__(output.append, get, mark) | |||
| node2.__showtree__(output.append, get, mark) | |||
| valid = [ | |||
| "[[", (getter, node1.title), "]]", "[[", (getter, node2.title), | |||
| " | ", marker, (getter, node2.text), "]]"] | |||
| self.assertEqual(valid, output) | |||
| def test_title(self): | |||
| """test getter/setter for the title attribute""" | |||
| title = wrap([Text("foobar")]) | |||
| node1 = Wikilink(title) | |||
| node2 = Wikilink(title, wrap([Text("baz")])) | |||
| self.assertIs(title, node1.title) | |||
| self.assertIs(title, node2.title) | |||
| node1.title = "héhehé" | |||
| node2.title = "héhehé" | |||
| self.assertWikicodeEqual(wrap([Text("héhehé")]), node1.title) | |||
| self.assertWikicodeEqual(wrap([Text("héhehé")]), node2.title) | |||
| def test_text(self): | |||
| """test getter/setter for the text attribute""" | |||
| text = wrap([Text("baz")]) | |||
| node1 = Wikilink(wrap([Text("foobar")])) | |||
| node2 = Wikilink(wrap([Text("foobar")]), text) | |||
| self.assertIs(None, node1.text) | |||
| self.assertIs(text, node2.text) | |||
| node1.text = "buzz" | |||
| node2.text = None | |||
| self.assertWikicodeEqual(wrap([Text("buzz")]), node1.text) | |||
| self.assertIs(None, node2.text) | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||