# -*- 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