[Libreoffice-commits] core.git: sw/qa

jmzambon jeanmarczambon at gmail.com
Wed Aug 9 09:55:58 UTC 2017


 sw/qa/complex/writer/TextPortionEnumerationTest.java |  271 ----------------
 sw/qa/python/text_portion_enumeration_test.py        |  303 +++++++++++++++++++
 2 files changed, 303 insertions(+), 271 deletions(-)

New commits:
commit 033a619c979e45d012e1ebe286462eb379997b41
Author: jmzambon <jeanmarczambon at gmail.com>
Date:   Tue Jul 18 18:08:46 2017 +0200

    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 at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

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)


More information about the Libreoffice-commits mailing list