Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
blob: eb780abbbfcebb7aa1a58ea1f0b964ce7bdec59f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?xml version="1.0"?>
<!--
  Tests expansion sequence

  Copyright (C) 2015 LoVullo Associates, Inc.

    This file is part of TAME.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see
    <http://www.gnu.org/licenses/>.
-->

<description xmlns="http://www.jenitennison.com/xslt/xspec"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
             xmlns:x="http://www.jenitennison.com/xslt/xspec"
             xmlns:eseq="http://www.lovullo.com/tame/preproc/expand/eseq"
             xmlns:foo="http://www.lovullo.com/_junk"
             stylesheet="expand-sequence-test.xsl">


  <scenario label="Pass on an expansion sequence">
    <scenario label="with an empty sequence">
      <call function="eseq:expand-step">
        <param name="eseq"
               select="$foo:empty-eseq" />
      </call>

      <expect label="eliminates the sequence and yields nothing"
              select="()" />
    </scenario>


    <scenario label="with no sequence">
      <call function="eseq:expand-step">
        <param name="eseq"
               select="()" />
      </call>

      <expect label="retains an empty result"
              select="()" />
    </scenario>


    <scenario label="with an expansion element">
      <call function="eseq:expand-step">
        <param name="eseq"
               select="$foo:a" />
      </call>

      <expect label="produces expansion sequence node"
              test="$x:result instance of element( foo:seq )" />

      <expect label="retains expansion sequence node attributes"
              test="$x:result/@foo = $foo:a/@foo" />

      <expect label="allows the head to expand"
              test="$x:result/*[1]/@head = 'true'
                    and $x:result/*[1]/@foo:expanded" />
    </scenario>


    <scenario label="with an expanded node">
      <!-- notice the additional expand-step calls -->
      <call function="eseq:expand-step">
        <param name="eseq"
               select="eseq:expand-step(
                         eseq:expand-step( $foo:a ) )" />
      </call>

      <expect label="hoists expanded element out of sequence"
              test="$x:result[1] instance of element( foo:node )
                    and $x:result[1]/@head = 'true'
                    and $x:result[1]/foo:head" />

      <expect label="maintains remaining sequence"
              test="$x:result[2] instance of element( foo:seq )
                    and $x:result[2]/foo:node" />
    </scenario>


    <scenario label="with nodes still pending expansion">
      <!-- notice the additional expand-step calls -->
      <call function="eseq:expand-step">
        <param name="eseq"
               select="eseq:expand-step(
                         eseq:expand-step( $foo:unexpandable ) )" />
      </call>

      <!-- if this fails, then our is-expanded predicate is not being
           used -->
      <expect label="retains unexpanded head instead of hoisting"
              test="$x:result/foo:node/@no-expand = 'true'" />
    </scenario>
  </scenario>


  <scenario label="Pass on expansion sequence with hoisted node">
    <variable name="foo:hoisted"
      select="eseq:expand-step( $foo:expanded )" />

    <call function="eseq:expand-step">
      <param name="eseq"
             select="$foo:hoisted" />
    </call>

    <expect label="maintains previously hoisted nodes"
            test="$x:result[1] instance of element( foo:node )
                  and $x:result[1]/@head = 'true'" />

    <expect label="will hoist next node below previously hoisted
                   node"
            test="$x:result[2] instance of element( foo:node )
                  and $x:result[2]/@tail = 'true'" />

    <expect label="maintains empty expansion sequence"
            test="$x:result[3] instance of element( foo:seq )
                  and not( $x:result[3]/node() )" />

    <expect label="final pass eliminates empty expansion sequence"
            test="not( eseq:expand-step( $x:result )/foo:seq )" />
  </scenario>
</description>