test/processor_test.rb in sablon-0.0.1 vs test/processor_test.rb in sablon-0.0.2
- old
+ new
@@ -36,51 +36,37 @@
def test_complex_field_replacement
result = process(<<-documentxml, {"last_name" => "Zane"})
<w:r><w:t xml:space="preserve">Hello! My Name is </w:t></w:r>
<w:r w:rsidR="00BE47B1" w:rsidRPr="00BE47B1">
- <w:rPr>
- <w:b/>
- </w:rPr>
+ <w:rPr><w:b/></w:rPr>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r w:rsidR="00BE47B1" w:rsidRPr="00BE47B1">
- <w:rPr>
- <w:b/>
- </w:rPr>
+ <w:rPr><w:b/></w:rPr>
<w:instrText xml:space="preserve"> MERGEFIELD =last_name \\* MERGEFORMAT </w:instrText>
</w:r>
<w:r w:rsidR="00BE47B1" w:rsidRPr="00BE47B1">
- <w:rPr>
- <w:b/>
- </w:rPr>
+ <w:rPr><w:b/></w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r w:rsidR="004B49F0">
- <w:rPr>
- <w:b/>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:b/><w:noProof/></w:rPr>
<w:t>«=last_name»</w:t>
</w:r>
<w:r w:rsidR="00BE47B1" w:rsidRPr="00BE47B1">
- <w:rPr>
- <w:b/>
- </w:rPr>
+ <w:rPr><w:b/></w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
<w:r w:rsidR="00BE47B1"><w:t xml:space="preserve">, nice to meet you.</w:t></w:r>
documentxml
assert_equal "Hello! My Name is Zane , nice to meet you.", text(result)
assert_xml_equal <<-document, result
<w:r><w:t xml:space="preserve">Hello! My Name is </w:t></w:r>
<w:r w:rsidR="004B49F0">
- <w:rPr>
- <w:b/>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:b/><w:noProof/></w:rPr>
<w:t>Zane</w:t>
</w:r>
<w:r w:rsidR="00BE47B1"><w:t xml:space="preserve">, nice to meet you.</w:t></w:r>
document
end
@@ -104,13 +90,11 @@
</w:r>
<w:r w:rsidR="003C4780">
<w:fldChar w:fldCharType="separate" />
</w:r>
<w:r w:rsidR="00441382">
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«=person.first_name»</w:t>
</w:r>
<w:r w:rsidR="003C4780">
<w:fldChar w:fldCharType="end" />
</w:r>
@@ -119,21 +103,18 @@
assert_equal "Hello! My Name is Daniel , nice to meet you.", text(result)
assert_xml_equal <<-document, result
<w:r><w:t xml:space="preserve">Hello! My Name is </w:t></w:r>
<w:r w:rsidR="00441382">
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>Daniel</w:t>
</w:r>
<w:r w:rsidR="00BE47B1"><w:t xml:space="preserve">, nice to meet you.</w:t></w:r>
document
end
def test_paragraph_block_replacement
- item = Struct.new(:index, :label, :rating)
result = process(<<-document, {"technologies" => ["Ruby", "Rails"]})
<w:p w14:paraId="6CB29D92" w14:textId="164B70F4" w:rsidR="007F5CDE" w:rsidRDefault="007F5CDE" w:rsidP="007F5CDE">
<w:pPr>
<w:pStyle w:val="ListParagraph" />
<w:numPr>
@@ -141,13 +122,11 @@
<w:numId w:val="1" />
</w:numPr>
</w:pPr>
<w:fldSimple w:instr=" MERGEFIELD technologies:each(technology) \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«technologies:each(technology)»</w:t>
</w:r>
</w:fldSimple>
</w:p>
<w:p w14:paraId="1081E316" w14:textId="3EAB5FDC" w:rsidR="00380EE8" w:rsidRDefault="00380EE8" w:rsidP="007F5CDE">
@@ -172,13 +151,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate" />
</w:r>
<w:r w:rsidR="009F01DA">
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«=technology»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end" />
</w:r>
@@ -191,13 +168,11 @@
<w:numId w:val="1" />
</w:numPr>
</w:pPr>
<w:fldSimple w:instr=" MERGEFIELD technologies:endEach \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«technologies:endEach»</w:t>
</w:r>
</w:fldSimple>
</w:p>
document
@@ -211,13 +186,11 @@
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r w:rsidR="009F01DA">
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>Ruby</w:t>
</w:r>
</w:p><w:p w14:paraId="1081E316" w14:textId="3EAB5FDC" w:rsidR="00380EE8" w:rsidRDefault="00380EE8" w:rsidP="007F5CDE">
<w:pPr>
<w:pStyle w:val="ListParagraph"/>
@@ -225,19 +198,80 @@
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
</w:pPr>
<w:r w:rsidR="009F01DA">
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>Rails</w:t>
</w:r>
</w:p>
document
end
+ def test_paragraph_block_within_table_cell
+ result = process(<<-document, {"technologies" => ["Puppet", "Chef"]})
+ <w:tbl>
+ <w:tblGrid>
+ <w:gridCol w:w="2202"/>
+ </w:tblGrid>
+ <w:tr w:rsidR="00757DAD">
+ <w:tc>
+ <w:p>
+ <w:fldSimple w:instr=" MERGEFIELD technologies:each(technology) \\* MERGEFORMAT ">
+ <w:r w:rsidR="004B49F0">
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>«technologies:each(technology)»</w:t>
+ </w:r>
+ </w:fldSimple>
+ </w:p>
+ <w:p>
+ <w:fldSimple w:instr=" MERGEFIELD =technology \\* MERGEFORMAT ">
+ <w:r w:rsidR="004B49F0">
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>«=technology»</w:t>
+ </w:r>
+ </w:fldSimple>
+ </w:p>
+ <w:p>
+ <w:fldSimple w:instr=" MERGEFIELD technologies:endEach \\* MERGEFORMAT ">
+ <w:r w:rsidR="004B49F0">
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>«technologies:endEach»</w:t>
+ </w:r>
+ </w:fldSimple>
+ </w:p>
+ </w:tc>
+ </w:tr>
+ </w:tbl>
+ document
+
+ assert_equal "Puppet Chef", text(result)
+ assert_xml_equal <<-document, result
+ <w:tbl>
+ <w:tblGrid>
+ <w:gridCol w:w="2202"/>
+ </w:tblGrid>
+ <w:tr w:rsidR="00757DAD">
+ <w:tc>
+ <w:p>
+ <w:r w:rsidR="004B49F0">
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>Puppet</w:t>
+ </w:r>
+ </w:p>
+ <w:p>
+ <w:r w:rsidR="004B49F0">
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>Chef</w:t>
+ </w:r>
+ </w:p>
+ </w:tc>
+ </w:tr>
+ </w:tbl>
+ document
+ end
+
def test_single_row_table_loop
item = Struct.new(:index, :label, :rating)
result = process(<<-document, {"items" => [item.new("1.", "Milk", "***"), item.new("2.", "Sugar", "**")]})
<w:tbl>
<w:tblPr>
@@ -264,13 +298,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«items:each(item)»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
@@ -303,13 +335,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«=item.index»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
@@ -328,13 +358,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«=item.label»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
@@ -353,13 +381,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«=item.rating»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
@@ -380,13 +406,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«items:endEach»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
@@ -425,39 +449,33 @@
<w:tcPr>
<w:tcW w:w="2202" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="41ACB3D9" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>1.</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4285" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="197C6F31" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>Milk</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2029" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="55C258BB" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>***</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr><w:tr w:rsidR="00757DAD" w14:paraId="1BD2E50A" w14:textId="77777777" w:rsidTr="006333C3">
@@ -465,39 +483,33 @@
<w:tcPr>
<w:tcW w:w="2202" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="41ACB3D9" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>2.</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4285" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="197C6F31" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>Sugar</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2029" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="55C258BB" w14:textId="77777777" w:rsidR="00757DAD" w:rsidRDefault="00757DAD" w:rsidP="006333C3">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>**</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
@@ -519,13 +531,11 @@
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p w14:paraId="7630A6C6" w14:textId="699D0C71" w:rsidR="00F23752" w:rsidRDefault="00F23752" w:rsidP="003F16E3">
<w:fldSimple w:instr=" MERGEFIELD foods:each(food) \\* MERGEFORMAT ">
<w:r w:rsidR="00213ACD">
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«foods:each(food)»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:tc>
@@ -544,13 +554,11 @@
<w:shd w:val="clear" w:color="auto" w:fill="8DB3E2" w:themeFill="text2" w:themeFillTint="66" />
</w:tcPr>
<w:p w14:paraId="3FCF3855" w14:textId="38FA7F3B" w:rsidR="00F23752" w:rsidRDefault="00F23752" w:rsidP="00F23752">
<w:fldSimple w:instr=" MERGEFIELD =food.index \\* MERGEFORMAT ">
<w:r w:rsidR="00213ACD">
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«=food.index»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:tc>
@@ -596,13 +604,11 @@
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p w14:paraId="3E9FF163" w14:textId="0F37CDFB" w:rsidR="00213ACD" w:rsidRDefault="00213ACD" w:rsidP="003F16E3">
<w:fldSimple w:instr=" MERGEFIELD =food.body \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«=food.body»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:tc>
@@ -622,13 +628,11 @@
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate" />
</w:r>
<w:r>
- <w:rPr>
- <w:noProof />
- </w:rPr>
+ <w:rPr><w:noProof /></w:rPr>
<w:t>«foods:endEach»</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end" />
</w:r>
@@ -652,33 +656,27 @@
document = <<-documentxml
<w:r><w:t xml:space="preserve">Anthony</w:t></w:r>
<w:p>
<w:fldSimple w:instr=" MERGEFIELD middle_name:if \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«middle_name:if»</w:t>
</w:r>
</w:fldSimple>
</w:p>
<w:p>
<w:fldSimple w:instr=" MERGEFIELD =middle_name \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«=middle_name»</w:t>
</w:r>
</w:fldSimple>
</w:p>
<w:p>
<w:fldSimple w:instr=" MERGEFIELD middle_name:endIf \\* MERGEFORMAT ">
<w:r>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
+ <w:rPr><w:noProof/></w:rPr>
<w:t>«middle_name:endIf»</w:t>
</w:r>
</w:fldSimple>
</w:p>
<w:r><w:t xml:space="preserve">Hall</w:t></w:r>
@@ -686,9 +684,38 @@
result = process(document, {"middle_name" => "Michael"})
assert_equal "Anthony Michael Hall", text(result)
result = process(document, {"middle_name" => nil})
assert_equal "Anthony Hall", text(result)
+ end
+
+ def test_conditional_with_predicate
+ document = <<-documentxml
+ <w:p>
+ <w:fldSimple w:instr=" MERGEFIELD body:if(empty?) \\* MERGEFORMAT ">
+ <w:r>
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>«body:if(empty?)»</w:t>
+ </w:r>
+ </w:fldSimple>
+ </w:p>
+ <w:p>
+ <w:t>some content</w:t>
+ </w:p>
+ <w:p>
+ <w:fldSimple w:instr=" MERGEFIELD body:endIf \\* MERGEFORMAT ">
+ <w:r>
+ <w:rPr><w:noProof/></w:rPr>
+ <w:t>«body:endIf»</w:t>
+ </w:r>
+ </w:fldSimple>
+ </w:p>
+ documentxml
+ result = process(document, {"body" => ""})
+ assert_equal "some content", text(result)
+
+ result = process(document, {"body" => "not empty"})
+ assert_equal "", text(result)
end
private
def process(document, context)
@processor.process(wrap(document), context).to_xml