/******************************************************************************* * (c) Copyright 2016 Hewlett-Packard Development Company, L.P. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Apache License v2.0 which accompany this distribution. * * The Apache License is available at * http://www.apache.org/licenses/LICENSE-2.0 * *******************************************************************************/ package io.cloudslang.lang.entities.utils; import com.google.common.collect.Sets; import java.util.Collections; import java.util.Set; import junit.framework.Assert; import org.junit.Test; import static io.cloudslang.lang.entities.utils.ExpressionUtils.extractExpression; import static io.cloudslang.lang.entities.utils.ExpressionUtils.extractSystemProperties; import static io.cloudslang.lang.entities.utils.ExpressionUtils.matchGetFunction; /** * @author Bonczidai Levente * @since 1/22/2016 */ public class ExpressionUtilsTest { @SuppressWarnings("unchecked") private static final Set<String> EMPTY_SET = (Set<String>) Collections.EMPTY_SET; private Set<String> props1 = Sets.newHashSet("a.b.c.key"); private Set<String> props2 = Sets.newHashSet("a.b.c.key", "d.e.f.key"); @Test public void testExtractExpressionNonString() throws Exception { Assert.assertEquals(null, extractExpression(5)); } @Test public void testExtractExpressionString() throws Exception { Assert.assertEquals(null, extractExpression("abc")); } @Test public void testExtractExpressionNoMatch() throws Exception { Assert.assertEquals(null, extractExpression("${var{")); } @Test public void testExtractExpressionAssignFrom() throws Exception { Assert.assertEquals("var", extractExpression("${var}")); } @Test public void testExtractExpressionConcat() throws Exception { Assert.assertEquals("var + 'abc'", extractExpression("${var + 'abc'}")); } @Test public void testExtractExpressionWhitespacesAreSkipped() throws Exception { Assert.assertEquals("var + 'abc'", extractExpression("${ var + 'abc' }")); } @Test public void testExtractExpressionWhitespacesAll() throws Exception { Assert.assertEquals("var + 'abc'", extractExpression(" ${ var + 'abc' }")); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// @Test public void testExtractSystemPropertiesNoMatch() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sys('a.b.c.key')")); } @Test public void testExtractSystemPropertiesSingleMatch() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp('a.b.c.key')")); } @Test public void testExtractSystemPropertiesWhitespaces() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp( 'a.b.c.key' )")); } @Test public void testExtractSystemPropertiesNoMatchExpression() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp('a.b.c.key' + var)")); } @Test public void testExtractSystemPropertiesNoMatchConcat() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp('a.b.c.key' + 'hello')")); } @Test public void testExtractSystemPropertiesNoMatchGet() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp(get('key'))")); } @Test public void testExtractSystemPropertiesDefault() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp('a.b.c.key', default_expression)")); } @Test public void testExtractSystemPropertiesDefaultWhitespaces() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp( 'a.b.c.key' , default_expression)")); } @Test public void testExtractSystemPropertiesMixed() throws Exception { Assert.assertEquals(props2, extractSystemProperties("get(get_sp('a.b.c.key'), get_sp('d.e.f.key', default_expression))")); } @Test public void testExtractSystemPropertiesNoMatchDoubleQuote() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sys(\"a.b.c.key\")")); } @Test public void testExtractSystemPropertiesSingleMatchDoubleQuote() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp(\"a.b.c.key\")")); } @Test public void testExtractSystemPropertiesWhitespacesDoubleQuote() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp( \"a.b.c.key\" )")); } @Test public void testExtractSystemPropertiesNoMatchExpressionDoubleQuote() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp(\"a.b.c.key\" + var)")); } @Test public void testExtractSystemPropertiesNoMatchConcatDoubleQuote() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp(\"a.b.c.key\" + \"hello\")")); } @Test public void testExtractSystemPropertiesDefaultDoubleQuote() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp(\"a.b.c.key\", default_expression)")); } @Test public void testExtractSystemPropertiesDefaultWhitespacesDoubleQuote() throws Exception { Assert.assertEquals(props1, extractSystemProperties("get_sp( \"a.b.c.key\" , default_expression)")); } @Test public void testExtractSystemPropertiesMixedDoubleQuote() throws Exception { Assert.assertEquals(props2, extractSystemProperties("get(get_sp(\"a.b.c.key\"), get_sp(\"d.e.f.key\", default_expression))")); } @Test public void testExtractSystemPropertiesNoMatchMixedQuotes() throws Exception { Assert.assertEquals(EMPTY_SET, extractSystemProperties("get_sp(\"a.b.c.key')")); } /////////////////////////////////////////////////////////////////////////////////////////////////////////// @Test public void testMatchGetFunctionString() throws Exception { Assert.assertFalse(matchGetFunction("hello")); } @Test public void testMatchGetFunctionFalsePositive() throws Exception { Assert.assertTrue(matchGetFunction("get('a', var, 'too_many_params')")); } @Test public void testMatchGetFunctionMatch() throws Exception { Assert.assertTrue(matchGetFunction("get('a', var)")); } @Test public void testMatchGetFunctionWhitespaces() throws Exception { Assert.assertTrue(matchGetFunction("get( 'a' , var)")); } @Test public void testMatchGetFunctionMatchAtLeastOnce() throws Exception { Assert.assertTrue(matchGetFunction("exec('a', get(get(var, default_expr), default_expr))")); } @Test public void testMatchGetFunctionWithoutDefault() throws Exception { Assert.assertTrue(matchGetFunction("get(expression)")); } @Test public void testMatchGetFunctionWithoutDefaultWhitespaces() throws Exception { Assert.assertTrue(matchGetFunction("get( 'a' )")); } @Test public void testMatchGetFunctionWithoutDefaultMatchAtLeastOnce() throws Exception { Assert.assertTrue(matchGetFunction("exec(get(get(var, default_expr), default_expr))")); } }