Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java?rev=1695126&r1=1695125&r2=1695126&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java Mon Aug 10 16:15:37 2015 @@ -1,340 +1,340 @@ -/******************************************************************************* - * 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.ofbiz.base.util.string.test; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.TimeZone; - -import junit.framework.TestCase; - -import org.ofbiz.base.lang.SourceMonitored; -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.string.FlexibleStringExpander; -import org.ofbiz.base.conversion.AbstractConverter; -import org.ofbiz.base.conversion.ConversionException; -import org.ofbiz.base.conversion.Converters; - -@SourceMonitored -public class FlexibleStringExpanderTests extends TestCase { - private static final Locale localeToTest = new Locale("en", "US"); - private static final Locale badLocale = new Locale("fr"); - private static final TimeZone timeZoneToTest = TimeZone.getTimeZone("PST"); - private static final TimeZone badTimeZone = TimeZone.getTimeZone("GMT"); - - private boolean wasVerbose; - - public FlexibleStringExpanderTests(String name) { - super(name); - } - - private static void parserTest(String label, String input, boolean checkCache, String toString) { - FlexibleStringExpander fse = FlexibleStringExpander.getInstance(input, false); - //System.err.println("fse(" + fse + ").class=" + fse.getClass()); - assertEquals(label + ":toString(no-cache)", toString, fse.toString()); - fse = FlexibleStringExpander.getInstance(input, true); - assertEquals(label + ":toString(cache)", toString, fse.toString()); - if (checkCache) { - assertEquals(label + ":same-cache", fse, FlexibleStringExpander.getInstance(input, true)); - } - } - - public void testParsing() { - parserTest("visible nested replacement", "${'Hello ${var}'}!", true, "${'Hello ${var}'}!"); - parserTest("hidden (runtime) nested null callreplacement", "Hello ${${groovy:" + FlexibleStringExpanderTests.class.getName() + ".StaticReturnNull()}}World!", true, "Hello ${${groovy:" + FlexibleStringExpanderTests.class.getName() + ".StaticReturnNull()}}World!"); - parserTest("UEL integration(nested): throw Exception", "${${throwException.value}}", true, "${${throwException.value}}"); - parserTest("nested-constant-emptynest-emptynest", "${a${}${}", true, "${a${}${}"); - parserTest("null", null, true, ""); - parserTest("empty", "", true, ""); - parserTest("constant-only", "a", false, "a"); - parserTest("nested-constant-emptynest-emptynest", "${a${}${}", true, "${a${}${}"); - parserTest("bsh", "${bsh:}", true, "${bsh:}"); - parserTest("groovy", "${groovy:}", true, "${groovy:}"); - - parserTest("escaped", "\\${}", true, "\\${}"); - parserTest("constant-escaped", "a\\${}", true, "a\\${}"); - parserTest("escaped-bsd", "\\${bsh:}", true, "\\${bsh:}"); - parserTest("escaped-groovy", "\\${groovy:}", true, "\\${groovy:}"); - - parserTest("missing-}", "${", true, "${"); - parserTest("nested-constant-missing-}", "${a${}", true, "${a${}"); - parserTest("nested-constant-nested-nested-missing-}", "${a${${}", true, "${a${${}"); - parserTest("escaped-missing-}", "\\${", true, "\\${"); - parserTest("constant-escaped-missing-}", "a\\${", true, "a\\${"); - - parserTest("currency", "${?currency(", true, "${?currency("); - parserTest("currency", "${?currency()", true, "${?currency()"); - parserTest("currency", "${price?currency(", true, "${price?currency("); - parserTest("currency", "${price?currency()", true, "${price?currency()"); - parserTest("currency", "${?currency(usd", true, "${?currency(usd"); - parserTest("currency", "${?currency(usd)", true, "${?currency(usd)"); - parserTest("currency", "${price?currency(usd", true, "${price?currency(usd"); - parserTest("currency", "${price?currency(usd)", true, "${price?currency(usd)"); - parserTest("currency", "${?currency(}", true, "${?currency(}"); - parserTest("currency", "${?currency()}", true, "${?currency()}"); - parserTest("currency", "${?currency(usd}", true, "${?currency(usd}"); - parserTest("currency", "${?currency(usd)}", true, "${?currency(usd)}"); - parserTest("currency", "${price?currency(}", true, "${price?currency(}"); - parserTest("currency", "${price?currency()}", true, "${price?currency()}"); - parserTest("currency", "${price?currency(usd}", true, "${price?currency(usd}"); - parserTest("currency", "${price?currency(usd)}", true, "${price?currency(usd)}"); - parserTest("currency", "a${price?currency(usd)}b", true, "a${price?currency(usd)}b"); - } - - private static void fseTest(String label, String input, Map<String, Object> context, String compare, boolean isEmpty) { - fseTest(label, input, context, null, null, compare, isEmpty); - } - - private static void doFseTest(String label, String input, FlexibleStringExpander fse, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, Object expand, boolean isEmpty) { - assertEquals("isEmpty:" + label, isEmpty, fse.isEmpty()); - if (input == null) { - assertEquals("getOriginal():" + label, "", fse.getOriginal()); - assertEquals("toString():" + label, "", fse.toString()); - assertEquals("expandString(null):" + label, "", fse.expandString(null)); - assertEquals("expand(null):" + label, null, fse.expand(null)); - if (timeZone == null) { - assertEquals("expandString(null):" + label, "", fse.expandString(null, locale)); - assertEquals("expand(null):" + label, null, fse.expand(null, locale)); - } else { - assertEquals("expandString(null):" + label, "", fse.expandString(null, timeZone, locale)); - assertEquals("expand(null):" + label, null, fse.expand(null, timeZone, locale)); - } - } else { - assertEquals("getOriginal():" + label, input, fse.getOriginal()); - assertEquals("toString():" + label, input, fse.toString()); - assertEquals("expandString(null):" + label, input, fse.expandString(null)); - assertEquals("expand(null):" + label, null, fse.expand(null)); - if (timeZone == null) { - assertEquals("expandString(null):" + label, input, fse.expandString(null, locale)); - assertEquals("expand(null):" + label, null, fse.expand(null, locale)); - } else { - assertEquals("expandString(null):" + label, input, fse.expandString(null, timeZone, locale)); - assertEquals("expand(null):" + label, null, fse.expand(null, timeZone, locale)); - } - } - if (locale == null) { - assertEquals(label, compare, fse.expandString(context)); - assertEquals("expand:" + label, expand, fse.expand(context)); - } else { - Locale defaultLocale = Locale.getDefault(); - TimeZone defaultTimeZone = TimeZone.getDefault(); - try { - Locale.setDefault(locale); - TimeZone.setDefault(timeZone); - assertEquals(label, compare, fse.expandString(context, null, null)); - assertEquals(label, expand, fse.expand(context, null, null)); - Locale.setDefault(badLocale); - TimeZone.setDefault(badTimeZone); - assertNotSame(label, compare, fse.expandString(context, null, null)); - if (input != null) { - assertNotSame(label, expand, fse.expand(context, null, null)); - } - Map<String, Object> autoUserLogin = new HashMap<String, Object>(); - autoUserLogin.put("lastLocale", locale.toString()); - autoUserLogin.put("lastTimeZone", timeZone == null ? null : timeZone.getID()); - context.put("autoUserLogin", autoUserLogin); - assertEquals(label, compare, fse.expandString(context, null, null)); - assertEquals(label, expand, fse.expand(context, null, null)); - autoUserLogin.put("lastLocale", badLocale.toString()); - autoUserLogin.put("lastTimeZone", badTimeZone.getID()); - assertNotSame(label, compare, fse.expandString(context, null, null)); - if (input != null) { - assertNotSame(label, expand, fse.expand(context, null, null)); - } - context.remove("autoUserLogin"); - context.put("locale", locale); - context.put("timeZone", timeZone); - assertEquals(label, compare, fse.expandString(context, null, null)); - assertEquals(label, expand, fse.expand(context, null, null)); - context.put("locale", badLocale); - context.put("timeZone", badTimeZone); - assertNotSame(label, compare, fse.expandString(context, null, null)); - if (input != null) { - assertNotSame(label, expand, fse.expand(context, null, null)); - } - context.remove("locale"); - context.remove("timeZone"); - assertEquals(label, compare, fse.expandString(context, timeZone, locale)); - assertEquals(label, expand, fse.expand(context, timeZone, locale)); - assertNotSame(label, compare, fse.expandString(context, badTimeZone, badLocale)); - if (input != null) { - assertNotSame(label, expand, fse.expand(context, badTimeZone, badLocale)); - } - } finally { - Locale.setDefault(defaultLocale); - TimeZone.setDefault(defaultTimeZone); - } - } - } - - private static void fseTest(String label, String input, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, boolean isEmpty) { - fseTest(label, input, context, timeZone, locale, compare, compare, isEmpty); - } - - private static void fseTest(String label, String input, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, Object expand, boolean isEmpty) { - FlexibleStringExpander fse = FlexibleStringExpander.getInstance(input); - doFseTest(label, input, fse, context, timeZone, locale, compare, expand, isEmpty); - assertEquals("static expandString:" + label, compare, FlexibleStringExpander.expandString(input, context, timeZone, locale)); - if (input == null) { - assertEquals("static expandString(null, null):" + label, "", FlexibleStringExpander.expandString(input, null)); - assertEquals("static expandString(null, null):" + label, "", FlexibleStringExpander.expandString(input, null, locale)); - } else { - assertEquals("static expandString(input, null):" + label, input, FlexibleStringExpander.expandString(input, null)); - assertEquals("static expandString(input, null):" + label, input, FlexibleStringExpander.expandString(input, null, locale)); - } - if (!fse.isEmpty()) { - fse = FlexibleStringExpander.getInstance(input, false); - doFseTest(label, input, fse, context, timeZone, locale, compare, expand, isEmpty); - } - } - - public static String StaticReturnNull() { - return null; - } - - @Override - public void setUp() { - wasVerbose = Debug.isOn(Debug.VERBOSE); - if (getName().equals("testWithVerbosity")) { - Debug.set(Debug.VERBOSE, true); - } - Converters.registerConverter(new SpecialNumberToString()); - } - - @Override - public void tearDown() { - Debug.set(Debug.VERBOSE, wasVerbose); - } - - public static class ThrowException { - public Object getValue() throws Exception { - throw new Exception(); - } - } - - public static class ThrowNPE { - public Object getValue() { - throw new NullPointerException(); - } - } - - public static class SpecialNumberToString extends AbstractConverter<SpecialNumber, String> { - public SpecialNumberToString() { - super(SpecialNumber.class, String.class); - } - - public String convert(SpecialNumber obj) throws ConversionException { - throw new NullPointerException(); - } - } - - @SuppressWarnings("serial") - public static class SpecialNumber extends BigDecimal { - public SpecialNumber(String value) { - super(value); - } - - @Override - public String toString() { - return getClass().getName(); - } - } - - public void testWithVerbosity() { - everythingTest(); - } - - public void testQuietly() { - everythingTest(); - } - - private void everythingTest() { - Map<String, Object> testMap = new HashMap<String, Object>(); - testMap.put("date", new java.util.Date(1234567890)); - testMap.put("usd", "USD"); - testMap.put("amount", new BigDecimal("1234567.89")); - testMap.put("blank", ""); - testMap.put("exc", "Exception"); - testMap.put("nullVar", null); - testMap.put("throwException", new ThrowException()); - testMap.put("throwNPE", new ThrowNPE()); - testMap.put("var", "World"); - testMap.put("nested", "Hello ${var}"); - testMap.put("testMap", testMap); - testMap.put("nestedNull", "Hello ${nullVar}${var}"); - testMap.put("specialNumber", new SpecialNumber("1.00")); - List<String> testList = new ArrayList<String>(); - testList.add("World"); - testMap.put("testList", testList); - fseTest("null FlexibleStringExpander, null map", null, null, null, null, "", null, true); - fseTest("null FlexibleStringExpander", null, testMap, null, null, "", null, true); - fseTest("null context", "Hello World!", null, null, null, "Hello World!", null, false); - fseTest("plain string", "Hello World!", testMap, null, null, "Hello World!", "Hello World!", false); - fseTest("simple replacement", "Hello ${var}!", testMap, "Hello World!", false); - fseTest("null FlexibleStringExpander with timeZone/locale", null, testMap, timeZoneToTest, localeToTest, "", null, true); - fseTest("empty FlexibleStringExpander", "", testMap, null, null, "", null, true); - fseTest("UEL integration(nested): throw Exception", "${${throwException.value}}", testMap, "", false); - fseTest("UEL integration: throw Exception", "${throwException.value}", testMap, null, null, "", null, false); - fseTest("UEL integration(nested): throw Exception", "${throw${exc}.value}", testMap, "", false); - fseTest("UEL integration(nested): throw NPE", "${throwNPE${blank}.value}", testMap, "", false); - fseTest("visible nested replacement", "${'Hello ${var}'}!", testMap, "Hello World!", false); - fseTest("blank nested replacement", "${'Hel${blank}lo ${var}'}!", testMap, "Hello World!", false); - fseTest("UEL integration(nested): null", "${${nu${nullVar}ll}}", testMap, "", false); - fseTest("UEL integration(nested): NPE", "${${nullVar.noProp}}", testMap, "", false); - fseTest("UEL integration(nested): missing", "${${noL${nullVar}ist[0]}}", testMap, "", false); - fseTest("date w/ timezone", "The date is ${date}.", testMap, timeZoneToTest, localeToTest, "The date is 1970-01-14 22:56:07.890.", "The date is 1970-01-14 22:56:07.890.", false); - fseTest("just bad", "${foobar", testMap, "${foobar", false); - fseTest("constant and bad", "Hello${foobar", testMap, "Hello${foobar", false); - fseTest("good and bad", "Hello ${var}${foobar", testMap, "Hello World${foobar", false); - fseTest("plain-currency(USD)", "${amount?currency(${usd})}", testMap, null, localeToTest, "$1,234,567.89", false); - fseTest("currency(USD)", "The total is ${amount?currency(${usd})}.", testMap, null, localeToTest, "The total is $1,234,567.89.", false); - fseTest("currency(USD): null", "The total is ${testMap.missing?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); - fseTest("currency(USD): missing", "The total is ${noList[0]?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); - fseTest("currency(USD): exception", "The total is ${throwException.value?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); - fseTest("null nested", "${${nullVar}}!", testMap, "!", false); - fseTest("bsh: script", "${bsh:return \"Hello \" + var + \"!\";}", testMap, "Hello World!", false); - fseTest("bsh: null", "${bsh:return null;}!", testMap, "!", false); - fseTest("bsh: throw Exception", "${bsh:return throwException.value;}!", testMap, "!", false); - fseTest("bsh: converter exception", "${bsh:return specialNumber;}!", testMap, SpecialNumber.class.getName() + "!", false); - fseTest("groovy: script", "${groovy:return \"Hello \" + var + \"!\";}", testMap, "Hello World!", false); - fseTest("groovy: null", "${groovy:return null;}!", testMap, "!", false); - fseTest("groovy missing property", "${groovy: return noList[0]}", testMap, null, null, "", null, false); - fseTest("groovy: throw Exception", "${groovy:return throwException.value;}!", testMap, "!", false); - fseTest("groovy: converter exception", "${groovy:return specialNumber;}!", testMap, SpecialNumber.class.getName() + "!", false); - fseTest("UEL integration: Map", "Hello ${testMap.var}!", testMap, "Hello World!", false); - fseTest("UEL integration: blank", "Hello ${testMap.blank}World!", testMap, "Hello World!", false); - fseTest("UEL integration: List", "Hello ${testList[0]}!", testMap, "Hello World!", false); - fseTest("UEL integration: null", "${null}", testMap, null, null, "", null, false); - fseTest("UEL integration: null dereference", "${nullVar.noProp}", testMap, null, null, "", null, false); - fseTest("UEL integration: throw NPE", "${" + FlexibleStringExpanderTests.class.getName() + ".ThrowNPE.noProp}", testMap, null, null, "", null, false); - fseTest("UEL integration: missing", "${noList[0]}", testMap, null, null, "", null, false); - fseTest("Escaped expression", "This is an \\${escaped} expression", testMap, "This is an ${escaped} expression", false); - fseTest("Escaped(bsh) expression", "This is an \\${bsh:escaped} expression", testMap, "This is an ${bsh:escaped} expression", false); - fseTest("Escaped(groovy) expression", "This is an \\${groovy:escaped} expression", testMap, "This is an ${groovy:escaped} expression", false); - - fseTest("nested UEL integration(return BigDecimal)", "${a${'moun'}t}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); - fseTest("UEL integration(return BigDecimal)", "${amount}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); - fseTest("bsh: return BigDecimal", "${bsh: return amount;}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); - fseTest("groovy: return BigDecimal", "${groovy: return amount;}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); - } -} +/******************************************************************************* + * 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.ofbiz.base.util.string.test; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; + +import junit.framework.TestCase; + +import org.ofbiz.base.lang.SourceMonitored; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.string.FlexibleStringExpander; +import org.ofbiz.base.conversion.AbstractConverter; +import org.ofbiz.base.conversion.ConversionException; +import org.ofbiz.base.conversion.Converters; + +@SourceMonitored +public class FlexibleStringExpanderTests extends TestCase { + private static final Locale localeToTest = new Locale("en", "US"); + private static final Locale badLocale = new Locale("fr"); + private static final TimeZone timeZoneToTest = TimeZone.getTimeZone("PST"); + private static final TimeZone badTimeZone = TimeZone.getTimeZone("GMT"); + + private boolean wasVerbose; + + public FlexibleStringExpanderTests(String name) { + super(name); + } + + private static void parserTest(String label, String input, boolean checkCache, String toString) { + FlexibleStringExpander fse = FlexibleStringExpander.getInstance(input, false); + //System.err.println("fse(" + fse + ").class=" + fse.getClass()); + assertEquals(label + ":toString(no-cache)", toString, fse.toString()); + fse = FlexibleStringExpander.getInstance(input, true); + assertEquals(label + ":toString(cache)", toString, fse.toString()); + if (checkCache) { + assertEquals(label + ":same-cache", fse, FlexibleStringExpander.getInstance(input, true)); + } + } + + public void testParsing() { + parserTest("visible nested replacement", "${'Hello ${var}'}!", true, "${'Hello ${var}'}!"); + parserTest("hidden (runtime) nested null callreplacement", "Hello ${${groovy:" + FlexibleStringExpanderTests.class.getName() + ".StaticReturnNull()}}World!", true, "Hello ${${groovy:" + FlexibleStringExpanderTests.class.getName() + ".StaticReturnNull()}}World!"); + parserTest("UEL integration(nested): throw Exception", "${${throwException.value}}", true, "${${throwException.value}}"); + parserTest("nested-constant-emptynest-emptynest", "${a${}${}", true, "${a${}${}"); + parserTest("null", null, true, ""); + parserTest("empty", "", true, ""); + parserTest("constant-only", "a", false, "a"); + parserTest("nested-constant-emptynest-emptynest", "${a${}${}", true, "${a${}${}"); + parserTest("bsh", "${bsh:}", true, "${bsh:}"); + parserTest("groovy", "${groovy:}", true, "${groovy:}"); + + parserTest("escaped", "\\${}", true, "\\${}"); + parserTest("constant-escaped", "a\\${}", true, "a\\${}"); + parserTest("escaped-bsd", "\\${bsh:}", true, "\\${bsh:}"); + parserTest("escaped-groovy", "\\${groovy:}", true, "\\${groovy:}"); + + parserTest("missing-}", "${", true, "${"); + parserTest("nested-constant-missing-}", "${a${}", true, "${a${}"); + parserTest("nested-constant-nested-nested-missing-}", "${a${${}", true, "${a${${}"); + parserTest("escaped-missing-}", "\\${", true, "\\${"); + parserTest("constant-escaped-missing-}", "a\\${", true, "a\\${"); + + parserTest("currency", "${?currency(", true, "${?currency("); + parserTest("currency", "${?currency()", true, "${?currency()"); + parserTest("currency", "${price?currency(", true, "${price?currency("); + parserTest("currency", "${price?currency()", true, "${price?currency()"); + parserTest("currency", "${?currency(usd", true, "${?currency(usd"); + parserTest("currency", "${?currency(usd)", true, "${?currency(usd)"); + parserTest("currency", "${price?currency(usd", true, "${price?currency(usd"); + parserTest("currency", "${price?currency(usd)", true, "${price?currency(usd)"); + parserTest("currency", "${?currency(}", true, "${?currency(}"); + parserTest("currency", "${?currency()}", true, "${?currency()}"); + parserTest("currency", "${?currency(usd}", true, "${?currency(usd}"); + parserTest("currency", "${?currency(usd)}", true, "${?currency(usd)}"); + parserTest("currency", "${price?currency(}", true, "${price?currency(}"); + parserTest("currency", "${price?currency()}", true, "${price?currency()}"); + parserTest("currency", "${price?currency(usd}", true, "${price?currency(usd}"); + parserTest("currency", "${price?currency(usd)}", true, "${price?currency(usd)}"); + parserTest("currency", "a${price?currency(usd)}b", true, "a${price?currency(usd)}b"); + } + + private static void fseTest(String label, String input, Map<String, Object> context, String compare, boolean isEmpty) { + fseTest(label, input, context, null, null, compare, isEmpty); + } + + private static void doFseTest(String label, String input, FlexibleStringExpander fse, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, Object expand, boolean isEmpty) { + assertEquals("isEmpty:" + label, isEmpty, fse.isEmpty()); + if (input == null) { + assertEquals("getOriginal():" + label, "", fse.getOriginal()); + assertEquals("toString():" + label, "", fse.toString()); + assertEquals("expandString(null):" + label, "", fse.expandString(null)); + assertEquals("expand(null):" + label, null, fse.expand(null)); + if (timeZone == null) { + assertEquals("expandString(null):" + label, "", fse.expandString(null, locale)); + assertEquals("expand(null):" + label, null, fse.expand(null, locale)); + } else { + assertEquals("expandString(null):" + label, "", fse.expandString(null, timeZone, locale)); + assertEquals("expand(null):" + label, null, fse.expand(null, timeZone, locale)); + } + } else { + assertEquals("getOriginal():" + label, input, fse.getOriginal()); + assertEquals("toString():" + label, input, fse.toString()); + assertEquals("expandString(null):" + label, input, fse.expandString(null)); + assertEquals("expand(null):" + label, null, fse.expand(null)); + if (timeZone == null) { + assertEquals("expandString(null):" + label, input, fse.expandString(null, locale)); + assertEquals("expand(null):" + label, null, fse.expand(null, locale)); + } else { + assertEquals("expandString(null):" + label, input, fse.expandString(null, timeZone, locale)); + assertEquals("expand(null):" + label, null, fse.expand(null, timeZone, locale)); + } + } + if (locale == null) { + assertEquals(label, compare, fse.expandString(context)); + assertEquals("expand:" + label, expand, fse.expand(context)); + } else { + Locale defaultLocale = Locale.getDefault(); + TimeZone defaultTimeZone = TimeZone.getDefault(); + try { + Locale.setDefault(locale); + TimeZone.setDefault(timeZone); + assertEquals(label, compare, fse.expandString(context, null, null)); + assertEquals(label, expand, fse.expand(context, null, null)); + Locale.setDefault(badLocale); + TimeZone.setDefault(badTimeZone); + assertNotSame(label, compare, fse.expandString(context, null, null)); + if (input != null) { + assertNotSame(label, expand, fse.expand(context, null, null)); + } + Map<String, Object> autoUserLogin = new HashMap<String, Object>(); + autoUserLogin.put("lastLocale", locale.toString()); + autoUserLogin.put("lastTimeZone", timeZone == null ? null : timeZone.getID()); + context.put("autoUserLogin", autoUserLogin); + assertEquals(label, compare, fse.expandString(context, null, null)); + assertEquals(label, expand, fse.expand(context, null, null)); + autoUserLogin.put("lastLocale", badLocale.toString()); + autoUserLogin.put("lastTimeZone", badTimeZone.getID()); + assertNotSame(label, compare, fse.expandString(context, null, null)); + if (input != null) { + assertNotSame(label, expand, fse.expand(context, null, null)); + } + context.remove("autoUserLogin"); + context.put("locale", locale); + context.put("timeZone", timeZone); + assertEquals(label, compare, fse.expandString(context, null, null)); + assertEquals(label, expand, fse.expand(context, null, null)); + context.put("locale", badLocale); + context.put("timeZone", badTimeZone); + assertNotSame(label, compare, fse.expandString(context, null, null)); + if (input != null) { + assertNotSame(label, expand, fse.expand(context, null, null)); + } + context.remove("locale"); + context.remove("timeZone"); + assertEquals(label, compare, fse.expandString(context, timeZone, locale)); + assertEquals(label, expand, fse.expand(context, timeZone, locale)); + assertNotSame(label, compare, fse.expandString(context, badTimeZone, badLocale)); + if (input != null) { + assertNotSame(label, expand, fse.expand(context, badTimeZone, badLocale)); + } + } finally { + Locale.setDefault(defaultLocale); + TimeZone.setDefault(defaultTimeZone); + } + } + } + + private static void fseTest(String label, String input, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, boolean isEmpty) { + fseTest(label, input, context, timeZone, locale, compare, compare, isEmpty); + } + + private static void fseTest(String label, String input, Map<String, Object> context, TimeZone timeZone, Locale locale, String compare, Object expand, boolean isEmpty) { + FlexibleStringExpander fse = FlexibleStringExpander.getInstance(input); + doFseTest(label, input, fse, context, timeZone, locale, compare, expand, isEmpty); + assertEquals("static expandString:" + label, compare, FlexibleStringExpander.expandString(input, context, timeZone, locale)); + if (input == null) { + assertEquals("static expandString(null, null):" + label, "", FlexibleStringExpander.expandString(input, null)); + assertEquals("static expandString(null, null):" + label, "", FlexibleStringExpander.expandString(input, null, locale)); + } else { + assertEquals("static expandString(input, null):" + label, input, FlexibleStringExpander.expandString(input, null)); + assertEquals("static expandString(input, null):" + label, input, FlexibleStringExpander.expandString(input, null, locale)); + } + if (!fse.isEmpty()) { + fse = FlexibleStringExpander.getInstance(input, false); + doFseTest(label, input, fse, context, timeZone, locale, compare, expand, isEmpty); + } + } + + public static String StaticReturnNull() { + return null; + } + + @Override + public void setUp() { + wasVerbose = Debug.isOn(Debug.VERBOSE); + if (getName().equals("testWithVerbosity")) { + Debug.set(Debug.VERBOSE, true); + } + Converters.registerConverter(new SpecialNumberToString()); + } + + @Override + public void tearDown() { + Debug.set(Debug.VERBOSE, wasVerbose); + } + + public static class ThrowException { + public Object getValue() throws Exception { + throw new Exception(); + } + } + + public static class ThrowNPE { + public Object getValue() { + throw new NullPointerException(); + } + } + + public static class SpecialNumberToString extends AbstractConverter<SpecialNumber, String> { + public SpecialNumberToString() { + super(SpecialNumber.class, String.class); + } + + public String convert(SpecialNumber obj) throws ConversionException { + throw new NullPointerException(); + } + } + + @SuppressWarnings("serial") + public static class SpecialNumber extends BigDecimal { + public SpecialNumber(String value) { + super(value); + } + + @Override + public String toString() { + return getClass().getName(); + } + } + + public void testWithVerbosity() { + everythingTest(); + } + + public void testQuietly() { + everythingTest(); + } + + private void everythingTest() { + Map<String, Object> testMap = new HashMap<String, Object>(); + testMap.put("date", new java.util.Date(1234567890)); + testMap.put("usd", "USD"); + testMap.put("amount", new BigDecimal("1234567.89")); + testMap.put("blank", ""); + testMap.put("exc", "Exception"); + testMap.put("nullVar", null); + testMap.put("throwException", new ThrowException()); + testMap.put("throwNPE", new ThrowNPE()); + testMap.put("var", "World"); + testMap.put("nested", "Hello ${var}"); + testMap.put("testMap", testMap); + testMap.put("nestedNull", "Hello ${nullVar}${var}"); + testMap.put("specialNumber", new SpecialNumber("1.00")); + List<String> testList = new ArrayList<String>(); + testList.add("World"); + testMap.put("testList", testList); + fseTest("null FlexibleStringExpander, null map", null, null, null, null, "", null, true); + fseTest("null FlexibleStringExpander", null, testMap, null, null, "", null, true); + fseTest("null context", "Hello World!", null, null, null, "Hello World!", null, false); + fseTest("plain string", "Hello World!", testMap, null, null, "Hello World!", "Hello World!", false); + fseTest("simple replacement", "Hello ${var}!", testMap, "Hello World!", false); + fseTest("null FlexibleStringExpander with timeZone/locale", null, testMap, timeZoneToTest, localeToTest, "", null, true); + fseTest("empty FlexibleStringExpander", "", testMap, null, null, "", null, true); + fseTest("UEL integration(nested): throw Exception", "${${throwException.value}}", testMap, "", false); + fseTest("UEL integration: throw Exception", "${throwException.value}", testMap, null, null, "", null, false); + fseTest("UEL integration(nested): throw Exception", "${throw${exc}.value}", testMap, "", false); + fseTest("UEL integration(nested): throw NPE", "${throwNPE${blank}.value}", testMap, "", false); + fseTest("visible nested replacement", "${'Hello ${var}'}!", testMap, "Hello World!", false); + fseTest("blank nested replacement", "${'Hel${blank}lo ${var}'}!", testMap, "Hello World!", false); + fseTest("UEL integration(nested): null", "${${nu${nullVar}ll}}", testMap, "", false); + fseTest("UEL integration(nested): NPE", "${${nullVar.noProp}}", testMap, "", false); + fseTest("UEL integration(nested): missing", "${${noL${nullVar}ist[0]}}", testMap, "", false); + fseTest("date w/ timezone", "The date is ${date}.", testMap, timeZoneToTest, localeToTest, "The date is 1970-01-14 22:56:07.890.", "The date is 1970-01-14 22:56:07.890.", false); + fseTest("just bad", "${foobar", testMap, "${foobar", false); + fseTest("constant and bad", "Hello${foobar", testMap, "Hello${foobar", false); + fseTest("good and bad", "Hello ${var}${foobar", testMap, "Hello World${foobar", false); + fseTest("plain-currency(USD)", "${amount?currency(${usd})}", testMap, null, localeToTest, "$1,234,567.89", false); + fseTest("currency(USD)", "The total is ${amount?currency(${usd})}.", testMap, null, localeToTest, "The total is $1,234,567.89.", false); + fseTest("currency(USD): null", "The total is ${testMap.missing?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); + fseTest("currency(USD): missing", "The total is ${noList[0]?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); + fseTest("currency(USD): exception", "The total is ${throwException.value?currency(${usd})}.", testMap, null, localeToTest, "The total is .", false); + fseTest("null nested", "${${nullVar}}!", testMap, "!", false); + fseTest("bsh: script", "${bsh:return \"Hello \" + var + \"!\";}", testMap, "Hello World!", false); + fseTest("bsh: null", "${bsh:return null;}!", testMap, "!", false); + fseTest("bsh: throw Exception", "${bsh:return throwException.value;}!", testMap, "!", false); + fseTest("bsh: converter exception", "${bsh:return specialNumber;}!", testMap, SpecialNumber.class.getName() + "!", false); + fseTest("groovy: script", "${groovy:return \"Hello \" + var + \"!\";}", testMap, "Hello World!", false); + fseTest("groovy: null", "${groovy:return null;}!", testMap, "!", false); + fseTest("groovy missing property", "${groovy: return noList[0]}", testMap, null, null, "", null, false); + fseTest("groovy: throw Exception", "${groovy:return throwException.value;}!", testMap, "!", false); + fseTest("groovy: converter exception", "${groovy:return specialNumber;}!", testMap, SpecialNumber.class.getName() + "!", false); + fseTest("UEL integration: Map", "Hello ${testMap.var}!", testMap, "Hello World!", false); + fseTest("UEL integration: blank", "Hello ${testMap.blank}World!", testMap, "Hello World!", false); + fseTest("UEL integration: List", "Hello ${testList[0]}!", testMap, "Hello World!", false); + fseTest("UEL integration: null", "${null}", testMap, null, null, "", null, false); + fseTest("UEL integration: null dereference", "${nullVar.noProp}", testMap, null, null, "", null, false); + fseTest("UEL integration: throw NPE", "${" + FlexibleStringExpanderTests.class.getName() + ".ThrowNPE.noProp}", testMap, null, null, "", null, false); + fseTest("UEL integration: missing", "${noList[0]}", testMap, null, null, "", null, false); + fseTest("Escaped expression", "This is an \\${escaped} expression", testMap, "This is an ${escaped} expression", false); + fseTest("Escaped(bsh) expression", "This is an \\${bsh:escaped} expression", testMap, "This is an ${bsh:escaped} expression", false); + fseTest("Escaped(groovy) expression", "This is an \\${groovy:escaped} expression", testMap, "This is an ${groovy:escaped} expression", false); + + fseTest("nested UEL integration(return BigDecimal)", "${a${'moun'}t}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); + fseTest("UEL integration(return BigDecimal)", "${amount}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); + fseTest("bsh: return BigDecimal", "${bsh: return amount;}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); + fseTest("groovy: return BigDecimal", "${groovy: return amount;}", testMap, null, null, "1,234,567.89", testMap.get("amount"), false); + } +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/test/FlexibleStringExpanderTests.java ('svn:eol-style' removed) Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/IndentingWriterTests.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/IndentingWriterTests.java?rev=1695126&r1=1695125&r2=1695126&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/IndentingWriterTests.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/IndentingWriterTests.java Mon Aug 10 16:15:37 2015 @@ -1,73 +1,73 @@ -/******************************************************************************* - * 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.ofbiz.base.util.test; - -import java.io.StringWriter; - -import org.ofbiz.base.lang.SourceMonitored; -import org.ofbiz.base.util.IndentingWriter; -import org.ofbiz.base.test.GenericTestCaseBase; - -@SourceMonitored -public class IndentingWriterTests extends GenericTestCaseBase { - public IndentingWriterTests(String name) { - super(name); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - - private static void doTest(String label, boolean doSpace, boolean doNewline, String wanted) throws Exception { - StringWriter sw = new StringWriter(); - IndentingWriter iw; - if (!doSpace || !doNewline) { - iw = new IndentingWriter(sw, doSpace, doNewline); - } else { - iw = new IndentingWriter(sw); - } - iw.write('a'); - iw.push(); - iw.write("b\nm"); - iw.newline(); - iw.write(new char[] {'1', '\n', '2'}); - iw.space(); - iw.write('\n'); - iw.pop(); - iw.write("e"); - iw.close(); - assertEquals(label, wanted, sw.toString()); - } - - public void testIndentingWriter() throws Exception { - StringWriter sw = new StringWriter(); - IndentingWriter iw = IndentingWriter.makeIndentingWriter(sw); - assertSame("makeIndentingWriter - pass-thru", iw, IndentingWriter.makeIndentingWriter(iw)); - doTest("IndentingWriter doSpace:doNewline", true, true, "ab\n m\n 1\n 2 \n e"); - doTest("IndentingWriter doNewline", false, true, "ab\nm\n1\n2\ne"); - doTest("IndentingWriter doSpace", true, false, "ab\n m 1\n 2 \n e"); - doTest("IndentingWriter", false, false, "ab\nm1\n2\ne"); - } -} +/******************************************************************************* + * 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.ofbiz.base.util.test; + +import java.io.StringWriter; + +import org.ofbiz.base.lang.SourceMonitored; +import org.ofbiz.base.util.IndentingWriter; +import org.ofbiz.base.test.GenericTestCaseBase; + +@SourceMonitored +public class IndentingWriterTests extends GenericTestCaseBase { + public IndentingWriterTests(String name) { + super(name); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + private static void doTest(String label, boolean doSpace, boolean doNewline, String wanted) throws Exception { + StringWriter sw = new StringWriter(); + IndentingWriter iw; + if (!doSpace || !doNewline) { + iw = new IndentingWriter(sw, doSpace, doNewline); + } else { + iw = new IndentingWriter(sw); + } + iw.write('a'); + iw.push(); + iw.write("b\nm"); + iw.newline(); + iw.write(new char[] {'1', '\n', '2'}); + iw.space(); + iw.write('\n'); + iw.pop(); + iw.write("e"); + iw.close(); + assertEquals(label, wanted, sw.toString()); + } + + public void testIndentingWriter() throws Exception { + StringWriter sw = new StringWriter(); + IndentingWriter iw = IndentingWriter.makeIndentingWriter(sw); + assertSame("makeIndentingWriter - pass-thru", iw, IndentingWriter.makeIndentingWriter(iw)); + doTest("IndentingWriter doSpace:doNewline", true, true, "ab\n m\n 1\n 2 \n e"); + doTest("IndentingWriter doNewline", false, true, "ab\nm\n1\n2\ne"); + doTest("IndentingWriter doSpace", true, false, "ab\n m 1\n 2 \n e"); + doTest("IndentingWriter", false, false, "ab\nm1\n2\ne"); + } +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/IndentingWriterTests.java ('svn:eol-style' removed) |
Free forum by Nabble | Edit this page |