# -*- coding: utf-8 -*-
require "test_helper"
require "support/document_xml_helper"
module MailMergeParser
module SharedBehavior
include DocumentXMLHelper
def setup
super
@parser = Sablon::Parser::MailMerge.new
end
def field
@field ||= fields.first
end
def fields
@parser.parse_fields(document)
end
def body_xml
document.search(".//w:body").children.map(&:to_xml).map(&:strip).join
end
def document
@document ||= xml
end
end
class FldSimpleTest < Sablon::TestCase
include SharedBehavior
def test_recognizes_expression
assert_equal ["=first_name"], fields.map(&:expression)
end
def test_replace
field.replace(Sablon.content(:string, "Hello"))
xml = <<-xml.strip
Hello
xml
assert_equal xml, body_xml
end
private
def xml
xml = <<-xml.strip
«=first_name»
xml
wrap(xml)
end
end
class FldCharTest < Sablon::TestCase
include SharedBehavior
def test_recognizes_expression
assert_equal ["=last_name"], fields.map(&:expression)
end
def test_replace
field.replace(Sablon.content(:string, "Hello"))
xml = <<-xml.strip
Hello
xml
assert_equal body_xml.strip, xml.strip
end
private
def xml
xml = <<-xml.strip
MERGEFIELD =last_name \\* MERGEFORMAT
«=last_name»
xml
wrap(xml)
end
end
class NonSablonFieldTest < Sablon::TestCase
include SharedBehavior
def test_is_ignored
assert_equal [], fields.map(&:class)
end
private
def xml
xml = <<-xml
PAGE
1
xml
wrap(xml)
end
end
class FieldWithWhitespaceTest < Sablon::TestCase
include SharedBehavior
def test_recognizes_expression
assert_equal ["=title"], fields.map(&:expression)
end
def xml
xml = <<-xml
«=title»
xml
wrap(xml)
end
end
end