You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/05/16 16:09:17 UTC
[19/19] incubator-freemarker git commit: Moving TemplateTestSuite to
freemarker-test-utils,
so that it can be used from multiple modules. It had to be generalized for
this a bit,
as now it has a CoreTemplateTestSuite subclass in freemarker-core-test.
Moving TemplateTestSuite to freemarker-test-utils, so that it can be used from multiple modules. It had to be generalized for this a bit, as now it has a CoreTemplateTestSuite subclass in freemarker-core-test.
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/4b75ea93
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/4b75ea93
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/4b75ea93
Branch: refs/heads/3
Commit: 4b75ea930f8b4894298c19e60915950ce4443995
Parents: bb9acc9
Author: ddekany <dd...@apache.org>
Authored: Tue May 16 11:21:14 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Tue May 16 18:08:45 2017 +0200
----------------------------------------------------------------------
build.gradle | 2 +-
freemarker-core-test/build.gradle | 7 +
.../apache/freemarker/core/ListErrorsTest.java | 2 +-
.../core/NewBiObjectWrapperRestrictionTest.java | 4 +-
.../templatesuite/CoreTemplateTestSuite.java | 282 +++++
.../templatesuite/models/AllTemplateModels.java | 128 ++
.../templatesuite/models/BeanTestClass.java | 93 ++
.../templatesuite/models/BeanTestInterface.java | 25 +
.../models/BeanTestSuperclass.java | 30 +
.../models/BooleanAndScalarModel.java | 40 +
.../models/BooleanAndStringTemplateModel.java | 38 +
.../core/templatesuite/models/BooleanHash1.java | 58 +
.../core/templatesuite/models/BooleanHash2.java | 50 +
.../core/templatesuite/models/BooleanList1.java | 62 +
.../core/templatesuite/models/BooleanList2.java | 53 +
.../models/BooleanVsStringMethods.java | 40 +
.../templatesuite/models/EnumTestClass.java | 34 +
.../templatesuite/models/ExceptionModel.java | 39 +
.../models/HashAndScalarModel.java | 84 ++
.../templatesuite/models/JavaObjectInfo.java | 35 +
.../core/templatesuite/models/Listables.java | 185 +++
.../core/templatesuite/models/MultiModel1.java | 116 ++
.../core/templatesuite/models/MultiModel2.java | 63 +
.../core/templatesuite/models/MultiModel3.java | 69 ++
.../core/templatesuite/models/MultiModel4.java | 77 ++
.../core/templatesuite/models/MultiModel5.java | 81 ++
.../core/templatesuite/models/NewTestModel.java | 52 +
.../templatesuite/models/NewTestModel2.java | 52 +
.../models/NumberAndStringModel.java | 47 +
.../models/OverloadedConstructor.java | 46 +
.../templatesuite/models/OverloadedMethods.java | 191 +++
.../models/OverloadedMethods2.java | 1110 ++++++++++++++++++
.../SimpleMapAndCollectionObjectWrapper.java | 60 +
.../templatesuite/models/SimpleTestMethod.java | 49 +
.../core/templatesuite/models/TestBean.java | 17 +
.../core/templatesuite/models/TestBoolean.java | 16 +
.../core/templatesuite/models/TestMethod.java | 12 +
.../core/templatesuite/models/TestNode.java | 32 +
.../models/TransformHashWrapper.java | 79 ++
.../models/TransformMethodWrapper1.java | 49 +
.../models/TransformMethodWrapper2.java | 64 +
.../templatesuite/models/TransformModel1.java | 175 +++
.../templatesuite/models/VarArgTestModel.java | 63 +
.../test/templatesuite/TemplateTestCase.java | 515 --------
.../test/templatesuite/TemplateTestSuite.java | 298 -----
.../templatesuite/models/AllTemplateModels.java | 128 --
.../templatesuite/models/BeanTestClass.java | 93 --
.../templatesuite/models/BeanTestInterface.java | 25 -
.../models/BeanTestSuperclass.java | 30 -
.../models/BooleanAndScalarModel.java | 40 -
.../models/BooleanAndStringTemplateModel.java | 38 -
.../test/templatesuite/models/BooleanHash1.java | 58 -
.../test/templatesuite/models/BooleanHash2.java | 50 -
.../test/templatesuite/models/BooleanList1.java | 62 -
.../test/templatesuite/models/BooleanList2.java | 53 -
.../models/BooleanVsStringMethods.java | 40 -
.../templatesuite/models/EnumTestClass.java | 34 -
.../templatesuite/models/ExceptionModel.java | 39 -
.../models/HashAndScalarModel.java | 84 --
.../templatesuite/models/JavaObjectInfo.java | 35 -
.../test/templatesuite/models/Listables.java | 185 ---
.../test/templatesuite/models/MultiModel1.java | 116 --
.../test/templatesuite/models/MultiModel2.java | 63 -
.../test/templatesuite/models/MultiModel3.java | 69 --
.../test/templatesuite/models/MultiModel4.java | 77 --
.../test/templatesuite/models/MultiModel5.java | 81 --
.../test/templatesuite/models/NewTestModel.java | 52 -
.../templatesuite/models/NewTestModel2.java | 52 -
.../models/NumberAndStringModel.java | 47 -
.../models/OverloadedConstructor.java | 46 -
.../templatesuite/models/OverloadedMethods.java | 191 ---
.../models/OverloadedMethods2.java | 1110 ------------------
.../SimpleMapAndCollectionObjectWrapper.java | 60 -
.../templatesuite/models/SimpleTestMethod.java | 49 -
.../models/TransformHashWrapper.java | 79 --
.../models/TransformMethodWrapper1.java | 49 -
.../models/TransformMethodWrapper2.java | 64 -
.../templatesuite/models/TransformModel1.java | 175 ---
.../templatesuite/models/VarArgTestModel.java | 63 -
.../freemarker/test/templatesuite/package.html | 42 -
.../core/templatesuite/expected/arithmetic.txt | 46 +
.../expected/boolean-formatting.txt | 31 +
.../core/templatesuite/expected/boolean.txt | 102 ++
.../expected/charset-in-header.txt | 26 +
.../core/templatesuite/expected/comment.txt | 34 +
.../core/templatesuite/expected/comparisons.txt | 93 ++
.../core/templatesuite/expected/compress.txt | 40 +
.../templatesuite/expected/dateformat-java.txt | 55 +
.../expected/default-object-wrapper.txt | 55 +
.../templatesuite/expected/default-xmlns.txt | 25 +
.../core/templatesuite/expected/default.txt | 26 +
.../expected/encoding-builtins.txt | 44 +
.../core/templatesuite/expected/escapes.txt | 49 +
.../core/templatesuite/expected/exception.txt | 43 +
.../core/templatesuite/expected/exception2.txt | 47 +
.../core/templatesuite/expected/exception3.txt | 21 +
.../core/templatesuite/expected/exthash.txt | 76 ++
.../core/templatesuite/expected/hashconcat.txt | 138 +++
.../core/templatesuite/expected/hashliteral.txt | 74 ++
.../core/templatesuite/expected/helloworld.txt | 31 +
.../expected/identifier-escaping.txt | 57 +
.../expected/identifier-non-ascii.txt | 19 +
.../core/templatesuite/expected/if.txt | 104 ++
.../core/templatesuite/expected/import.txt | 40 +
.../core/templatesuite/expected/include.txt | 67 ++
.../core/templatesuite/expected/include2.txt | 28 +
.../core/templatesuite/expected/interpret.txt | 23 +
.../core/templatesuite/expected/iterators.txt | 84 ++
.../templatesuite/expected/lastcharacter.txt | 31 +
.../core/templatesuite/expected/list-bis.txt | 51 +
.../core/templatesuite/expected/list.txt | 51 +
.../core/templatesuite/expected/list2.txt | 211 ++++
.../core/templatesuite/expected/list3.txt | 57 +
.../core/templatesuite/expected/listhash.txt | 157 +++
.../templatesuite/expected/listhashliteral.txt | 36 +
.../core/templatesuite/expected/listliteral.txt | 75 ++
.../templatesuite/expected/localization.txt | 32 +
.../core/templatesuite/expected/logging.txt | 27 +
.../templatesuite/expected/loopvariable.txt | 54 +
.../templatesuite/expected/macros-return.txt | 23 +
.../core/templatesuite/expected/macros.txt | 67 ++
.../core/templatesuite/expected/macros2.txt | 22 +
.../core/templatesuite/expected/multimodels.txt | 93 ++
.../core/templatesuite/expected/nested.txt | 25 +
.../expected/new-allowsnothing.txt | 19 +
.../expected/new-defaultresolver.txt | 19 +
.../core/templatesuite/expected/new-optin.txt | 32 +
.../core/templatesuite/expected/newlines1.txt | 29 +
.../core/templatesuite/expected/newlines2.txt | 30 +
.../core/templatesuite/expected/noparse.txt | 54 +
.../templatesuite/expected/number-format.txt | 33 +
.../templatesuite/expected/number-literal.txt | 79 ++
.../templatesuite/expected/number-to-date.txt | 31 +
.../templatesuite/expected/numerical-cast.txt | 462 ++++++++
.../templatesuite/expected/output-encoding1.txt | 27 +
.../templatesuite/expected/output-encoding2.txt | Bin 0 -> 1972 bytes
.../templatesuite/expected/output-encoding3.txt | 26 +
.../core/templatesuite/expected/precedence.txt | 48 +
.../core/templatesuite/expected/recover.txt | 26 +
.../core/templatesuite/expected/root.txt | 44 +
.../expected/sequence-builtins.txt | 404 +++++++
.../core/templatesuite/expected/specialvars.txt | 25 +
.../string-builtins-regexps-matches.txt | 99 ++
.../expected/string-builtins-regexps.txt | 112 ++
.../templatesuite/expected/string-builtins1.txt | 112 ++
.../templatesuite/expected/string-builtins2.txt | 135 +++
.../templatesuite/expected/stringbimethods.txt | 29 +
.../templatesuite/expected/stringliteral.txt | Bin 0 -> 1550 bytes
.../core/templatesuite/expected/switch.txt | 80 ++
.../core/templatesuite/expected/transforms.txt | 68 ++
.../templatesuite/expected/type-builtins.txt | 33 +
.../core/templatesuite/expected/var-layers.txt | 37 +
.../core/templatesuite/expected/varargs.txt | 44 +
.../core/templatesuite/expected/variables.txt | 62 +
.../templatesuite/expected/whitespace-trim.txt | 60 +
.../templatesuite/expected/wstrip-in-header.txt | 23 +
.../core/templatesuite/expected/wstripping.txt | 39 +
.../templatesuite/expected/xml-fragment.txt | 25 +
.../expected/xml-ns_prefix-scope.txt | 29 +
.../core/templatesuite/expected/xml.txt | 65 +
.../core/templatesuite/expected/xmlns1.txt | 63 +
.../core/templatesuite/expected/xmlns3.txt | 47 +
.../core/templatesuite/expected/xmlns4.txt | 47 +
.../core/templatesuite/expected/xmlns5.txt | 26 +
.../models/BeansTestResources.properties | 19 +
.../core/templatesuite/models/defaultxmlns1.xml | 24 +
.../models/xml-ns_prefix-scope.xml | 26 +
.../core/templatesuite/models/xml.xml | 31 +
.../core/templatesuite/models/xmlfragment.xml | 19 +
.../core/templatesuite/models/xmlns.xml | 32 +
.../core/templatesuite/models/xmlns2.xml | 32 +
.../core/templatesuite/models/xmlns3.xml | 32 +
.../templatesuite/templates/api-builtins.ftl | 40 +
.../core/templatesuite/templates/arithmetic.ftl | 50 +
.../templatesuite/templates/assignments.ftl | 108 ++
.../templates/boolean-formatting.ftl | 82 ++
.../core/templatesuite/templates/boolean.ftl | 142 +++
.../templates/charset-in-header.ftl | 27 +
.../templates/charset-in-header_inc1.ftl | 20 +
.../templates/charset-in-header_inc2.ftl | 19 +
.../core/templatesuite/templates/comment.ftl | 50 +
.../templatesuite/templates/comparisons.ftl | 218 ++++
.../core/templatesuite/templates/compress.ftl | 59 +
.../templates/date-type-builtins.ftl | 47 +
.../templates/dateformat-iso-bi.ftl | 163 +++
.../templates/dateformat-iso-like.ftl | 155 +++
.../templatesuite/templates/dateformat-java.ftl | 71 ++
.../templatesuite/templates/dateparsing.ftl | 84 ++
.../templates/default-object-wrapper.ftl | 59 +
.../templatesuite/templates/default-xmlns.ftl | 28 +
.../core/templatesuite/templates/default.ftl | 34 +
.../templates/encoding-builtins.ftl | 52 +
.../core/templatesuite/templates/escapes.ftl | 79 ++
.../core/templatesuite/templates/exception.ftl | 31 +
.../core/templatesuite/templates/exception2.ftl | 31 +
.../core/templatesuite/templates/exception3.ftl | 31 +
.../templates/existence-operators.ftl | 141 +++
.../core/templatesuite/templates/hashconcat.ftl | 60 +
.../templatesuite/templates/hashliteral.ftl | 100 ++
.../core/templatesuite/templates/helloworld.ftl | 30 +
.../templates/identifier-escaping.ftl | 81 ++
.../templates/identifier-non-ascii.ftl | 21 +
.../core/templatesuite/templates/if.ftl | 109 ++
.../core/templatesuite/templates/import.ftl | 45 +
.../core/templatesuite/templates/import_lib.ftl | 31 +
.../core/templatesuite/templates/include.ftl | 47 +
.../templates/include2-included.ftl | 19 +
.../core/templatesuite/templates/include2.ftl | 32 +
.../core/templatesuite/templates/included.ftl | 30 +
.../core/templatesuite/templates/interpret.ftl | 25 +
.../core/templatesuite/templates/iterators.ftl | 71 ++
.../templatesuite/templates/lastcharacter.ftl | 31 +
.../core/templatesuite/templates/list-bis.ftl | 48 +
.../core/templatesuite/templates/list.ftl | 44 +
.../core/templatesuite/templates/list2.ftl | 90 ++
.../core/templatesuite/templates/list3.ftl | 70 ++
.../core/templatesuite/templates/listhash.ftl | 70 ++
.../templatesuite/templates/listhashliteral.ftl | 35 +
.../templatesuite/templates/listliteral.ftl | 84 ++
.../templatesuite/templates/localization.ftl | 32 +
.../templatesuite/templates/localization_en.ftl | 32 +
.../templates/localization_en_AU.ftl | 32 +
.../core/templatesuite/templates/logging.ftl | 42 +
.../templatesuite/templates/loopvariable.ftl | 49 +
.../templatesuite/templates/macros-return.ftl | 34 +
.../core/templatesuite/templates/macros.ftl | 101 ++
.../core/templatesuite/templates/macros2.ftl | 35 +
.../templatesuite/templates/multimodels.ftl | 84 ++
.../core/templatesuite/templates/nested.ftl | 29 +
.../templatesuite/templates/nestedinclude.ftl | 21 +
.../templates/new-defaultresolver.ftl | 23 +
.../core/templatesuite/templates/new-optin.ftl | 30 +
.../core/templatesuite/templates/newlines1.ftl | 29 +
.../core/templatesuite/templates/newlines2.ftl | 33 +
.../core/templatesuite/templates/noparse.ftl | 62 +
.../templatesuite/templates/number-format.ftl | 42 +
.../templatesuite/templates/number-literal.ftl | 133 +++
.../templates/number-math-builtins.ftl | 78 ++
.../templatesuite/templates/number-to-date.ftl | 35 +
.../templatesuite/templates/numerical-cast.ftl | 82 ++
.../templates/output-encoding1.ftl | 30 +
.../templates/output-encoding2.ftl | 28 +
.../templates/output-encoding3.ftl | 28 +
.../templates/overloaded-methods.ftl | 411 +++++++
.../core/templatesuite/templates/precedence.ftl | 61 +
.../templatesuite/templates/range-common.ftl | 314 +++++
.../core/templatesuite/templates/range.ftl | 50 +
.../core/templatesuite/templates/recover.ftl | 47 +
.../core/templatesuite/templates/root.ftl | 47 +
.../templates/sequence-builtins.ftl | 360 ++++++
.../core/templatesuite/templates/setting.ftl | 53 +
.../templates/simplehash-char-key.ftl | 44 +
.../templatesuite/templates/specialvars.ftl | 38 +
.../templates/string-builtin-coercion.ftl | 34 +
.../string-builtins-regexps-matches.ftl | 118 ++
.../templates/string-builtins-regexps.ftl | 136 +++
.../templates/string-builtins1.ftl | 129 ++
.../templates/string-builtins2.ftl | 135 +++
.../templates/string-builtins3.ftl | 225 ++++
.../templatesuite/templates/stringbimethods.ftl | 36 +
.../templatesuite/templates/stringliteral.ftl | 69 ++
.../templates/subdir/include-subdir.ftl | 27 +
.../templates/subdir/include-subdir2.ftl | 19 +
.../templates/subdir/new-optin-2.ftl | 24 +
.../templates/subdir/new-optin.ftl | 26 +
.../templates/subdir/subsub/new-optin.ftl | 24 +
.../templatesuite/templates/switch-builtin.ftl | 54 +
.../core/templatesuite/templates/switch.ftl | 139 +++
.../templatesuite/templates/then-builtin.ftl | 53 +
.../core/templatesuite/templates/transforms.ftl | 100 ++
.../templatesuite/templates/type-builtins.ftl | 44 +
.../core/templatesuite/templates/undefined.ftl | 19 +
.../core/templatesuite/templates/url.ftl | 24 +
.../core/templatesuite/templates/var-layers.ftl | 39 +
.../core/templatesuite/templates/varargs.ftl | 45 +
.../core/templatesuite/templates/variables.ftl | 70 ++
.../templatesuite/templates/varlayers_lib.ftl | 28 +
.../templatesuite/templates/whitespace-trim.ftl | 102 ++
.../templates/wsstripinheader_inc.ftl | 22 +
.../templates/wstrip-in-header.ftl | 26 +
.../templatesuite/templates/xml-fragment.ftl | 26 +
.../templates/xml-ns_prefix-scope-lib.ftl | 23 +
.../templates/xml-ns_prefix-scope-main.ftl | 36 +
.../core/templatesuite/templates/xml.ftl | 47 +
.../core/templatesuite/templates/xmlns1.ftl | 53 +
.../core/templatesuite/templates/xmlns3.ftl | 70 ++
.../core/templatesuite/templates/xmlns4.ftl | 70 ++
.../core/templatesuite/templates/xmlns5.ftl | 28 +
.../freemarker/core/templatesuite/testcases.xml | 211 ++++
.../test/templatesuite/expected/arithmetic.txt | 46 -
.../expected/boolean-formatting.txt | 31 -
.../test/templatesuite/expected/boolean.txt | 102 --
.../expected/charset-in-header.txt | 26 -
.../test/templatesuite/expected/comment.txt | 34 -
.../test/templatesuite/expected/comparisons.txt | 93 --
.../test/templatesuite/expected/compress.txt | 40 -
.../templatesuite/expected/dateformat-java.txt | 55 -
.../expected/default-object-wrapper.txt | 55 -
.../templatesuite/expected/default-xmlns.txt | 25 -
.../test/templatesuite/expected/default.txt | 26 -
.../expected/encoding-builtins.txt | 44 -
.../test/templatesuite/expected/escapes.txt | 49 -
.../test/templatesuite/expected/exception.txt | 43 -
.../test/templatesuite/expected/exception2.txt | 47 -
.../test/templatesuite/expected/exception3.txt | 21 -
.../test/templatesuite/expected/exthash.txt | 76 --
.../test/templatesuite/expected/hashconcat.txt | 138 ---
.../test/templatesuite/expected/hashliteral.txt | 74 --
.../test/templatesuite/expected/helloworld.txt | 31 -
.../expected/identifier-escaping.txt | 57 -
.../expected/identifier-non-ascii.txt | 19 -
.../test/templatesuite/expected/if.txt | 104 --
.../test/templatesuite/expected/import.txt | 40 -
.../test/templatesuite/expected/include.txt | 67 --
.../test/templatesuite/expected/include2.txt | 28 -
.../test/templatesuite/expected/interpret.txt | 23 -
.../test/templatesuite/expected/iterators.txt | 84 --
.../templatesuite/expected/lastcharacter.txt | 31 -
.../test/templatesuite/expected/list-bis.txt | 51 -
.../test/templatesuite/expected/list.txt | 51 -
.../test/templatesuite/expected/list2.txt | 211 ----
.../test/templatesuite/expected/list3.txt | 57 -
.../test/templatesuite/expected/listhash.txt | 157 ---
.../templatesuite/expected/listhashliteral.txt | 36 -
.../test/templatesuite/expected/listliteral.txt | 75 --
.../templatesuite/expected/localization.txt | 32 -
.../test/templatesuite/expected/logging.txt | 27 -
.../templatesuite/expected/loopvariable.txt | 54 -
.../templatesuite/expected/macros-return.txt | 23 -
.../test/templatesuite/expected/macros.txt | 67 --
.../test/templatesuite/expected/macros2.txt | 22 -
.../test/templatesuite/expected/multimodels.txt | 93 --
.../test/templatesuite/expected/nested.txt | 25 -
.../expected/new-allowsnothing.txt | 19 -
.../expected/new-defaultresolver.txt | 19 -
.../test/templatesuite/expected/new-optin.txt | 32 -
.../test/templatesuite/expected/newlines1.txt | 29 -
.../test/templatesuite/expected/newlines2.txt | 30 -
.../test/templatesuite/expected/noparse.txt | 54 -
.../templatesuite/expected/number-format.txt | 33 -
.../templatesuite/expected/number-literal.txt | 79 --
.../templatesuite/expected/number-to-date.txt | 31 -
.../templatesuite/expected/numerical-cast.txt | 462 --------
.../templatesuite/expected/output-encoding1.txt | 27 -
.../templatesuite/expected/output-encoding2.txt | Bin 1972 -> 0 bytes
.../templatesuite/expected/output-encoding3.txt | 26 -
.../test/templatesuite/expected/precedence.txt | 48 -
.../test/templatesuite/expected/recover.txt | 26 -
.../test/templatesuite/expected/root.txt | 44 -
.../expected/sequence-builtins.txt | 404 -------
.../test/templatesuite/expected/specialvars.txt | 25 -
.../string-builtins-regexps-matches.txt | 99 --
.../expected/string-builtins-regexps.txt | 112 --
.../templatesuite/expected/string-builtins1.txt | 112 --
.../templatesuite/expected/string-builtins2.txt | 135 ---
.../templatesuite/expected/stringbimethods.txt | 29 -
.../templatesuite/expected/stringliteral.txt | Bin 1550 -> 0 bytes
.../test/templatesuite/expected/switch.txt | 80 --
.../test/templatesuite/expected/transforms.txt | 68 --
.../templatesuite/expected/type-builtins.txt | 33 -
.../test/templatesuite/expected/var-layers.txt | 37 -
.../test/templatesuite/expected/varargs.txt | 44 -
.../test/templatesuite/expected/variables.txt | 62 -
.../templatesuite/expected/whitespace-trim.txt | 60 -
.../templatesuite/expected/wstrip-in-header.txt | 23 -
.../test/templatesuite/expected/wstripping.txt | 39 -
.../templatesuite/expected/xml-fragment.txt | 25 -
.../expected/xml-ns_prefix-scope.txt | 29 -
.../test/templatesuite/expected/xml.txt | 65 -
.../test/templatesuite/expected/xmlns1.txt | 63 -
.../test/templatesuite/expected/xmlns3.txt | 47 -
.../test/templatesuite/expected/xmlns4.txt | 47 -
.../test/templatesuite/expected/xmlns5.txt | 26 -
.../models/BeansTestResources.properties | 19 -
.../test/templatesuite/models/defaultxmlns1.xml | 24 -
.../models/xml-ns_prefix-scope.xml | 26 -
.../test/templatesuite/models/xml.xml | 31 -
.../test/templatesuite/models/xmlfragment.xml | 19 -
.../test/templatesuite/models/xmlns.xml | 32 -
.../test/templatesuite/models/xmlns2.xml | 32 -
.../test/templatesuite/models/xmlns3.xml | 32 -
.../templatesuite/templates/api-builtins.ftl | 40 -
.../test/templatesuite/templates/arithmetic.ftl | 50 -
.../templatesuite/templates/assignments.ftl | 108 --
.../templates/boolean-formatting.ftl | 82 --
.../test/templatesuite/templates/boolean.ftl | 142 ---
.../templates/charset-in-header.ftl | 27 -
.../templates/charset-in-header_inc1.ftl | 20 -
.../templates/charset-in-header_inc2.ftl | 19 -
.../test/templatesuite/templates/comment.ftl | 50 -
.../templatesuite/templates/comparisons.ftl | 218 ----
.../test/templatesuite/templates/compress.ftl | 59 -
.../templates/date-type-builtins.ftl | 47 -
.../templates/dateformat-iso-bi.ftl | 163 ---
.../templates/dateformat-iso-like.ftl | 155 ---
.../templatesuite/templates/dateformat-java.ftl | 71 --
.../templatesuite/templates/dateparsing.ftl | 84 --
.../templates/default-object-wrapper.ftl | 59 -
.../templatesuite/templates/default-xmlns.ftl | 28 -
.../test/templatesuite/templates/default.ftl | 34 -
.../templates/encoding-builtins.ftl | 52 -
.../test/templatesuite/templates/escapes.ftl | 79 --
.../test/templatesuite/templates/exception.ftl | 31 -
.../test/templatesuite/templates/exception2.ftl | 31 -
.../test/templatesuite/templates/exception3.ftl | 31 -
.../templates/existence-operators.ftl | 141 ---
.../test/templatesuite/templates/hashconcat.ftl | 60 -
.../templatesuite/templates/hashliteral.ftl | 100 --
.../test/templatesuite/templates/helloworld.ftl | 30 -
.../templates/identifier-escaping.ftl | 81 --
.../templates/identifier-non-ascii.ftl | 21 -
.../test/templatesuite/templates/if.ftl | 109 --
.../test/templatesuite/templates/import.ftl | 45 -
.../test/templatesuite/templates/import_lib.ftl | 31 -
.../test/templatesuite/templates/include.ftl | 47 -
.../templates/include2-included.ftl | 19 -
.../test/templatesuite/templates/include2.ftl | 32 -
.../test/templatesuite/templates/included.ftl | 30 -
.../test/templatesuite/templates/interpret.ftl | 25 -
.../test/templatesuite/templates/iterators.ftl | 71 --
.../templatesuite/templates/lastcharacter.ftl | 31 -
.../test/templatesuite/templates/list-bis.ftl | 48 -
.../test/templatesuite/templates/list.ftl | 44 -
.../test/templatesuite/templates/list2.ftl | 90 --
.../test/templatesuite/templates/list3.ftl | 70 --
.../test/templatesuite/templates/listhash.ftl | 70 --
.../templatesuite/templates/listhashliteral.ftl | 35 -
.../templatesuite/templates/listliteral.ftl | 84 --
.../templatesuite/templates/localization.ftl | 32 -
.../templatesuite/templates/localization_en.ftl | 32 -
.../templates/localization_en_AU.ftl | 32 -
.../test/templatesuite/templates/logging.ftl | 42 -
.../templatesuite/templates/loopvariable.ftl | 49 -
.../templatesuite/templates/macros-return.ftl | 34 -
.../test/templatesuite/templates/macros.ftl | 101 --
.../test/templatesuite/templates/macros2.ftl | 35 -
.../templatesuite/templates/multimodels.ftl | 84 --
.../test/templatesuite/templates/nested.ftl | 29 -
.../templatesuite/templates/nestedinclude.ftl | 21 -
.../templates/new-defaultresolver.ftl | 23 -
.../test/templatesuite/templates/new-optin.ftl | 30 -
.../test/templatesuite/templates/newlines1.ftl | 29 -
.../test/templatesuite/templates/newlines2.ftl | 33 -
.../test/templatesuite/templates/noparse.ftl | 62 -
.../templatesuite/templates/number-format.ftl | 42 -
.../templatesuite/templates/number-literal.ftl | 133 ---
.../templates/number-math-builtins.ftl | 78 --
.../templatesuite/templates/number-to-date.ftl | 35 -
.../templatesuite/templates/numerical-cast.ftl | 82 --
.../templates/output-encoding1.ftl | 30 -
.../templates/output-encoding2.ftl | 28 -
.../templates/output-encoding3.ftl | 28 -
.../templates/overloaded-methods.ftl | 411 -------
.../test/templatesuite/templates/precedence.ftl | 61 -
.../templatesuite/templates/range-common.ftl | 314 -----
.../test/templatesuite/templates/range.ftl | 50 -
.../test/templatesuite/templates/recover.ftl | 47 -
.../test/templatesuite/templates/root.ftl | 47 -
.../templates/sequence-builtins.ftl | 360 ------
.../test/templatesuite/templates/setting.ftl | 53 -
.../templates/simplehash-char-key.ftl | 44 -
.../templatesuite/templates/specialvars.ftl | 38 -
.../templates/string-builtin-coercion.ftl | 34 -
.../string-builtins-regexps-matches.ftl | 118 --
.../templates/string-builtins-regexps.ftl | 136 ---
.../templates/string-builtins1.ftl | 129 --
.../templates/string-builtins2.ftl | 135 ---
.../templates/string-builtins3.ftl | 225 ----
.../templatesuite/templates/stringbimethods.ftl | 36 -
.../templatesuite/templates/stringliteral.ftl | 69 --
.../templates/subdir/include-subdir.ftl | 27 -
.../templates/subdir/include-subdir2.ftl | 19 -
.../templates/subdir/new-optin-2.ftl | 24 -
.../templates/subdir/new-optin.ftl | 26 -
.../templates/subdir/subsub/new-optin.ftl | 24 -
.../templatesuite/templates/switch-builtin.ftl | 54 -
.../test/templatesuite/templates/switch.ftl | 139 ---
.../templatesuite/templates/then-builtin.ftl | 53 -
.../test/templatesuite/templates/transforms.ftl | 100 --
.../templatesuite/templates/type-builtins.ftl | 44 -
.../test/templatesuite/templates/undefined.ftl | 19 -
.../test/templatesuite/templates/url.ftl | 24 -
.../test/templatesuite/templates/var-layers.ftl | 39 -
.../test/templatesuite/templates/varargs.ftl | 45 -
.../test/templatesuite/templates/variables.ftl | 70 --
.../templatesuite/templates/varlayers_lib.ftl | 28 -
.../templatesuite/templates/whitespace-trim.ftl | 102 --
.../templates/wsstripinheader_inc.ftl | 22 -
.../templates/wstrip-in-header.ftl | 26 -
.../templatesuite/templates/xml-fragment.ftl | 26 -
.../templates/xml-ns_prefix-scope-lib.ftl | 23 -
.../templates/xml-ns_prefix-scope-main.ftl | 36 -
.../test/templatesuite/templates/xml.ftl | 47 -
.../test/templatesuite/templates/xmlns1.ftl | 53 -
.../test/templatesuite/templates/xmlns3.ftl | 70 --
.../test/templatesuite/templates/xmlns4.ftl | 70 --
.../test/templatesuite/templates/xmlns5.ftl | 28 -
.../freemarker/test/templatesuite/testcases.xml | 211 ----
freemarker-core/build.gradle | 8 -
.../freemarker/test/TemplateTestCase.java | 194 +++
.../freemarker/test/TemplateTestSuite.java | 332 ++++++
501 files changed, 17535 insertions(+), 17506 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index d9d7f7f..33fe1bf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -276,4 +276,4 @@ subprojects {
}
}
-} // end subprojects
\ No newline at end of file
+} // end subprojects
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/build.gradle
----------------------------------------------------------------------
diff --git a/freemarker-core-test/build.gradle b/freemarker-core-test/build.gradle
index 411f6ea..1edfe8f 100644
--- a/freemarker-core-test/build.gradle
+++ b/freemarker-core-test/build.gradle
@@ -5,6 +5,13 @@ through freemarker-test-utils, they had to be moved into a separate project."""
dependencies {
compile project(":freemarker-core")
compile project(":freemarker-test-utils")
+
+ testRuntime "jaxen:jaxen:1.0-FCS"
+ testRuntime "saxpath:saxpath:1.0-FCS"
+ testRuntime("xalan:xalan:2.7.0") {
+ // xml-apis is part of Java SE since version 1.4:
+ exclude group: "xml-apis", module: "xml-apis"
+ }
}
// We have nothing to put into the jar, as we have test classes only
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/ListErrorsTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ListErrorsTest.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ListErrorsTest.java
index 05bac4f..67d8f59 100644
--- a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ListErrorsTest.java
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ListErrorsTest.java
@@ -23,7 +23,7 @@ import java.io.IOException;
import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.templatesuite.models.Listables;
+import org.apache.freemarker.core.templatesuite.models.Listables;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/NewBiObjectWrapperRestrictionTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/NewBiObjectWrapperRestrictionTest.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/NewBiObjectWrapperRestrictionTest.java
index 506101d..a90e28b 100644
--- a/freemarker-core-test/src/test/java/org/apache/freemarker/core/NewBiObjectWrapperRestrictionTest.java
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/NewBiObjectWrapperRestrictionTest.java
@@ -50,14 +50,14 @@ public class NewBiObjectWrapperRestrictionTest extends TemplateTest {
@Test
public void testPositive() throws IOException, TemplateException {
assertOutput(
- "${'org.apache.freemarker.test.templatesuite.models.NewTestModel'?new()}",
+ "${'org.apache.freemarker.core.templatesuite.models.NewTestModel'?new()}",
"default constructor");
}
@Test
public void testNegative() {
assertErrorContains(
- "${'org.apache.freemarker.test.templatesuite.models.NewTestModel'?new('s')}",
+ "${'org.apache.freemarker.core.templatesuite.models.NewTestModel'?new('s')}",
"only supports 0 argument");
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/CoreTemplateTestSuite.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/CoreTemplateTestSuite.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/CoreTemplateTestSuite.java
new file mode 100644
index 0000000..b49c213
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/CoreTemplateTestSuite.java
@@ -0,0 +1,282 @@
+package org.apache.freemarker.core.templatesuite;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TimeZone;
+import java.util.TreeSet;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.freemarker.core.ASTPrinter;
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.Template;
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateDateModel;
+import org.apache.freemarker.core.model.impl.DefaultNonListCollectionAdapter;
+import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
+import org.apache.freemarker.core.model.impl.ResourceBundleModel;
+import org.apache.freemarker.core.model.impl.SimpleCollection;
+import org.apache.freemarker.core.model.impl.SimpleDate;
+import org.apache.freemarker.core.model.impl.SimpleNumber;
+import org.apache.freemarker.core.templatesuite.models.BooleanAndStringTemplateModel;
+import org.apache.freemarker.core.templatesuite.models.BooleanHash1;
+import org.apache.freemarker.core.templatesuite.models.BooleanHash2;
+import org.apache.freemarker.core.templatesuite.models.BooleanList1;
+import org.apache.freemarker.core.templatesuite.models.BooleanList2;
+import org.apache.freemarker.core.templatesuite.models.BooleanVsStringMethods;
+import org.apache.freemarker.core.templatesuite.models.JavaObjectInfo;
+import org.apache.freemarker.core.templatesuite.models.Listables;
+import org.apache.freemarker.core.templatesuite.models.MultiModel1;
+import org.apache.freemarker.core.templatesuite.models.OverloadedMethods2;
+import org.apache.freemarker.core.templatesuite.models.TestBean;
+import org.apache.freemarker.core.templatesuite.models.TestBoolean;
+import org.apache.freemarker.core.templatesuite.models.TestMethod;
+import org.apache.freemarker.core.templatesuite.models.TestNode;
+import org.apache.freemarker.core.templatesuite.models.VarArgTestModel;
+import org.apache.freemarker.dom.NodeModel;
+import org.apache.freemarker.test.TemplateTestSuite;
+import org.apache.freemarker.test.XMLLoader;
+import org.xml.sax.InputSource;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+import junit.framework.TestSuite;
+
+public class CoreTemplateTestSuite extends TemplateTestSuite {
+
+ private final DefaultObjectWrapper dow = new DefaultObjectWrapper.Builder(Configuration.VERSION_3_0_0).build();
+
+ /**
+ * Required for the suite to be detected and run by build tools and IDE-s.
+ */
+ public static TestSuite suite() {
+ return new CoreTemplateTestSuite();
+ }
+
+ @Override
+ protected void setUpTestCase(String simpleTestName, Map<String, Object> dataModel,
+ Configuration.ExtendableBuilder<?> confB) throws Exception {
+ dataModel.put("message", "Hello, world!");
+ dataModel.put("javaObjectInfo", JavaObjectInfo.INSTANCE);
+
+ if (simpleTestName.startsWith("api-builtin")) {
+ dataModel.put("map", ImmutableMap.of(1, "a", 2, "b", 3, "c"));
+ dataModel.put("list", ImmutableList.of(1, 2, 3));
+ dataModel.put("set", ImmutableSet.of("a", "b", "c"));
+ dataModel.put("s", "test");
+ } else if (simpleTestName.equals("default-object-wrapper")) {
+ dataModel.put("array", new String[] { "array-0", "array-1"});
+ dataModel.put("list", Arrays.asList("list-0", "list-1", "list-2"));
+ Map<Object, Object> tmap = new HashMap<>();
+ tmap.put("key", "value");
+ Object objKey = new Object();
+ tmap.put(objKey, "objValue");
+ dataModel.put("map", tmap);
+ dataModel.put("objKey", objKey);
+ dataModel.put("obj", new org.apache.freemarker.core.templatesuite.models.BeanTestClass());
+ dataModel.put("resourceBundle",
+ new ResourceBundleModel(ResourceBundle.getBundle(
+ "org.apache.freemarker.core.templatesuite.models.BeansTestResources"), dow));
+ dataModel.put("date", new GregorianCalendar(1974, 10, 14).getTime());
+ dataModel.put("statics", dow.getStaticModels());
+ dataModel.put("enums", dow.getEnumModels());
+ } else if (simpleTestName.equals("boolean")) {
+ dataModel.put( "boolean1", TemplateBooleanModel.FALSE);
+ dataModel.put( "boolean2", TemplateBooleanModel.TRUE);
+ dataModel.put( "boolean3", TemplateBooleanModel.TRUE);
+ dataModel.put( "boolean4", TemplateBooleanModel.TRUE);
+ dataModel.put( "boolean5", TemplateBooleanModel.FALSE);
+
+ dataModel.put( "list1", new BooleanList1(dow) );
+ dataModel.put( "list2", new BooleanList2(dow) );
+
+ dataModel.put( "hash1", new BooleanHash1() );
+ dataModel.put( "hash2", new BooleanHash2() );
+ } else if (simpleTestName.startsWith("dateformat")) {
+ GregorianCalendar cal = new GregorianCalendar(2002, 10, 15, 14, 54, 13);
+ cal.setTimeZone(TimeZone.getTimeZone("GMT"));
+ dataModel.put("date", new SimpleDate(cal.getTime(), TemplateDateModel.DATETIME));
+ dataModel.put("unknownDate", new SimpleDate(cal.getTime(), TemplateDateModel.UNKNOWN));
+ dataModel.put("javaGMT02", TimeZone.getTimeZone("GMT+02"));
+ dataModel.put("javaUTC", TimeZone.getTimeZone("UTC"));
+ dataModel.put("adaptedToStringScalar", new Object() {
+ @Override
+ public String toString() {
+ return "GMT+02";
+ }
+ });
+ dataModel.put("sqlDate", new java.sql.Date(1273955885023L));
+ dataModel.put("sqlTime", new java.sql.Time(74285023L));
+ } else if (simpleTestName.startsWith("list-") || simpleTestName.startsWith("list[")
+ || simpleTestName.startsWith("list2[") || simpleTestName.startsWith("list3[")
+ || simpleTestName.equals("listhash")) {
+ dataModel.put("listables", new Listables());
+ } else if (simpleTestName.startsWith("number-format")) {
+ dataModel.put("int", new SimpleNumber(Integer.valueOf(1)));
+ dataModel.put("double", new SimpleNumber(Double.valueOf(1.0)));
+ dataModel.put("double2", new SimpleNumber(Double.valueOf(1 + 1e-15)));
+ dataModel.put("double3", new SimpleNumber(Double.valueOf(1e-16)));
+ dataModel.put("double4", new SimpleNumber(Double.valueOf(-1e-16)));
+ dataModel.put("bigDecimal", new SimpleNumber(java.math.BigDecimal.valueOf(1)));
+ dataModel.put("bigDecimal2", new SimpleNumber(java.math.BigDecimal.valueOf(1, 16)));
+ } else if (simpleTestName.equals("simplehash-char-key")) {
+ HashMap<String, String> mStringC = new HashMap<>();
+ mStringC.put("c", "string");
+ dataModel.put("mStringC", mStringC);
+
+ HashMap<String, String> mStringCNull = new HashMap<>();
+ mStringCNull.put("c", null);
+ dataModel.put("mStringCNull", mStringCNull);
+
+ HashMap<Character, String> mCharC = new HashMap<>();
+ mCharC.put(Character.valueOf('c'), "char");
+ dataModel.put("mCharC", mCharC);
+
+ HashMap<String, String> mCharCNull = new HashMap<>();
+ mCharCNull.put("c", null);
+ dataModel.put("mCharCNull", mCharCNull);
+
+ HashMap<Object, String> mMixed = new HashMap<>();
+ mMixed.put(Character.valueOf('c'), "char");
+ mMixed.put("s", "string");
+ mMixed.put("s2", "string2");
+ mMixed.put("s2n", null);
+ dataModel.put("mMixed", mMixed);
+ } else if (simpleTestName.equals("default-xmlns")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/defaultxmlns1.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.equals("multimodels")) {
+ dataModel.put("test", "selftest");
+ dataModel.put("self", "self");
+ dataModel.put("zero", Integer.valueOf(0));
+ dataModel.put("data", new MultiModel1());
+ } else if (simpleTestName.equals("stringbimethods")) {
+ dataModel.put("multi", new TestBoolean());
+ } else if (simpleTestName.startsWith("type-builtins")) {
+ dataModel.put("testmethod", new TestMethod());
+ dataModel.put("testnode", new TestNode());
+ dataModel.put("testcollection", new SimpleCollection(new ArrayList<>(), dow));
+ dataModel.put("testcollectionEx", DefaultNonListCollectionAdapter.adapt(new HashSet<>(), dow));
+ dataModel.put("bean", new TestBean());
+ } else if (simpleTestName.equals("date-type-builtins")) {
+ GregorianCalendar cal = new GregorianCalendar(2003, 4 - 1, 5, 6, 7, 8);
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date d = cal.getTime();
+ dataModel.put("unknown", d);
+ dataModel.put("timeOnly", new java.sql.Time(d.getTime()));
+ dataModel.put("dateOnly", new java.sql.Date(d.getTime()));
+ dataModel.put("dateTime", new java.sql.Timestamp(d.getTime()));
+ } else if (simpleTestName.equals("var-layers")) {
+ dataModel.put("x", Integer.valueOf(4));
+ dataModel.put("z", Integer.valueOf(4));
+ confB.setSharedVariable("y", Integer.valueOf(7));
+ } else if (simpleTestName.equals("xml-fragment")) {
+ DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
+ f.setNamespaceAware(true);
+ DocumentBuilder db = f.newDocumentBuilder();
+ org.w3c.dom.Document doc = db.parse(new InputSource(getClass().getResourceAsStream("models/xmlfragment.xml")));
+ NodeModel.simplify(doc);
+ dataModel.put("node", NodeModel.wrap(doc.getDocumentElement().getFirstChild().getFirstChild()));
+ } else if (simpleTestName.equals("xmlns1")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.equals("xmlns2")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns2.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.equals("xmlns3") || simpleTestName.equals("xmlns4")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns3.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.equals("xmlns5")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/defaultxmlns1.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.equals("xml-ns_prefix-scope")) {
+ InputSource is = new InputSource(getClass().getResourceAsStream("models/xml-ns_prefix-scope.xml"));
+ NodeModel nm = XMLLoader.toModel(is);
+ dataModel.put("doc", nm);
+ } else if (simpleTestName.startsWith("sequence-builtins")) {
+ Set<String> abcSet = new TreeSet<>();
+ abcSet.add("a");
+ abcSet.add("b");
+ abcSet.add("c");
+ dataModel.put("abcSet", abcSet);
+ dataModel.put("abcSetNonSeq", DefaultNonListCollectionAdapter.adapt(abcSet, dow));
+
+ List<String> listWithNull = new ArrayList<>();
+ listWithNull.add("a");
+ listWithNull.add(null);
+ listWithNull.add("c");
+ dataModel.put("listWithNull", listWithNull);
+
+ List<String> listWithNullsOnly = new ArrayList<>();
+ listWithNull.add(null);
+ listWithNull.add(null);
+ listWithNull.add(null);
+ dataModel.put("listWithNullsOnly", listWithNullsOnly);
+
+ dataModel.put("abcCollection", new SimpleCollection(abcSet, dow));
+
+ Set<String> set = new HashSet<>();
+ set.add("a");
+ set.add("b");
+ set.add("c");
+ dataModel.put("set", set);
+ } else if (simpleTestName.equals("number-to-date")) {
+ dataModel.put("bigInteger", new BigInteger("1305575275540"));
+ dataModel.put("bigDecimal", new BigDecimal("1305575275539.5"));
+ } else if (simpleTestName.equals("varargs")) {
+ dataModel.put("m", new VarArgTestModel());
+ } else if (simpleTestName.startsWith("boolean-formatting")) {
+ dataModel.put("booleanAndString", new BooleanAndStringTemplateModel());
+ dataModel.put("booleanVsStringMethods", new BooleanVsStringMethods());
+ } else if (simpleTestName.startsWith("number-math-builtins")) {
+ dataModel.put("fNan", Float.valueOf(Float.NaN));
+ dataModel.put("dNan", Double.valueOf(Double.NaN));
+ dataModel.put("fNinf", Float.valueOf(Float.NEGATIVE_INFINITY));
+ dataModel.put("dPinf", Double.valueOf(Double.POSITIVE_INFINITY));
+
+ dataModel.put("fn", Float.valueOf(-0.05f));
+ dataModel.put("dn", Double.valueOf(-0.05));
+ dataModel.put("ineg", Integer.valueOf(-5));
+ dataModel.put("ln", Long.valueOf(-5));
+ dataModel.put("sn", Short.valueOf((short) -5));
+ dataModel.put("bn", Byte.valueOf((byte) -5));
+ dataModel.put("bin", BigInteger.valueOf(5));
+ dataModel.put("bdn", BigDecimal.valueOf(-0.05));
+
+ dataModel.put("fp", Float.valueOf(0.05f));
+ dataModel.put("dp", Double.valueOf(0.05));
+ dataModel.put("ip", Integer.valueOf(5));
+ dataModel.put("lp", Long.valueOf(5));
+ dataModel.put("sp", Short.valueOf((short) 5));
+ dataModel.put("bp", Byte.valueOf((byte) 5));
+ dataModel.put("bip", BigInteger.valueOf(5));
+ dataModel.put("bdp", BigDecimal.valueOf(0.05));
+ } else if (simpleTestName.startsWith("overloaded-methods")) {
+ dataModel.put("obj", new OverloadedMethods2());
+ }
+ }
+
+ @Override
+ protected void validateTemplate(Template template) {
+ ASTPrinter.validateAST(template);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/AllTemplateModels.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/AllTemplateModels.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/AllTemplateModels.java
new file mode 100644
index 0000000..d656a6b
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/AllTemplateModels.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import java.util.Date;
+
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateCollectionModel;
+import org.apache.freemarker.core.model.TemplateDateModel;
+import org.apache.freemarker.core.model.TemplateHashModelEx;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateModelIterator;
+import org.apache.freemarker.core.model.TemplateNumberModel;
+import org.apache.freemarker.core.model.TemplateScalarModel;
+import org.apache.freemarker.core.model.TemplateSequenceModel;
+import org.apache.freemarker.core.model.impl.SimpleScalar;
+
+/**
+ * Implements all template models that are interesting when calling overloaded Java methods.
+ */
+public class AllTemplateModels implements
+ TemplateScalarModel, TemplateNumberModel, TemplateDateModel, TemplateBooleanModel,
+ TemplateHashModelEx, TemplateSequenceModel, TemplateCollectionModel {
+
+ public static final AllTemplateModels INSTANCE = new AllTemplateModels();
+
+ private final TemplateModelIterator EMPTY_ITERATOR = new TemplateModelIterator() {
+
+ @Override
+ public TemplateModel next() throws TemplateModelException {
+ return null;
+ }
+
+ @Override
+ public boolean hasNext() throws TemplateModelException {
+ return false;
+ }
+
+ };
+
+ private final TemplateCollectionModel EMPTY_COLLECTION = new TemplateCollectionModel() {
+
+ @Override
+ public TemplateModelIterator iterator() throws TemplateModelException {
+ return EMPTY_ITERATOR;
+ }
+ };
+
+ @Override
+ public TemplateModel get(String key) throws TemplateModelException {
+ return new SimpleScalar("value for key " + key);
+ }
+
+ @Override
+ public boolean isEmpty() throws TemplateModelException {
+ return true;
+ }
+
+ @Override
+ public TemplateModelIterator iterator() throws TemplateModelException {
+ return EMPTY_ITERATOR;
+ }
+
+ @Override
+ public TemplateModel get(int index) throws TemplateModelException {
+ return null;
+ }
+
+ @Override
+ public int size() throws TemplateModelException {
+ return 0;
+ }
+
+ @Override
+ public TemplateCollectionModel keys() throws TemplateModelException {
+ return EMPTY_COLLECTION;
+ }
+
+ @Override
+ public TemplateCollectionModel values() throws TemplateModelException {
+ return EMPTY_COLLECTION;
+ }
+
+ @Override
+ public boolean getAsBoolean() throws TemplateModelException {
+ return true;
+ }
+
+ @Override
+ public Date getAsDate() throws TemplateModelException {
+ return new Date(0);
+ }
+
+ @Override
+ public int getDateType() {
+ return TemplateDateModel.DATETIME;
+ }
+
+ @Override
+ @SuppressWarnings("boxing")
+ public Number getAsNumber() throws TemplateModelException {
+ return 1;
+ }
+
+ @Override
+ public String getAsString() throws TemplateModelException {
+ return "s";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestClass.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestClass.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestClass.java
new file mode 100644
index 0000000..88541ae
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestClass.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+/**
+ */
+public class BeanTestClass extends BeanTestSuperclass implements BeanTestInterface<Integer> {
+ public static final String STATIC_FINAL_FIELD = "static-final-field";
+ public static String STATIC_FIELD = "static-field";
+
+ public String getFoo() {
+ return "foo-value";
+ }
+
+ public String getBar(int index) {
+ return "bar-value-" + index;
+ }
+
+ public String[] getBar() {
+ return new String[] { "bar-value-0", "bar-value-1", "bar-value-2" };
+ }
+
+ public String overloaded(int i) {
+ return "overloaded-int-" + i;
+ }
+
+ public String overloaded(String s) {
+ return "overloaded-String-" + s;
+ }
+
+ public static String staticMethod() {
+ return "static-method";
+ }
+
+ public static String staticOverloaded(int i) {
+ return "static-overloaded-int-" + i;
+ }
+
+ public static String staticOverloaded(String s) {
+ return "static-overloaded-String-" + s;
+ }
+
+ public PrivateInner getPrivateInner() {
+ return new PrivateInner();
+ }
+
+ public PublicInner getPublicInner() {
+ return new PublicInner();
+ }
+
+ public class PublicInner {
+
+ public int getX() {
+ return 1;
+ }
+
+ public String m() {
+ return "m";
+ }
+
+ }
+
+ @SuppressWarnings("unused")
+ private class PrivateInner {
+
+ public int getX() {
+ return 2;
+ }
+
+ public String m() {
+ return "M";
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestInterface.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestInterface.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestInterface.java
new file mode 100644
index 0000000..291b0cd
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestInterface.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+public interface BeanTestInterface<T> {
+ T getSomething();
+ void setSomething(T s);
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestSuperclass.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestSuperclass.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestSuperclass.java
new file mode 100644
index 0000000..1a689ab
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BeanTestSuperclass.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+public class BeanTestSuperclass {
+ public Integer getSomething() {
+ return 42;
+ }
+
+ public void setSomething(Integer x) {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndScalarModel.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndScalarModel.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndScalarModel.java
new file mode 100644
index 0000000..12e5f3d
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndScalarModel.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateScalarModel;
+
+public class BooleanAndScalarModel implements TemplateBooleanModel, TemplateScalarModel {
+
+ public static final BooleanAndScalarModel INSTANCE = new BooleanAndScalarModel();
+
+ @Override
+ public String getAsString() throws TemplateModelException {
+ return "s";
+ }
+
+ @Override
+ public boolean getAsBoolean() throws TemplateModelException {
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndStringTemplateModel.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndStringTemplateModel.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndStringTemplateModel.java
new file mode 100644
index 0000000..accf649
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanAndStringTemplateModel.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateScalarModel;
+
+public class BooleanAndStringTemplateModel implements TemplateBooleanModel, TemplateScalarModel {
+
+ @Override
+ public String getAsString() throws TemplateModelException {
+ return "theStringValue";
+ }
+
+ @Override
+ public boolean getAsBoolean() throws TemplateModelException {
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash1.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash1.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash1.java
new file mode 100644
index 0000000..a143cbc
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash1.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateHashModel;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.impl.SimpleScalar;
+
+/**
+ * Tests the impact that the isEmpty() has on template hash models.
+ */
+public class BooleanHash1 implements TemplateHashModel {
+
+ /**
+ * Gets a <tt>TemplateModel</tt> from the hash.
+ *
+ * @param key the name by which the <tt>TemplateModel</tt>
+ * is identified in the template.
+ * @return the <tt>TemplateModel</tt> referred to by the key,
+ * or null if not found.
+ */
+ @Override
+ public TemplateModel get(String key) {
+ if ( key.equals( "temp" )) {
+ return new SimpleScalar( "Hello, world." );
+ } else if ( key.equals( "boolean" )) {
+ return TemplateBooleanModel.FALSE;
+ } else {
+ return new SimpleScalar( "Just another key..." );
+ }
+ }
+
+ /**
+ * @return true if this object is empty.
+ */
+ @Override
+ public boolean isEmpty() {
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash2.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash2.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash2.java
new file mode 100644
index 0000000..070b3e2
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanHash2.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateHashModel;
+import org.apache.freemarker.core.model.TemplateModel;
+
+/**
+ * Tests the impact that the isEmpty() has on template hash models.
+ */
+public class BooleanHash2 implements TemplateHashModel {
+
+ /**
+ * Gets a <tt>TemplateModel</tt> from the hash.
+ *
+ * @param key the name by which the <tt>TemplateModel</tt>
+ * is identified in the template.
+ * @return the <tt>TemplateModel</tt> referred to by the key,
+ * or null if not found.
+ */
+ @Override
+ public TemplateModel get(String key) {
+ return null;
+ }
+
+ /**
+ * @return true if this object is empty.
+ */
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList1.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList1.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList1.java
new file mode 100644
index 0000000..5022f68
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList1.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.TemplateBooleanModel;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateSequenceModel;
+import org.apache.freemarker.core.model.impl.SimpleSequence;
+
+/**
+ * Model for testing the impact of isEmpty() on template list models. Every
+ * other method simply delegates to a SimpleList model.
+ */
+public class BooleanList1 implements TemplateSequenceModel {
+
+ private SimpleSequence cList;
+
+ /** Creates new BooleanList1 */
+ public BooleanList1(ObjectWrapper ow) {
+ cList = new SimpleSequence(ow);
+ cList.add( "false" );
+ cList.add( "0" );
+ cList.add(TemplateBooleanModel.FALSE);
+ cList.add(TemplateBooleanModel.TRUE);
+ cList.add(TemplateBooleanModel.TRUE);
+ cList.add(TemplateBooleanModel.TRUE);
+ cList.add(TemplateBooleanModel.FALSE);
+ }
+
+ /**
+ * @return the specified index in the list
+ */
+ @Override
+ public TemplateModel get(int i) throws TemplateModelException {
+ return cList.get(i);
+ }
+
+ @Override
+ public int size() {
+ return cList.size();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList2.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList2.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList2.java
new file mode 100644
index 0000000..2d7667e
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanList2.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateSequenceModel;
+import org.apache.freemarker.core.model.impl.SimpleSequence;
+
+/**
+ * Model for testing list models. Every
+ * other method simply delegates to a SimpleList model.
+ */
+public class BooleanList2 implements TemplateSequenceModel {
+
+ private SimpleSequence cList;
+
+ /** Creates new BooleanList2 */
+ public BooleanList2(ObjectWrapper ow) {
+ cList = new SimpleSequence(ow);
+ }
+
+ /**
+ * @return the specified index in the list
+ */
+ @Override
+ public TemplateModel get(int i) throws TemplateModelException {
+ return cList.get(i);
+ }
+
+ @Override
+ public int size() {
+ return cList.size();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanVsStringMethods.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanVsStringMethods.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanVsStringMethods.java
new file mode 100644
index 0000000..45c0542
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/BooleanVsStringMethods.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+public class BooleanVsStringMethods {
+
+ public String expectsString(String s) {
+ return s;
+ }
+
+ public boolean expectsBoolean(boolean b) {
+ return b;
+ }
+
+ public String overloaded(String s) {
+ return "String " + s;
+ }
+
+ public String overloaded(boolean s) {
+ return "boolean " + s;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/EnumTestClass.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/EnumTestClass.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/EnumTestClass.java
new file mode 100644
index 0000000..5ad85f5
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/EnumTestClass.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+/**
+ */
+public enum EnumTestClass
+{
+ ONE,
+ TWO,
+ THREE;
+
+ @Override
+ public String toString() {
+ return name() + "x";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/ExceptionModel.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/ExceptionModel.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/ExceptionModel.java
new file mode 100644
index 0000000..940579a
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/ExceptionModel.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateScalarModel;
+
+/**
+ * A template that always throws an exception whenever we call getAsString()
+ */
+public class ExceptionModel implements TemplateScalarModel {
+
+ /**
+ * Returns the scalar's value as a String.
+ *
+ * @return the String value of this scalar.
+ */
+ @Override
+ public String getAsString () throws TemplateModelException {
+ throw new TemplateModelException( "Throwing from ExceptionModel!" );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/HashAndScalarModel.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/HashAndScalarModel.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/HashAndScalarModel.java
new file mode 100644
index 0000000..a5869a2
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/HashAndScalarModel.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.model.TemplateCollectionModel;
+import org.apache.freemarker.core.model.TemplateHashModelEx;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateModelIterator;
+import org.apache.freemarker.core.model.TemplateScalarModel;
+import org.apache.freemarker.core.model.impl.SimpleScalar;
+
+public class HashAndScalarModel implements TemplateHashModelEx, TemplateScalarModel {
+
+ public static final HashAndScalarModel INSTANCE = new HashAndScalarModel();
+
+ private final TemplateCollectionModel EMPTY_COLLECTION = new TemplateCollectionModel() {
+
+ @Override
+ public TemplateModelIterator iterator() throws TemplateModelException {
+ return new TemplateModelIterator() {
+
+ @Override
+ public TemplateModel next() throws TemplateModelException {
+ return null;
+ }
+
+ @Override
+ public boolean hasNext() throws TemplateModelException {
+ return false;
+ }
+
+ };
+ }
+ };
+
+ @Override
+ public String getAsString() throws TemplateModelException {
+ return "scalarValue";
+ }
+
+ @Override
+ public TemplateModel get(String key) throws TemplateModelException {
+ return new SimpleScalar("mapValue for " + key);
+ }
+
+ @Override
+ public boolean isEmpty() throws TemplateModelException {
+ return true;
+ }
+
+ @Override
+ public int size() throws TemplateModelException {
+ return 0;
+ }
+
+ @Override
+ public TemplateCollectionModel keys() throws TemplateModelException {
+ return EMPTY_COLLECTION;
+ }
+
+ @Override
+ public TemplateCollectionModel values() throws TemplateModelException {
+ return EMPTY_COLLECTION;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4b75ea93/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/JavaObjectInfo.java
----------------------------------------------------------------------
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/JavaObjectInfo.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/JavaObjectInfo.java
new file mode 100644
index 0000000..aa6d618
--- /dev/null
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/templatesuite/models/JavaObjectInfo.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.templatesuite.models;
+
+import org.apache.freemarker.core.util._StringUtil;
+
+public class JavaObjectInfo {
+
+ public static final Object INSTANCE = new JavaObjectInfo();
+
+ private JavaObjectInfo() { }
+
+ public String info(Object o) {
+ if (o == null) return "null";
+ return o.getClass().getName() + " " + _StringUtil.jQuote(o.toString());
+ }
+
+}