Testing whitespace handling following the documentation (Skipped)

Change-Id: I85aea14a6d9fbcef4badea7f3ca695fd0645aa05
diff --git a/t/inline.t b/t/inline.t
index 7fa2357..d5a1db2 100644
--- a/t/inline.t
+++ b/t/inline.t
@@ -93,5 +93,161 @@
   ->text_is('#s2 fs f[name="type"]', 'NN')
   ;
 
+subtest 'Examples from documentation' => sub {
+  plan skip_all => 'Expected behaviour not finalized';
+
+  # From the documentation:
+  #
+  # Example:
+  # '... <head type="main"><s>Campagne in Frankreich</s></head><head type="sub"> <s>1792</s> ...'
+
+  # Two text-nodes should normally be separated by a blank.
+  # In the above example, that would be the 2 text-nodes
+  # 'Campagne in Frankreich' and '1792', which are separated
+  # by the whitespace-node ' ' (see [2]).
+  #
+  # The text-node 'Campagne in Frankreich' leads to the setting
+  # of '$add_one' to 1, so that when opening the 2nd 'head'-tag,
+  # it's from-index gets set to the correct start-index of '1792'
+  # (and not to the start-index of the whitespace-node ' ').
+  #
+  # The assumption here is, that in most cases there _is_ a
+  # whitespace node between 2 text-nodes. The below code fragment
+  # enables a way, to check, if this really _was_ the case for
+  # the last 2 'non-tag'-nodes, when closing a tag:
+  #
+  # When a whitespace-node is read, its from-index is stored
+  # as a hash-key (in %ws), to state that it belongs to a ws-node.
+  # So when closing a tag, it can be checked, if the previous
+  # 'non-tag'-node (text or whitespace), which is the one before
+  # the last read 'non-tag'-node, was a actually _not_ a ws-node,
+  # but instead a text-node. In that case, the from-value of
+  # the last read 'non-tag'-node has to be corrected (see [1]),
+  #
+  # For whitespace-nodes $add_one is set to 0, so when opening
+  # the next tag (in the above example the 2nd 's'-tag), no
+  # additional 1 is added (because this was already done by the
+  # whitespace-node itself when incrementing the variable $pos).
+  #
+  # [1]
+  # Now, what happens, when 2 text-nodes are _not_ seperated by a
+  # whitespace-node (e.g.: <w>Augen<c>,</c></w>)?
+  # In this case, the falsely increased from-value has to be
+  # decreased again by 1 when closing the enclosing tag
+  # (see above code fragment '... not exists $ws{ $from - 1 } ...').
+  #
+  # [2]
+  # Comparing the 2 examples '<w>fu</w> <w>bar</w>' and
+  # '<w>fu</w><w> </w><w>bar</w>', is ' ' in both cases handled as a
+  # whitespace-node (XML_READER_TYPE_SIGNIFICANT_WHITESPACE).
+  #
+  # The from-index of the 2nd w-tag in the second example refers to
+  # 'bar', which may not have been the intention
+  # (even though '<w> </w>' doesn't make a lot of sense).
+  # TODO: could this be a bug?
+  #
+  # Empty tags also cling to the next text-token - e.g. in
+  # '<w>tok1</w> <w>tok2</w><a><b/></a> <w>tok3</w>' are the from-
+  # and to-indizes for the tags 'a' and 'b' both 12,
+  # which is the start-index of the token 'tok3'.
+
+  ok($inline->parse(
+    'bbb',
+    \'<head type="main"><s>Campagne in Frankreich</s></head><head type="sub"> <s>1792</s></head>'),'Parsed');
+  is($inline->data->data, 'Campagne in Frankreich 1792');
+
+  Test::XML::Loy->new($inline->structures->to_string('aaa', 2))
+      ->attr_is('#s0', 'l', "1")
+      ->attr_is('#s0', 'to', 27)
+      ->text_is('#s0 fs f[name="name"]', 'text')
+
+      ->attr_is('#s1', 'l', "2")
+      ->attr_is('#s1', 'to', 22)
+      ->text_is('#s1 fs f[name="name"]', 'head')
+      ->text_is('#s1 fs f[name="attr"] fs f[name=type]', 'main')
+
+      ->attr_is('#s2', 'l', "3")
+      ->attr_is('#s2', 'to', 22)
+      ->text_is('#s2 fs f[name="name"]', 's')
+
+      ->attr_is('#s3', 'l', "2")
+      ->attr_is('#s3', 'from', 23)
+      ->attr_is('#s3', 'to', 27)
+      ->text_is('#s3 fs f[name="name"]', 'head')
+      ->text_is('#s3 fs f[name="attr"] fs f[name=type]', 'sub')
+
+      ->attr_is('#s4', 'l', "3")
+      ->attr_is('#s4', 'from', 23)
+      ->attr_is('#s4', 'to', 27)
+      ->text_is('#s4 fs f[name="name"]', 's')
+      ;
+
+  ok($inline->parse(
+    'ccc',
+    \'<w>tok1</w> <w>tok2</w><a><b/></a> <w>tok3</w>'
+  ), 'Parsed');
+  is($inline->data->data, 'tok1 tok2 tok3');
+
+  Test::XML::Loy->new($inline->structures->to_string('ccc', 2))
+      ->attr_is('#s0', 'l', "1")
+      ->attr_is('#s0', 'to', 14)
+      ->text_is('#s0 fs f[name="name"]', 'text')
+
+      ->attr_is('#s1', 'l', "2")
+      ->attr_is('#s1', 'to', 4)
+      ->text_is('#s1 fs f[name="name"]', 'w')
+
+      ->attr_is('#s2', 'l', "2")
+      ->attr_is('#s2', 'from', 5)
+      ->attr_is('#s2', 'to', 9)
+      ->text_is('#s2 fs f[name="name"]', 'w')
+
+      ->attr_is('#s2', 'l', "2")
+      ->attr_is('#s2', 'from', 5)
+      ->attr_is('#s2', 'to', 9)
+      ->text_is('#s2 fs f[name="name"]', 'w')
+
+      ->attr_is('#s3', 'l', "2")
+      ->attr_is('#s3', 'from', 10)
+      ->attr_is('#s3', 'to', 10)
+      ->text_is('#s3 fs f[name="name"]', 'a')
+
+      ->attr_is('#s4', 'l', "3")
+      ->attr_is('#s4', 'from', 10)
+      ->attr_is('#s4', 'to', 10)
+      ->text_is('#s4 fs f[name="name"]', 'b')
+
+      ->attr_is('#s5', 'l', "2")
+      ->attr_is('#s5', 'from', 10)
+      ->attr_is('#s5', 'to', 14)
+      ->text_is('#s5 fs f[name="name"]', 'w')
+      ;
+
+  ok($inline->parse(
+    'ccc',
+    \'<w>Augen<c>,</c></w> <w>die</w>'
+  ), 'Parsed');
+  is($inline->data->data, 'Augen, die');
+
+  Test::XML::Loy->new($inline->structures->to_string('ddd', 2))
+      ->attr_is('#s0', 'l', "1")
+      ->attr_is('#s0', 'to', 10)
+      ->text_is('#s0 fs f[name="name"]', 'text')
+
+      ->attr_is('#s1', 'l', "2")
+      ->attr_is('#s1', 'to', 6)
+      ->text_is('#s1 fs f[name="name"]', 'w')
+
+      ->attr_is('#s2', 'l', "3")
+      ->attr_is('#s2', 'from', 5)
+      ->attr_is('#s2', 'to', 6)
+      ->text_is('#s2 fs f[name="name"]', 'c')
+
+      ->attr_is('#s3', 'l', "2")
+      ->attr_is('#s3', 'from', 7)
+      ->attr_is('#s3', 'to', 10)
+      ->text_is('#s3 fs f[name="name"]', 'w')
+      ;
+};
 
 done_testing;