sablon 0.0.21 → 0.0.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/Gemfile.lock +9 -9
- data/README.md +120 -11
- data/lib/sablon.rb +7 -1
- data/lib/sablon/configuration/configuration.rb +165 -0
- data/lib/sablon/configuration/html_tag.rb +99 -0
- data/lib/sablon/content.rb +12 -9
- data/lib/sablon/context.rb +27 -20
- data/lib/sablon/environment.rb +31 -0
- data/lib/sablon/html/ast.rb +290 -75
- data/lib/sablon/html/ast_builder.rb +90 -0
- data/lib/sablon/html/converter.rb +3 -123
- data/lib/sablon/numbering.rb +0 -5
- data/lib/sablon/operations.rb +11 -11
- data/lib/sablon/parser/mail_merge.rb +7 -6
- data/lib/sablon/processor/document.rb +9 -9
- data/lib/sablon/processor/numbering.rb +4 -4
- data/lib/sablon/template.rb +5 -4
- data/lib/sablon/version.rb +1 -1
- data/sablon.gemspec +3 -3
- data/test/configuration_test.rb +122 -0
- data/test/content_test.rb +7 -6
- data/test/context_test.rb +11 -11
- data/test/environment_test.rb +27 -0
- data/test/expression_test.rb +2 -2
- data/test/fixtures/html/html_test_content.html +174 -0
- data/test/fixtures/html_sample.docx +0 -0
- data/test/fixtures/xml/comment_block_and_comment_as_key.xml +31 -0
- data/test/html/ast_builder_test.rb +65 -0
- data/test/html/ast_test.rb +117 -0
- data/test/html/converter_test.rb +386 -87
- data/test/html/node_properties_test.rb +113 -0
- data/test/html_test.rb +10 -10
- data/test/mail_merge_parser_test.rb +3 -2
- data/test/processor/document_test.rb +20 -2
- data/test/section_properties_test.rb +1 -1
- data/test/support/html_snippets.rb +9 -0
- data/test/test_helper.rb +0 -1
- metadata +27 -7
@@ -0,0 +1,113 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "test_helper"
|
3
|
+
|
4
|
+
class NodePropertiesTest < Sablon::TestCase
|
5
|
+
def setup
|
6
|
+
# struct to simplify prop whitelisting during tests
|
7
|
+
@inc_props = Struct.new(:props) do
|
8
|
+
def include?(*)
|
9
|
+
true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_empty_node_properties_converison
|
15
|
+
# test empty properties
|
16
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:pPr', {}, @inc_props.new)
|
17
|
+
assert_equal props.inspect, ''
|
18
|
+
assert_nil props.to_docx
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_simple_node_property_converison
|
22
|
+
props = { 'pStyle' => 'Paragraph' }
|
23
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:pPr', props, @inc_props.new)
|
24
|
+
assert_equal props.inspect, 'pStyle=Paragraph'
|
25
|
+
assert_equal props.to_docx, '<w:pPr><w:pStyle w:val="Paragraph" /></w:pPr>'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_node_property_with_nil_value_converison
|
29
|
+
props = { 'b' => nil }
|
30
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:rPr', props, @inc_props.new)
|
31
|
+
assert_equal props.inspect, 'b'
|
32
|
+
assert_equal props.to_docx, '<w:rPr><w:b /></w:rPr>'
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_node_property_with_hash_value_converison
|
36
|
+
props = { 'shd' => { color: 'clear', fill: '123456', test: nil } }
|
37
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:rPr', props, @inc_props.new)
|
38
|
+
assert_equal props.inspect, 'shd={:color=>"clear", :fill=>"123456", :test=>nil}'
|
39
|
+
assert_equal props.to_docx, '<w:rPr><w:shd w:color="clear" w:fill="123456" /></w:rPr>'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_node_property_with_array_value_converison
|
43
|
+
props = { 'numPr' => [{ 'ilvl' => 1 }, { 'numId' => 34 }] }
|
44
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:pPr', props, @inc_props.new)
|
45
|
+
assert_equal props.inspect, 'numPr=[{"ilvl"=>1}, {"numId"=>34}]'
|
46
|
+
assert_equal props.to_docx, '<w:pPr><w:numPr><w:ilvl w:val="1" /><w:numId w:val="34" /></w:numPr></w:pPr>'
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_complex_node_properties_conversion
|
50
|
+
props = {
|
51
|
+
'top1' => 'val1',
|
52
|
+
'top2' => [
|
53
|
+
{ 'mid0' => nil },
|
54
|
+
{ 'mid1' => [
|
55
|
+
{ 'bottom1' => { key1: 'abc' } },
|
56
|
+
{ 'bottom2' => 'xyz' }
|
57
|
+
] },
|
58
|
+
{ 'mid2' => 'val2' }
|
59
|
+
],
|
60
|
+
'top3' => { key1: 1, key2: '2', key3: nil, key4: true, key5: false }
|
61
|
+
}
|
62
|
+
output = <<-DOCX.gsub(/^\s*/, '').delete("\n")
|
63
|
+
<w:pPr>
|
64
|
+
<w:top1 w:val="val1" />
|
65
|
+
<w:top2>
|
66
|
+
<w:mid0 />
|
67
|
+
<w:mid1>
|
68
|
+
<w:bottom1 w:key1="abc" />
|
69
|
+
<w:bottom2 w:val="xyz" />
|
70
|
+
</w:mid1>
|
71
|
+
<w:mid2 w:val="val2" />
|
72
|
+
</w:top2>
|
73
|
+
<w:top3 w:key1="1" w:key2="2" w:key4="true" />
|
74
|
+
</w:pPr>
|
75
|
+
DOCX
|
76
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:pPr', props, @inc_props.new)
|
77
|
+
assert_equal props.to_docx, output
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_setting_property_value
|
81
|
+
props = {}
|
82
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:pPr', props, @inc_props.new)
|
83
|
+
props['rStyle'] = 'FootnoteText'
|
84
|
+
assert_equal({ 'rStyle' => 'FootnoteText' }, props.instance_variable_get(:@properties))
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_properties_filtered_on_init
|
88
|
+
props = { 'pStyle' => 'Paragraph', 'rStyle' => 'EndnoteText' }
|
89
|
+
props = Sablon::HTMLConverter::NodeProperties.new('w:rPr', props, %w[rStyle])
|
90
|
+
assert_equal({ 'rStyle' => 'EndnoteText' }, props.instance_variable_get(:@properties))
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_transferred_properties
|
94
|
+
props = { 'pStyle' => 'Paragraph', 'rStyle' => 'EndnoteText' }
|
95
|
+
props = Sablon::HTMLConverter::NodeProperties.new(nil, props, %w[pStyle])
|
96
|
+
trans = props.transferred_properties
|
97
|
+
assert_equal({ 'rStyle' => 'EndnoteText' }, trans)
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_node_properties_paragraph_factory
|
101
|
+
props = { 'pStyle' => 'Paragraph' }
|
102
|
+
props = Sablon::HTMLConverter::NodeProperties.paragraph(props)
|
103
|
+
assert_equal 'pStyle=Paragraph', props.inspect
|
104
|
+
assert_equal props.to_docx, '<w:pPr><w:pStyle w:val="Paragraph" /></w:pPr>'
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_node_properties_run_factory
|
108
|
+
props = { 'color' => 'FF00FF' }
|
109
|
+
props = Sablon::HTMLConverter::NodeProperties.run(props)
|
110
|
+
assert_equal 'color=FF00FF', props.inspect
|
111
|
+
assert_equal '<w:rPr><w:color w:val="FF00FF" /></w:rPr>', props.to_docx
|
112
|
+
end
|
113
|
+
end
|
data/test/html_test.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require "test_helper"
|
3
|
-
require "support/
|
3
|
+
require "support/html_snippets"
|
4
4
|
|
5
5
|
class SablonHTMLTest < Sablon::TestCase
|
6
6
|
include Sablon::Test::Assertions
|
7
|
+
include HTMLSnippets
|
7
8
|
|
8
9
|
def setup
|
9
10
|
super
|
@@ -16,7 +17,7 @@ class SablonHTMLTest < Sablon::TestCase
|
|
16
17
|
template_path = @base_path + "fixtures/insertion_template.docx"
|
17
18
|
output_path = @base_path + "sandbox/html.docx"
|
18
19
|
template = Sablon.template template_path
|
19
|
-
context = {'html:content' => content}
|
20
|
+
context = { 'html:content' => content }
|
20
21
|
template.render_to_file output_path, context
|
21
22
|
|
22
23
|
assert_docx_equal @sample_path, output_path
|
@@ -26,7 +27,7 @@ class SablonHTMLTest < Sablon::TestCase
|
|
26
27
|
template_path = @base_path + "fixtures/insertion_template_no_styles.docx"
|
27
28
|
output_path = @base_path + "sandbox/html_no_styles.docx"
|
28
29
|
template = Sablon.template template_path
|
29
|
-
context = {'html:content' => content}
|
30
|
+
context = { 'html:content' => content }
|
30
31
|
|
31
32
|
e = assert_raises(ArgumentError) do
|
32
33
|
template.render_to_file output_path, context
|
@@ -37,13 +38,12 @@ class SablonHTMLTest < Sablon::TestCase
|
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
41
|
+
|
40
42
|
def content
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
<ol><li>Vestibulum <ol><li>ante ipsum primis </li></ol></li><li>in faucibus orci luctus <ol><li>et ultrices posuere cubilia Curae; <ol><li>Aliquam vel dolor </li><li>sed sem maximus </li></ol></li><li>fermentum in non odio. <ol><li>Fusce hendrerit ornare mollis. </li></ol></li><li>Nunc scelerisque nibh nec turpis tempor pulvinar. </li></ol></li><li>Donec eros turpis, </li><li>aliquet vel volutpat sit amet, <ol><li>semper eu purus. </li><li>Proin ac erat nec urna efficitur vulputate. <ol><li>Quisque varius convallis ultricies. </li><li>Nullam vel fermentum eros. </li></ol></li></ol></li></ol><div>Pellentesque nulla leo, auctor ornare erat sed, rhoncus congue diam. Duis non porttitor nulla, ut eleifend enim. Pellentesque non tempor sem.</div><div>Mauris auctor egestas arcu, </div><ol><li>id venenatis nibh dignissim id. </li><li>In non placerat metus. </li></ol><ul><li>Nunc sed consequat metus. </li><li>Nulla consectetur lorem consequat, </li><li>malesuada dui at, lacinia lectus. </li></ul><ol><li>Aliquam efficitur </li><li>lorem a mauris feugiat, </li><li>at semper eros pellentesque. </li></ol><div>Nunc lacus diam, consectetur ut odio sit amet, placerat pharetra erat. Sed commodo ut sem id congue. Sed eget neque elit. Curabitur at erat tortor. Maecenas eget sapien vitae est sagittis accumsan et nec orci. Integer luctus at nisl eget venenatis. Nunc nunc eros, consectetur at tortor et, tristique ultrices elit. Nulla in turpis nibh.</div><ul><li>Nam consectetur <ul><li>venenatis tempor. </li></ul></li><li>Aenean <ul><li>blandit<ul><li>porttitor massa, <ul><li>non efficitur <ul><li>metus. </li></ul></li></ul></li></ul></li></ul></li><li>Duis faucibus nunc nec venenatis faucibus. </li><li>Aliquam erat volutpat. </li></ul><div><strong>Quisque non neque ut lacus eleifend volutpat quis sed lacus.<br />Praesent ultrices purus eu quam elementum, sit amet faucibus elit interdum. In lectus orci,<br /> elementum quis dictum ac, porta ac ante. Fusce tempus ac mauris id cursus. Phasellus a erat nulla. <em>Mauris dolor orci</em>, malesuada auctor dignissim non, <u>posuere nec odio</u>. Etiam hendrerit justo nec diam ullamcorper, nec blandit elit sodales.</strong></div>
|
47
|
-
HTML
|
43
|
+
html_str = snippet('html_test_content')
|
44
|
+
# combine all white space
|
45
|
+
html_str = html_str.gsub(/\s+/, ' ')
|
46
|
+
# clear any white space between block level tags and other content
|
47
|
+
html_str.gsub(%r{\s*<(/?(?:h\d|div|p|br|ul|ol|li).*?)>\s*}, '<\1>')
|
48
48
|
end
|
49
49
|
end
|
@@ -7,6 +7,7 @@ module MailMergeParser
|
|
7
7
|
include DocumentXMLHelper
|
8
8
|
def setup
|
9
9
|
super
|
10
|
+
@env = Sablon::Environment.new(nil)
|
10
11
|
@parser = Sablon::Parser::MailMerge.new
|
11
12
|
end
|
12
13
|
|
@@ -35,7 +36,7 @@ module MailMergeParser
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def test_replace
|
38
|
-
field.replace(Sablon.content(:string, "Hello"))
|
39
|
+
field.replace(Sablon.content(:string, "Hello"), @env)
|
39
40
|
xml = <<-xml.strip
|
40
41
|
<w:p>
|
41
42
|
<w:r w:rsidR=\"004B49F0\">
|
@@ -70,7 +71,7 @@ xml
|
|
70
71
|
end
|
71
72
|
|
72
73
|
def test_replace
|
73
|
-
field.replace(Sablon.content(:string, "Hello"))
|
74
|
+
field.replace(Sablon.content(:string, "Hello"), @env)
|
74
75
|
xml = <<-xml.strip
|
75
76
|
<w:p>
|
76
77
|
|
@@ -59,7 +59,8 @@ class ProcessorDocumentTest < Sablon::TestCase
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_context_can_contain_string_and_symbol_keys
|
62
|
-
|
62
|
+
context = {"first_name" => "Jack", last_name: "Davis"}
|
63
|
+
result = process(snippet("simple_fields"), context)
|
63
64
|
assert_equal "Jack Davis", text(result)
|
64
65
|
end
|
65
66
|
|
@@ -439,8 +440,25 @@ class ProcessorDocumentTest < Sablon::TestCase
|
|
439
440
|
assert_equal "Before After", text(result)
|
440
441
|
end
|
441
442
|
|
443
|
+
def test_comment_block_and_comment_as_key
|
444
|
+
result = process(snippet("comment_block_and_comment_as_key"), {comment: 'Contents of comment key'})
|
445
|
+
|
446
|
+
assert_xml_equal <<-document, result
|
447
|
+
<w:r><w:t xml:space="preserve">Before </w:t></w:r>
|
448
|
+
<w:r><w:t xml:space="preserve">After </w:t></w:r>
|
449
|
+
<w:p>
|
450
|
+
<w:r w:rsidR="004B49F0">
|
451
|
+
<w:rPr><w:noProof/></w:rPr>
|
452
|
+
<w:t>Contents of comment key</w:t>
|
453
|
+
</w:r>
|
454
|
+
</w:p>
|
455
|
+
document
|
456
|
+
end
|
457
|
+
|
442
458
|
private
|
459
|
+
|
443
460
|
def process(document, context)
|
444
|
-
|
461
|
+
env = Sablon::Environment.new(nil, context)
|
462
|
+
@processor.process(wrap(document), env).to_xml
|
445
463
|
end
|
446
464
|
end
|
@@ -34,7 +34,7 @@ class SectionPropertiesTest < Sablon::TestCase
|
|
34
34
|
</w:body>
|
35
35
|
documentxml
|
36
36
|
properties = Sablon::Processor::SectionProperties.from_document(xml)
|
37
|
-
|
37
|
+
assert_nil properties.start_page_number
|
38
38
|
properties.start_page_number = "16"
|
39
39
|
assert_equal "16", properties.start_page_number
|
40
40
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sablon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yves Senn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.1.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.1.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '12.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '12.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,9 +113,13 @@ files:
|
|
113
113
|
- bin/rake
|
114
114
|
- exe/sablon
|
115
115
|
- lib/sablon.rb
|
116
|
+
- lib/sablon/configuration/configuration.rb
|
117
|
+
- lib/sablon/configuration/html_tag.rb
|
116
118
|
- lib/sablon/content.rb
|
117
119
|
- lib/sablon/context.rb
|
120
|
+
- lib/sablon/environment.rb
|
118
121
|
- lib/sablon/html/ast.rb
|
122
|
+
- lib/sablon/html/ast_builder.rb
|
119
123
|
- lib/sablon/html/converter.rb
|
120
124
|
- lib/sablon/html/visitor.rb
|
121
125
|
- lib/sablon/numbering.rb
|
@@ -144,14 +148,17 @@ files:
|
|
144
148
|
- misc/step_6.png
|
145
149
|
- misc/step_7.png
|
146
150
|
- sablon.gemspec
|
151
|
+
- test/configuration_test.rb
|
147
152
|
- test/content_test.rb
|
148
153
|
- test/context_test.rb
|
154
|
+
- test/environment_test.rb
|
149
155
|
- test/executable_test.rb
|
150
156
|
- test/expression_test.rb
|
151
157
|
- test/fixtures/conditionals_sample.docx
|
152
158
|
- test/fixtures/conditionals_template.docx
|
153
159
|
- test/fixtures/cv_sample.docx
|
154
160
|
- test/fixtures/cv_template.docx
|
161
|
+
- test/fixtures/html/html_test_content.html
|
155
162
|
- test/fixtures/html_sample.docx
|
156
163
|
- test/fixtures/insertion_template.docx
|
157
164
|
- test/fixtures/insertion_template_no_styles.docx
|
@@ -160,6 +167,7 @@ files:
|
|
160
167
|
- test/fixtures/recipe_sample.docx
|
161
168
|
- test/fixtures/recipe_template.docx
|
162
169
|
- test/fixtures/xml/comment.xml
|
170
|
+
- test/fixtures/xml/comment_block_and_comment_as_key.xml
|
163
171
|
- test/fixtures/xml/complex_field.xml
|
164
172
|
- test/fixtures/xml/complex_field_inline_conditional.xml
|
165
173
|
- test/fixtures/xml/conditional.xml
|
@@ -177,7 +185,10 @@ files:
|
|
177
185
|
- test/fixtures/xml/table_multi_row_loop.xml
|
178
186
|
- test/fixtures/xml/table_row_loop.xml
|
179
187
|
- test/fixtures/xml/test_ignore_complex_field_spanning_multiple_paragraphs.xml
|
188
|
+
- test/html/ast_builder_test.rb
|
189
|
+
- test/html/ast_test.rb
|
180
190
|
- test/html/converter_test.rb
|
191
|
+
- test/html/node_properties_test.rb
|
181
192
|
- test/html_test.rb
|
182
193
|
- test/mail_merge_parser_test.rb
|
183
194
|
- test/processor/document_test.rb
|
@@ -185,6 +196,7 @@ files:
|
|
185
196
|
- test/sandbox/.gitkeep
|
186
197
|
- test/section_properties_test.rb
|
187
198
|
- test/support/document_xml_helper.rb
|
199
|
+
- test/support/html_snippets.rb
|
188
200
|
- test/support/xml_snippets.rb
|
189
201
|
- test/test_helper.rb
|
190
202
|
homepage: http://github.com/senny/sablon
|
@@ -210,16 +222,19 @@ rubyforge_project:
|
|
210
222
|
rubygems_version: 2.6.11
|
211
223
|
signing_key:
|
212
224
|
specification_version: 4
|
213
|
-
summary: docx
|
225
|
+
summary: docx template processor
|
214
226
|
test_files:
|
227
|
+
- test/configuration_test.rb
|
215
228
|
- test/content_test.rb
|
216
229
|
- test/context_test.rb
|
230
|
+
- test/environment_test.rb
|
217
231
|
- test/executable_test.rb
|
218
232
|
- test/expression_test.rb
|
219
233
|
- test/fixtures/conditionals_sample.docx
|
220
234
|
- test/fixtures/conditionals_template.docx
|
221
235
|
- test/fixtures/cv_sample.docx
|
222
236
|
- test/fixtures/cv_template.docx
|
237
|
+
- test/fixtures/html/html_test_content.html
|
223
238
|
- test/fixtures/html_sample.docx
|
224
239
|
- test/fixtures/insertion_template.docx
|
225
240
|
- test/fixtures/insertion_template_no_styles.docx
|
@@ -228,6 +243,7 @@ test_files:
|
|
228
243
|
- test/fixtures/recipe_sample.docx
|
229
244
|
- test/fixtures/recipe_template.docx
|
230
245
|
- test/fixtures/xml/comment.xml
|
246
|
+
- test/fixtures/xml/comment_block_and_comment_as_key.xml
|
231
247
|
- test/fixtures/xml/complex_field.xml
|
232
248
|
- test/fixtures/xml/complex_field_inline_conditional.xml
|
233
249
|
- test/fixtures/xml/conditional.xml
|
@@ -245,7 +261,10 @@ test_files:
|
|
245
261
|
- test/fixtures/xml/table_multi_row_loop.xml
|
246
262
|
- test/fixtures/xml/table_row_loop.xml
|
247
263
|
- test/fixtures/xml/test_ignore_complex_field_spanning_multiple_paragraphs.xml
|
264
|
+
- test/html/ast_builder_test.rb
|
265
|
+
- test/html/ast_test.rb
|
248
266
|
- test/html/converter_test.rb
|
267
|
+
- test/html/node_properties_test.rb
|
249
268
|
- test/html_test.rb
|
250
269
|
- test/mail_merge_parser_test.rb
|
251
270
|
- test/processor/document_test.rb
|
@@ -253,5 +272,6 @@ test_files:
|
|
253
272
|
- test/sandbox/.gitkeep
|
254
273
|
- test/section_properties_test.rb
|
255
274
|
- test/support/document_xml_helper.rb
|
275
|
+
- test/support/html_snippets.rb
|
256
276
|
- test/support/xml_snippets.rb
|
257
277
|
- test/test_helper.rb
|