summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorjmzambon <jeanmarczambon@gmail.com>2017-07-18 18:08:46 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-08-09 11:54:49 +0200
commit033a619c979e45d012e1ebe286462eb379997b41 (patch)
tree0bd4ada89f8d27d36fc8bd6d6c9099379def4716 /sw
parent12b739aa2bf1f664acbbb4c4c815b3348c912977 (diff)
tdf#97362: TextPortionEnumerationTest partially migrated to python (part 5)
Convert tests: - test_range1 - test_range_hyperlink_hyperlink - test_range_hyperlink_ruby - test_range_ruby_hyperlink - test_range_ruby_ruby Change-Id: I6c26f3e0fe910ff56bf38482257340b1c3172461 Reviewed-on: https://gerrit.libreoffice.org/40775 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/complex/writer/TextPortionEnumerationTest.java271
-rw-r--r--sw/qa/python/text_portion_enumeration_test.py303
2 files changed, 303 insertions, 271 deletions
diff --git a/sw/qa/complex/writer/TextPortionEnumerationTest.java b/sw/qa/complex/writer/TextPortionEnumerationTest.java
index b13401e07d20..266134ffb7a3 100644
--- a/sw/qa/complex/writer/TextPortionEnumerationTest.java
+++ b/sw/qa/complex/writer/TextPortionEnumerationTest.java
@@ -1258,277 +1258,6 @@ public class TextPortionEnumerationTest
util.DesktopTools.closeDoc(m_xDoc);
}
- /* some range tests for the insertion: these are for the current
- API which treats hyperlinks and rubys not as entities, but as formatting
- attributes; if these ever become entities, they should not be split!
- */
-
- @Test public void testRange1() throws Exception
- {
- String name1 = mkName("url");
- RangeInserter inserter = new RangeInserter(m_xDoc);
- TreeNode text = new TextNode("12345");
- inserter.insertRange(new Range(0, 0, text));
- TreeNode url1 = new HyperlinkNode(name1);
- Range range1 = new Range(0, 5, url1);
- inserter.insertRange(range1);
- TreeNode root = new TreeNode();
- root.appendChild( url1 );
- url1.appendChild( text );
- doTest(root, false);
- }
-
- @Test public void testRangeHyperlinkHyperlink() throws Exception
- {
- RangeInserter inserter = new RangeInserter(m_xDoc);
- TreeNode text = new TextNode("123456789");
- inserter.insertRange( new Range(0, 0, text) );
- TreeNode url1 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(1, 4, url1) );
- // overlap left
- TreeNode url2 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(0, 2, url2) );
- TreeNode root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("12") ) )
- .appendChild( url1.dup().appendChild( new TextNode("34") ) )
- .appendChild( new TextNode("56789") );
- doTest(root, false);
- // overlap right
- TreeNode url3 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(3, 7, url3) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("12") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url3.dup().appendChild( new TextNode("4567") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // around
- TreeNode url4 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(3, 7, url4) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("12") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url4.dup().appendChild( new TextNode("4567") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // inside
- TreeNode url5 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(4, 6, url5) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("12") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url4.dup().appendChild( new TextNode("4") ) )
- .appendChild( url5.dup().appendChild( new TextNode("56") ) )
- .appendChild( url4.dup().appendChild( new TextNode("7") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // empty
- TreeNode url6 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(7, 7, url6) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("12") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url4.dup().appendChild( new TextNode("4") ) )
- .appendChild( url5.dup().appendChild( new TextNode("56") ) )
- .appendChild( url4.dup().appendChild( new TextNode("7") ) )
-// this one gets eaten, but we still need to test inserting it (#i106930#)
-// .appendChild( url6.dup().appendChild( new TextNode("") ) )
- .appendChild( new TextNode("89") );
- // inside (left-edge)
- TreeNode url7 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(0, 1, url7) );
- root = new TreeNode()
- .appendChild( url7.dup().appendChild( new TextNode("1") ) )
- .appendChild( url2.dup().appendChild( new TextNode("2") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url4.dup().appendChild( new TextNode("4") ) )
- .appendChild( url5.dup().appendChild( new TextNode("56") ) )
- .appendChild( url4.dup().appendChild( new TextNode("7") ) )
- .appendChild( new TextNode("89") );
- // inside (right-edge)
- TreeNode url8 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(5, 6, url8) );
- root = new TreeNode()
- .appendChild( url7.dup().appendChild( new TextNode("1") ) )
- .appendChild( url2.dup().appendChild( new TextNode("2") ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( url4.dup().appendChild( new TextNode("4") ) )
- .appendChild( url5.dup().appendChild( new TextNode("5") ) )
- .appendChild( url8.dup().appendChild( new TextNode("6") ) )
- .appendChild( url4.dup().appendChild( new TextNode("7") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- }
-
- @Test public void testRangeHyperlinkRuby() throws Exception
- {
- RangeInserter inserter = new RangeInserter(m_xDoc);
- TreeNode text = new TextNode("123456789");
- inserter.insertRange( new Range(0, 0, text) );
- TreeNode url1 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(1, 4, url1) );
- // overlap left
- TreeNode rby2 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(0, 2, rby2) );
- TreeNode root = new TreeNode()
- .appendChild( rby2.dup()
- .appendChild( new TextNode("1") )
- .appendChild( url1.dup().appendChild( new TextNode("2") ) ) )
- .appendChild( url1.dup().appendChild( new TextNode("34") ) )
- .appendChild( new TextNode("56789") );
- doTest(root, false);
- // overlap right
- TreeNode rby3 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(3, 5, rby3) );
- root = new TreeNode()
- .appendChild( rby2.dup()
- .appendChild( new TextNode("1") )
- .appendChild( url1.dup().appendChild( new TextNode("2") ) ) )
- .appendChild( url1.dup().appendChild( new TextNode("3") ) )
- .appendChild( rby3.dup()
- .appendChild( url1.dup().appendChild( new TextNode("4") ) )
- .appendChild( new TextNode("5") ) )
- .appendChild( new TextNode("6789") );
- doTest(root, false);
- // around
- TreeNode rby4 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(2, 3, rby4) );
- root = new TreeNode()
- .appendChild( rby2.dup()
- .appendChild( new TextNode("1") )
- .appendChild( url1.dup().appendChild( new TextNode("2") ) ) )
- .appendChild( rby4.dup()
- .appendChild( url1.dup().appendChild( new TextNode("3") ) ) )
- .appendChild( rby3.dup()
- .appendChild( url1.dup().appendChild( new TextNode("4") ) )
- .appendChild( new TextNode("5") ) )
- .appendChild( new TextNode("6789") );
- doTest(root, false);
- // inside
- TreeNode url5 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(6, 9, url5) );
- TreeNode rby6 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(7, 8, rby6) );
- root = new TreeNode()
- .appendChild( rby2.dup()
- .appendChild( new TextNode("1") )
- .appendChild( url1.dup().appendChild( new TextNode("2") ) ) )
- .appendChild( rby4.dup()
- .appendChild( url1.dup().appendChild( new TextNode("3") ) ) )
- .appendChild( rby3.dup()
- .appendChild( url1.dup().appendChild( new TextNode("4") ) )
- .appendChild( new TextNode("5") ) )
- .appendChild( new TextNode("6") )
- .appendChild( url5.dup().appendChild( new TextNode("7") ) )
- .appendChild( rby6.dup()
- .appendChild( url5.dup().appendChild( new TextNode("8") ) ) )
- .appendChild( url5.dup().appendChild( new TextNode("9") ) );
- doTest(root, false);
- }
-
- @Test public void testRangeRubyHyperlink() throws Exception
- {
- RangeInserter inserter = new RangeInserter(m_xDoc);
- TreeNode text = new TextNode("123456789");
- inserter.insertRange( new Range(0, 0, text) );
- TreeNode rby1 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(1, 6, rby1) );
- // overlap left
- TreeNode url2 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(0, 3, url2) );
- TreeNode root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("1") ) )
- .appendChild( rby1.dup()
- .appendChild( url2.dup().appendChild( new TextNode("23") ) )
- .appendChild( new TextNode("456") ) )
- .appendChild( new TextNode("789") );
- doTest(root, false);
- // overlap right
- TreeNode url3 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(5, 7, url3) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("1") ) )
- .appendChild( rby1.dup()
- .appendChild( url2.dup().appendChild( new TextNode("23") ) )
- .appendChild( new TextNode("45") )
- .appendChild( url3.dup().appendChild( new TextNode("6") ) ) )
- .appendChild( url3.dup().appendChild( new TextNode("7") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // around (not quite, due to API)
- TreeNode url4 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(1, 8, url4) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("1") ) )
- .appendChild( rby1.dup()
- .appendChild( url4.dup()
- .appendChild( new TextNode("23456") ) ) )
- .appendChild( url4.dup().appendChild( new TextNode("78") ) )
- .appendChild( new TextNode("9") );
- doTest(root, false);
- // inside
- TreeNode url5 = new HyperlinkNode( mkName("url") );
- inserter.insertRange( new Range(3, 5, url5) );
- root = new TreeNode()
- .appendChild( url2.dup().appendChild( new TextNode("1") ) )
- .appendChild( rby1.dup()
- .appendChild( url4.dup()
- .appendChild( new TextNode("23") ) )
- .appendChild( url5.dup()
- .appendChild( new TextNode("45") ) )
- .appendChild( url4.dup()
- .appendChild( new TextNode("6") ) ) )
- .appendChild( url4.dup().appendChild( new TextNode("78") ) )
- .appendChild( new TextNode("9") );
- doTest(root, false);
- }
-
- @Test public void testRangeRubyRuby() throws Exception
- {
- RangeInserter inserter = new RangeInserter(m_xDoc);
- TreeNode text = new TextNode("123456789");
- inserter.insertRange( new Range(0, 0, text) );
- TreeNode rby1 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(1, 4, rby1) );
- // overlap left
- TreeNode rby2 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(0, 2, rby2) );
- TreeNode root = new TreeNode()
- .appendChild( rby2.dup().appendChild( new TextNode("12") ) )
- .appendChild( rby1.dup().appendChild( new TextNode("34") ) )
- .appendChild( new TextNode("56789") );
- doTest(root, false);
- // overlap right
- TreeNode rby3 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(3, 7, rby3) );
- root = new TreeNode()
- .appendChild( rby2.dup().appendChild( new TextNode("12") ) )
- .appendChild( rby1.dup().appendChild( new TextNode("3") ) )
- .appendChild( rby3.dup().appendChild( new TextNode("4567") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // around
- TreeNode rby4 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(3, 7, rby4) );
- root = new TreeNode()
- .appendChild( rby2.dup().appendChild( new TextNode("12") ) )
- .appendChild( rby1.dup().appendChild( new TextNode("3") ) )
- .appendChild( rby4.dup().appendChild( new TextNode("4567") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- // inside
- TreeNode rby5 = new RubyNode( mkName("ruby") );
- inserter.insertRange( new Range(4, 6, rby5) );
- root = new TreeNode()
- .appendChild( rby2.dup().appendChild( new TextNode("12") ) )
- .appendChild( rby1.dup().appendChild( new TextNode("3") ) )
- .appendChild( rby4.dup().appendChild( new TextNode("4") ) )
- .appendChild( rby5.dup().appendChild( new TextNode("56") ) )
- .appendChild( rby4.dup().appendChild( new TextNode("7") ) )
- .appendChild( new TextNode("89") );
- doTest(root, false);
- }
-
@Test public void testRangeHyperlinkMeta() throws Exception
{
RangeInserter inserter = new RangeInserter(m_xDoc);
diff --git a/sw/qa/python/text_portion_enumeration_test.py b/sw/qa/python/text_portion_enumeration_test.py
index 407b96218bd9..856fdb7571e9 100644
--- a/sw/qa/python/text_portion_enumeration_test.py
+++ b/sw/qa/python/text_portion_enumeration_test.py
@@ -388,6 +388,14 @@ class MetaFieldNode(MetaNode):
return self._dup(MetaFieldNode, self.xmlid)
+class Range():
+ def __init__(self, start, end, node):
+ self.start = start
+ self.end = end
+ self.node = node
+ self.extent = end - start
+
+
class Inserter():
def __init__(self, xDoc):
@@ -592,6 +600,41 @@ class TreeInserter(Inserter):
return xCursor
+# FIXME: this does not account for inserted dummy characters!
+class RangeInserter(Inserter):
+ def __init__(self, xDoc):
+ super().__init__(xDoc)
+ self.initparagraph()
+
+ # def inserttext(self, pos, text):
+ # self.xCursor.gotoStartOfParagraph(False)
+ # self.xCursor.goRight(pos, False)
+ # self.inserttext(self.xCursor, text)
+
+ def insertrange(self, range):
+ self.xCursor.gotoStartOfParagraph(False)
+ self.xCursor.goRight(range.start, False)
+ self.xCursor.goRight(range.extent, True)
+ return self.insertnode(self.xCursor, range.node)
+
+ def insertnode(self, xParaCursor, node):
+ nodetype = node.nodetype
+ if nodetype == "Text":
+ text = node
+ self.inserttext(xParaCursor, text.content)
+ elif nodetype == "Hyperlink":
+ href = node
+ self.inserthyperlink(xParaCursor, href.url)
+ elif nodetype == "Ruby":
+ ruby = node
+ self.insertruby(xParaCursor, ruby.ruby)
+ elif nodetype == "SoftPageBreak":
+ raise RuntimeError("sorry, cannot test SoftPageBreak")
+ else:
+ raise RuntimeError("unexpected nodetype: {}".format(nodetype))
+ return None
+
+
class EnumConverter():
def __init__(self):
@@ -1473,6 +1516,266 @@ class TextPortionEnumerationTest(unittest.TestCase):
root.appendchild(TextFieldNode("h"))
self.dotest(root)
+ # some range tests for the insertion: these are for the current
+ # API which treats hyperlinks and rubys not as entities, but as formatting
+ # attributes; if these ever become entities, they should not be split!'''
+
+ def test_range1(self):
+ name1 = self.mkname("url")
+ inserter = RangeInserter(self.__class__.xDoc)
+ text = TextNode("12345")
+ inserter.insertrange(Range(0, 0, text))
+ url1 = HyperlinkNode(name1)
+ range1 = Range(0, 5, url1)
+ inserter.insertrange(range1)
+ root = TreeNode()
+ root.appendchild(url1)
+ url1.appendchild(text)
+ self.dotest(root, False)
+
+ def test_range_hyperlink_hyperlink(self):
+ inserter = RangeInserter(self.__class__.xDoc)
+ text = TextNode("123456789")
+ inserter.insertrange(Range(0, 0, text))
+ url1 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(1, 4, url1))
+ ## overlap left
+ url2 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(0, 2, url2))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("12")))
+ root.appendchild(url1.dup().appendchild(TextNode("34")))
+ root.appendchild(TextNode("56789"))
+ self.dotest(root, False)
+ ## overlap right
+ url3 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(3, 7, url3))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("12")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url3.dup().appendchild(TextNode("4567")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## around
+ url4 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(3, 7, url4))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("12")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url4.dup().appendchild(TextNode("4567")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## inside
+ url5 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(4, 6, url5))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("12")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url4.dup().appendchild(TextNode("4")))
+ root.appendchild(url5.dup().appendchild(TextNode("56")))
+ root.appendchild(url4.dup().appendchild(TextNode("7")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## empty
+ url6 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(7, 7, url6))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("12")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url4.dup().appendchild(TextNode("4")))
+ root.appendchild(url5.dup().appendchild(TextNode("56")))
+ root.appendchild(url4.dup().appendchild(TextNode("7")))
+ ## this one gets eaten, but we still need to test inserting it (#i106930#)
+ # root.appendchild(url6.dup().appendchild(TextNode("")))
+ root.appendchild(TextNode("89"))
+ ## inside (left-edge)
+ url7 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(0, 1, url7))
+ root = TreeNode()
+ root.appendchild(url7.dup().appendchild(TextNode("1")))
+ root.appendchild(url2.dup().appendchild(TextNode("2")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url4.dup().appendchild(TextNode("4")))
+ root.appendchild(url5.dup().appendchild(TextNode("56")))
+ root.appendchild(url4.dup().appendchild(TextNode("7")))
+ root.appendchild(TextNode("89"))
+ ## inside (right-edge)
+ url8 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(5, 6, url8))
+ root = TreeNode()
+ root.appendchild(url7.dup().appendchild(TextNode("1")))
+ root.appendchild(url2.dup().appendchild(TextNode("2")))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(url4.dup().appendchild(TextNode("4")))
+ root.appendchild(url5.dup().appendchild(TextNode("5")))
+ root.appendchild(url8.dup().appendchild(TextNode("6")))
+ root.appendchild(url4.dup().appendchild(TextNode("7")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+
+ def test_range_hyperlink_ruby(self):
+ inserter = RangeInserter(self.__class__.xDoc)
+ text = TextNode("123456789")
+ inserter.insertrange(Range(0, 0, text))
+ url1 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(1, 4, url1))
+ # overlap left
+ rby2 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(0, 2, rby2))
+ root = TreeNode()
+ root.appendchild(rby2.dup()
+ .appendchild(TextNode("1"))
+ .appendchild(url1.dup().appendchild(TextNode("2"))))
+ root.appendchild(url1.dup().appendchild(TextNode("34")))
+ root.appendchild(TextNode("56789"))
+ self.dotest(root, False)
+ # overlap right
+ rby3 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(3, 5, rby3))
+ root = TreeNode()
+ root.appendchild(rby2.dup()
+ .appendchild(TextNode("1"))
+ .appendchild(url1.dup().appendchild(TextNode("2"))))
+ root.appendchild(url1.dup().appendchild(TextNode("3")))
+ root.appendchild(rby3.dup()
+ .appendchild(url1.dup().appendchild(TextNode("4")))
+ .appendchild(TextNode("5")))
+ root.appendchild(TextNode("6789"))
+ self.dotest(root, False)
+ # around
+ rby4 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(2, 3, rby4))
+ root = TreeNode()
+ root.appendchild(rby2.dup()
+ .appendchild(TextNode("1"))
+ .appendchild(url1.dup().appendchild(TextNode("2"))))
+ root.appendchild(rby4.dup()
+ .appendchild(url1.dup().appendchild(TextNode("3"))))
+ root.appendchild(rby3.dup()
+ .appendchild(url1.dup().appendchild(TextNode("4")))
+ .appendchild(TextNode("5")))
+ root.appendchild(TextNode("6789"))
+ self.dotest(root, False)
+ # inside
+ url5 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(6, 9, url5))
+ rby6 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(7, 8, rby6))
+ root = TreeNode()
+ root.appendchild(rby2.dup()
+ .appendchild(TextNode("1"))
+ .appendchild(url1.dup().appendchild(TextNode("2"))))
+ root.appendchild(rby4.dup()
+ .appendchild(url1.dup().appendchild(TextNode("3"))))
+ root.appendchild(rby3.dup()
+ .appendchild(url1.dup().appendchild(TextNode("4")))
+ .appendchild(TextNode("5")))
+ root.appendchild(TextNode("6"))
+ root.appendchild(url5.dup().appendchild(TextNode("7")))
+ root.appendchild(rby6.dup()
+ .appendchild(url5.dup().appendchild(TextNode("8"))))
+ root.appendchild(url5.dup().appendchild(TextNode("9")))
+ self.dotest(root, False)
+
+ def test_range_ruby_hyperlink(self):
+ inserter = RangeInserter(self.__class__.xDoc)
+ text = TextNode("123456789")
+ inserter.insertrange(Range(0, 0, text))
+ rby1 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(1, 6, rby1))
+ ## overlap left
+ url2 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(0, 3, url2))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("1")))
+ root.appendchild(rby1.dup()
+ .appendchild(url2.dup().appendchild(TextNode("23")))
+ .appendchild(TextNode("456")))
+ root.appendchild(TextNode("789"))
+ self.dotest(root, False)
+ ## overlap right
+ url3 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(5, 7, url3))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("1")))
+ root.appendchild(rby1.dup()
+ .appendchild(url2.dup().appendchild(TextNode("23")))
+ .appendchild(TextNode("45"))
+ .appendchild(url3.dup().appendchild(TextNode("6"))))
+ root.appendchild(url3.dup().appendchild(TextNode("7")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## around (not quite, due to API)
+ url4 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(1, 8, url4))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("1")))
+ root.appendchild(rby1.dup()
+ .appendchild(url4.dup()
+ .appendchild(TextNode("23456"))))
+ root.appendchild(url4.dup().appendchild(TextNode("78")))
+ root.appendchild(TextNode("9"))
+ self.dotest(root, False)
+ ## inside
+ url5 = HyperlinkNode(self.mkname("url"))
+ inserter.insertrange(Range(3, 5, url5))
+ root = TreeNode()
+ root.appendchild(url2.dup().appendchild(TextNode("1")))
+ root.appendchild(rby1.dup()
+ .appendchild(url4.dup()
+ .appendchild(TextNode("23")))
+ .appendchild(url5.dup()
+ .appendchild(TextNode("45")))
+ .appendchild(url4.dup()
+ .appendchild(TextNode("6"))))
+ root.appendchild(url4.dup().appendchild(TextNode("78")))
+ root.appendchild(TextNode("9"))
+ self.dotest(root, False)
+
+ def test_range_ruby_ruby(self):
+ inserter = RangeInserter(self.__class__.xDoc)
+ text = TextNode("123456789")
+ inserter.insertrange(Range(0, 0, text))
+ rby1 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(1, 4, rby1))
+ ## overlap left
+ rby2 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(0, 2, rby2))
+ root = TreeNode()
+ root.appendchild(rby2.dup().appendchild(TextNode("12")))
+ root.appendchild(rby1.dup().appendchild(TextNode("34")))
+ root.appendchild(TextNode("56789"))
+ self.dotest(root, False)
+ ## overlap right
+ rby3 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(3, 7, rby3))
+ root = TreeNode()
+ root.appendchild(rby2.dup().appendchild(TextNode("12")))
+ root.appendchild(rby1.dup().appendchild(TextNode("3")))
+ root.appendchild(rby3.dup().appendchild(TextNode("4567")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## around
+ rby4 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(3, 7, rby4))
+ root = TreeNode()
+ root.appendchild(rby2.dup().appendchild(TextNode("12")))
+ root.appendchild(rby1.dup().appendchild(TextNode("3")))
+ root.appendchild(rby4.dup().appendchild(TextNode("4567")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+ ## inside
+ rby5 = RubyNode(self.mkname("ruby"))
+ inserter.insertrange(Range(4, 6, rby5))
+ root = TreeNode()
+ root.appendchild(rby2.dup().appendchild(TextNode("12")))
+ root.appendchild(rby1.dup().appendchild(TextNode("3")))
+ root.appendchild(rby4.dup().appendchild(TextNode("4")))
+ root.appendchild(rby5.dup().appendchild(TextNode("56")))
+ root.appendchild(rby4.dup().appendchild(TextNode("7")))
+ root.appendchild(TextNode("89"))
+ self.dotest(root, False)
+
def dotest(self, intree, insert=True):
xDoc = self.__class__.xDoc
self._dotest(xDoc, intree, insert)