From ee99e6eceb5e77dae0b786422a48893e4255a76c Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Mon, 6 May 2013 22:29:02 -0400 Subject: [PATCH] Fix a bug in Wikicode.set(); implement test_set() and test_index() --- mwparserfromhell/wikicode.py | 3 ++- tests/test_wikicode.py | 27 +++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mwparserfromhell/wikicode.py b/mwparserfromhell/wikicode.py index c295fd6..e9bd133 100644 --- a/mwparserfromhell/wikicode.py +++ b/mwparserfromhell/wikicode.py @@ -184,9 +184,10 @@ class Wikicode(StringMixIn): raise ValueError("Cannot coerce multiple nodes into one index") if index >= len(self.nodes) or -1 * index > len(self.nodes): raise IndexError("List assignment index out of range") - self.nodes.pop(index) if nodes: self.nodes[index] = nodes[0] + else: + self.nodes.pop(index) def index(self, obj, recursive=False): """Return the index of *obj* in the list of nodes. diff --git a/tests/test_wikicode.py b/tests/test_wikicode.py index 421a714..485ab99 100644 --- a/tests/test_wikicode.py +++ b/tests/test_wikicode.py @@ -66,11 +66,34 @@ class TestWikicode(TreeEqualityTestCase): def test_set(self): """test Wikicode.set()""" - pass + code = parse("Have a {{template}} and a [[page|link]]") + code.set(1, "{{{argument}}}") + self.assertEqual("Have a {{{argument}}} and a [[page|link]]", code) + self.assertIsInstance(code.get(1), Argument) + code.set(2, None) + self.assertEqual("Have a {{{argument}}}[[page|link]]", code) + code.set(-3, "This is an ") + self.assertEqual("This is an {{{argument}}}[[page|link]]", code) + self.assertRaises(ValueError, code.set, 1, "foo {{bar}}") + self.assertRaises(IndexError, code.set, 3, "{{baz}}") + self.assertRaises(IndexError, code.set, -4, "{{baz}}") def test_index(self): """test Wikicode.index()""" - pass + code = parse("Have a {{template}} and a [[page|link]]") + self.assertEqual(0, code.index("Have a ")) + self.assertEqual(3, code.index("[[page|link]]")) + self.assertEqual(1, code.index(code.get(1))) + self.assertRaises(ValueError, code.index, "foo") + + code = parse("{{foo}}{{bar|{{baz}}}}") + self.assertEqual(1, code.index("{{bar|{{baz}}}}")) + self.assertEqual(1, code.index("{{baz}}", recursive=True)) + self.assertEqual(1, code.index(code.get(1).get(1).value, + recursive=True)) + self.assertRaises(ValueError, code.index, "{{baz}}", recursive=False) + self.assertRaises(ValueError, code.index, + code.get(1).get(1).value, recursive=False) def test_insert(self): """test Wikicode.insert()"""