/src/test/java/org/jboss/dmr/ExpressionValueTest.java

https://github.com/starksm64/jboss-dmr · Java · 234 lines · 175 code · 25 blank · 34 comment · 12 complexity · f729de624895ace9ec297e3bcdff2d0f MD5 · raw file

  1. package org.jboss.dmr;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertNotNull;
  4. import static org.junit.Assert.fail;
  5. import java.io.PrintWriter;
  6. import java.io.StringWriter;
  7. import java.util.Collection;
  8. import junit.framework.Assert;
  9. import org.junit.Test;
  10. public class ExpressionValueTest {
  11. @Test
  12. public void testExpressionValue() {
  13. final ExpressionValue value = new ExpressionValue("some expression");
  14. assertNotNull(value);
  15. assertEquals(ModelType.EXPRESSION, value.getType());
  16. assertEquals("some expression", value.asString());
  17. }
  18. @Test
  19. public void testExpressionValueWithBlankExpression() {
  20. final ExpressionValue value = new ExpressionValue("");
  21. assertNotNull(value);
  22. assertEquals(ModelType.EXPRESSION, value.getType());
  23. assertEquals("", value.asString());
  24. }
  25. @Test(expected = IllegalArgumentException.class)
  26. public void testExpressionValueWithNullExpression() {
  27. new ExpressionValue(null);
  28. fail("Expected IllegalArgumentException.");
  29. }
  30. @Test
  31. public void testWriteExternal() {
  32. // TODO implement test.
  33. }
  34. @Test
  35. public void testAsString() {
  36. final ExpressionValue value = new ExpressionValue("some expression");
  37. assertEquals("some expression", value.asString());
  38. }
  39. @Test
  40. public void testFormat() {
  41. final ExpressionValue value = new ExpressionValue("some expression");
  42. final StringWriter stringWriter = new StringWriter();
  43. final PrintWriter writer = new PrintWriter(stringWriter, true);
  44. value.format(writer, 0, false);
  45. assertEquals("expression \"some expression\"", stringWriter.toString());
  46. }
  47. @Test
  48. public void testFormatAsJSON() {
  49. final ExpressionValue value = new ExpressionValue("some expression");
  50. final StringWriter stringWriter1 = new StringWriter();
  51. final PrintWriter writer1 = new PrintWriter(stringWriter1, true);
  52. value.formatAsJSON(writer1, 0, false);
  53. assertEquals("{ \"EXPRESSION_VALUE\" : \"some expression\" }", stringWriter1.toString());
  54. final StringWriter stringWriter2 = new StringWriter();
  55. final PrintWriter writer2 = new PrintWriter(stringWriter2, true);
  56. value.formatAsJSON(writer2, 0, true);
  57. assertEquals("{\n \"EXPRESSION_VALUE\" : \"some expression\"\n}", stringWriter2.toString());
  58. }
  59. @Test
  60. public void testEqualsObject() {
  61. final ExpressionValue value1 = new ExpressionValue("some expression");
  62. final ExpressionValue value2 = new ExpressionValue("some expression");
  63. final ExpressionValue value3 = new ExpressionValue("some other expression");
  64. assertEquals(true, value1.equals((Object) value1));
  65. assertEquals(true, value1.equals((Object) value2));
  66. assertEquals(true, value2.equals((Object) value1));
  67. assertEquals(false, value1.equals((Object) value3));
  68. assertEquals(false, value3.equals((Object) value1));
  69. assertEquals(false, value1.equals((Object) null));
  70. assertEquals(false, value1.equals("some string"));
  71. }
  72. @Test
  73. public void testEqualsExpressionValue() {
  74. final ExpressionValue value1 = new ExpressionValue("some expression");
  75. final ExpressionValue value2 = new ExpressionValue("some expression");
  76. final ExpressionValue value3 = new ExpressionValue("some other expression");
  77. assertEquals(true, value1.equals(value1));
  78. assertEquals(true, value1.equals(value2));
  79. assertEquals(true, value2.equals(value1));
  80. assertEquals(false, value1.equals(value3));
  81. assertEquals(false, value3.equals(value1));
  82. assertEquals(false, value1.equals((ExpressionValue) null));
  83. }
  84. @Test
  85. public void testHashCode() {
  86. final ExpressionValue value1 = new ExpressionValue("some expression");
  87. final ExpressionValue value2 = new ExpressionValue("some expression");
  88. final ExpressionValue value3 = new ExpressionValue("some other expression");
  89. assertEquals(true, value1.hashCode() == value1.hashCode());
  90. assertEquals(true, value1.hashCode() == value2.hashCode());
  91. assertEquals(false, value1.hashCode() == value3.hashCode());
  92. }
  93. @Test
  94. public void testResolve() {
  95. final ExpressionValue value = new ExpressionValue("some expression");
  96. assertEquals("some expression", value.resolve().asString());
  97. }
  98. /**
  99. * Test that a valid expression to a system property reference which has
  100. * no definition throws an ISE
  101. */
  102. @Test(expected = IllegalStateException.class)
  103. public void testUnresolvedReference() {
  104. final ExpressionValue value = new ExpressionValue("${no-such-system-property");
  105. String resolved = value.resolve().asString();
  106. fail("Did not fail with ISE: "+resolved);
  107. }
  108. /**
  109. * Validate a single system property expression sees the system property value.
  110. */
  111. @Test
  112. public void testSystemPropertyRef() {
  113. System.setProperty("test.property1", "test.property1.value");
  114. try {
  115. final ExpressionValue value = new ExpressionValue("${test.property1}");
  116. assertEquals("test.property1.value", value.resolve().asString());
  117. } finally {
  118. System.clearProperty("test.property1");
  119. }
  120. }
  121. /**
  122. * Test an expression that contains more than one system property name to
  123. * see that the second property value is used when the first property
  124. * is not defined.
  125. */
  126. @Test
  127. public void testSystemPropertyRefs() {
  128. System.setProperty("test.property2", "test.property2.value");
  129. try {
  130. final ExpressionValue value = new ExpressionValue("${test.property1,test.property2}");
  131. assertEquals("test.property2.value", value.resolve().asString());
  132. } finally {
  133. System.clearProperty("test.property2");
  134. }
  135. }
  136. /**
  137. * Validate that a system property expression for a property with no value
  138. * and a default provides sees the default value.
  139. */
  140. @Test
  141. public void testSystemPropertyRefDefault() {
  142. final ExpressionValue value = new ExpressionValue("${test.property2:test.property2.default.value}");
  143. assertEquals("test.property2.default.value", value.resolve().asString());
  144. }
  145. /**
  146. * Validate that a environment variable reference is resolved.
  147. */
  148. @Test
  149. public void testSystemEnvVarRef() {
  150. // Since we cannot set ENV vars from java, grab first one
  151. String[] envvar = findEnvVar();
  152. if (envvar[0].length() == 0) {
  153. System.err.println("No environment variables found, skipping test");
  154. return;
  155. }
  156. final String envvarValue = envvar[1];
  157. Assert.assertNotNull("Expect non-null env var: "+envvar[0], envvarValue);
  158. final ExpressionValue value = new ExpressionValue("${"+envvar[0]+"}");
  159. assertEquals(envvarValue, value.resolve().asString());
  160. }
  161. /**
  162. * Validate that a environment variable reference is overriden by a
  163. * system property of the same name prefixed with "env.".
  164. */
  165. @Test
  166. public void testSystemEnvVarRefOverride() {
  167. // Since we cannot set ENV vars from java, grab first one
  168. String[] envvar = findEnvVar();
  169. if (envvar[0].length() == 0) {
  170. System.err.println("No environment variables found, skipping test");
  171. return;
  172. }
  173. // Override the var
  174. String sysPropName = envvar[0];
  175. String overrideValue = sysPropName+"-override";
  176. try {
  177. System.setProperty(sysPropName, overrideValue);
  178. final String envvarValue = envvar[1];
  179. Assert.assertNotNull("Expect non-null env var: "+envvar[0], envvarValue);
  180. final ExpressionValue value = new ExpressionValue("${"+envvar[0]+"}");
  181. assertEquals(overrideValue, value.resolve().asString());
  182. } finally {
  183. System.clearProperty(sysPropName);
  184. }
  185. }
  186. /**
  187. * Find the first defined System.getenv() environment variable with a non-zero length value.
  188. * @return [0] = env var name prefixed with "env."
  189. * [1] = env var value. If [0].length == 0, then there
  190. * were no environment variables defined.
  191. */
  192. private static String[] findEnvVar() {
  193. String[] pair = {"", null};
  194. Collection<String> envvars = System.getenv().keySet();
  195. if (envvars.isEmpty()) {
  196. return pair;
  197. }
  198. for(final String envvar : envvars) {
  199. final String envvarValue = System.getenv(envvar);
  200. if (envvarValue != null && envvarValue.length() > 0) {
  201. // Change name to env.name
  202. pair[0] = "env." + envvar;
  203. pair[1] = envvarValue;
  204. break;
  205. }
  206. }
  207. return pair;
  208. }
  209. }