/* * (C) Copyright 2013-2015 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed 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. * * Contributors: * Anahide Tchertchian */ package org.nuxeo.runtime; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.nuxeo.runtime.api.Framework; import org.nuxeo.runtime.test.runner.Features; import org.nuxeo.runtime.test.runner.FeaturesRunner; import org.nuxeo.runtime.test.runner.RuntimeFeature; /** * @since 5.7 */ @RunWith(FeaturesRunner.class) @Features({ RuntimeFeature.class }) public class TestFrameworkProperties { protected RuntimeService runtime = Framework.getRuntime(); final String aValue = "myValue"; final String aDefaultValue = "myDefaultValue"; final String aParam = "myParam"; final String aStrangeValue = "${\\my.strange/value}"; final String aParamWithDot = "my.param.with.dot"; final String aSystemValue = "mySystemValue"; @Test public void testExpandVars() { List<String> testExpressions = new ArrayList<>(); testExpressions.add("<myProp>" + aValue + "</myProp>"); testExpressions.add("<myProp>${" + aParam + "}</myProp>"); testExpressions.add("<myProp>${" + aParam + ":=" + aDefaultValue + "}</myProp>"); // property undefined assertEquals("<myProp>" + aValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>${" + aParam + "}</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aDefaultValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); // system property System.setProperty(aParam, aSystemValue); assertEquals("<myProp>" + aValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>" + aSystemValue + "</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aSystemValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); // runtime property runtime.setProperty(aParam, aValue); assertEquals("<myProp>" + aValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>" + aValue + "</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); } @Test public void testExpandVarsWithSpecialChars() { List<String> testExpressions = new ArrayList<>(); testExpressions.add("<myProp>" + aStrangeValue + "</myProp>"); testExpressions.add("<myProp>${" + aParamWithDot + "}</myProp>"); testExpressions.add("<myProp>${" + aParamWithDot + ":=" + aDefaultValue + "}</myProp>"); // property undefined assertEquals("<myProp>" + aStrangeValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>${" + aParamWithDot + "}</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aDefaultValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); // system property System.setProperty(aParamWithDot, aSystemValue); assertEquals("<myProp>" + aStrangeValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>" + aSystemValue + "</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aSystemValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); // runtime property runtime.setProperty(aParamWithDot, aStrangeValue); assertEquals("<myProp>" + aStrangeValue + "</myProp>", runtime.expandVars(testExpressions.get(0))); assertEquals("<myProp>" + aStrangeValue + "</myProp>", runtime.expandVars(testExpressions.get(1))); assertEquals("<myProp>" + aStrangeValue + "</myProp>", runtime.expandVars(testExpressions.get(2))); } @Test public void testIsBooleanPropertyTrueFalse() throws Exception { String booleanVar1 = "booleanVar1"; String booleanVar2 = "booleanVar2"; assertNull(runtime.getProperty(booleanVar1)); assertNull(runtime.getProperty(booleanVar2)); assertNull(System.getProperty(booleanVar1)); assertNull(System.getProperty(booleanVar2)); assertFalse(Framework.isBooleanPropertyTrue(booleanVar1)); assertFalse(Framework.isBooleanPropertyTrue(booleanVar2)); assertFalse(Framework.isBooleanPropertyFalse(booleanVar2)); assertFalse(Framework.isBooleanPropertyFalse(booleanVar1)); runtime.setProperty(booleanVar1, "true"); runtime.setProperty(booleanVar2, "false"); assertTrue(Framework.isBooleanPropertyTrue(booleanVar1)); assertFalse(Framework.isBooleanPropertyTrue(booleanVar2)); assertFalse(Framework.isBooleanPropertyFalse(booleanVar1)); assertTrue(Framework.isBooleanPropertyFalse(booleanVar2)); runtime.setProperty(booleanVar1, "false"); runtime.setProperty(booleanVar2, "true"); assertFalse(Framework.isBooleanPropertyTrue(booleanVar1)); assertTrue(Framework.isBooleanPropertyTrue(booleanVar2)); assertTrue(Framework.isBooleanPropertyFalse(booleanVar1)); assertFalse(Framework.isBooleanPropertyFalse(booleanVar2)); } @Test public void testIsDevModeSet() throws Exception { assertTrue(Framework.isInitialized()); // check compat assertEquals("org.nuxeo.dev", Framework.NUXEO_DEV_SYSTEM_PROP); // make sure runtime prop is not set assertNull(runtime.getProperty(Framework.NUXEO_DEV_SYSTEM_PROP)); runtime.setProperty(Framework.NUXEO_DEV_SYSTEM_PROP, "true"); assertTrue(Framework.isDevModeSet()); runtime.setProperty(Framework.NUXEO_DEV_SYSTEM_PROP, ""); assertFalse(Framework.isDevModeSet()); runtime.setProperty(Framework.NUXEO_DEV_SYSTEM_PROP, "false"); assertFalse(Framework.isDevModeSet()); } @After public void tearDown() { System.clearProperty(aParam); System.clearProperty(aParamWithDot); } }