@@ -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) |