/******************************************************************************* * (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.compiler; import io.cloudslang.lang.compiler.configuration.SlangCompilerSpringConfig; import io.cloudslang.lang.compiler.modeller.model.Executable; import io.cloudslang.lang.entities.ScoreLangConstants; import io.cloudslang.lang.entities.bindings.Result; import java.net.URL; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Bonczidai Levente * @since 8/10/2016 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SlangCompilerSpringConfig.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) public class CompileResultsTest { private List<Result> expectedOperationResults; private List<Result> expectedFlowResults; public CompileResultsTest() { expectedOperationResults = new ArrayList<>(); expectedFlowResults = new ArrayList<>(); Result success = new Result(ScoreLangConstants.SUCCESS_RESULT, null); Result failure = new Result(ScoreLangConstants.FAILURE_RESULT, null); expectedOperationResults.add(success); expectedFlowResults.add(success); expectedFlowResults.add(failure); } @Rule public ExpectedException exception = ExpectedException.none(); @Autowired private SlangCompiler compiler; @Test public void testOpDefaultResults() throws Exception { testResults("/results/op_1.sl", expectedOperationResults); } @Test public void testFlowDefaultResults() throws Exception { testResults("/results/flow_1.sl", expectedFlowResults); } @Test public void testOpDefaultResultNotLastPosition() throws Exception { expectMessage("Flow: 'op_2' syntax is illegal. Error compiling result: 'CUSTOM_2'." + " Default result should be on last position."); preCompileExecutable("/results/op_2.sl"); } @Test public void testOpMissingDefaultResult() throws Exception { expectMessage("Flow: 'op_3' syntax is illegal. Error compiling result: 'CUSTOM_3'." + " Last result should be default result."); preCompileExecutable("/results/op_3.sl"); } @Test public void testOpWrongResultValueBooleanFalse() throws Exception { expectMessage("Flow: 'op_4' syntax is illegal. Error compiling result: 'CUSTOM_2'." + " Value supports only expression or boolean true values."); preCompileExecutable("/results/op_4.sl"); } @Test public void testDecisionWrongResultValueInteger() throws Exception { expectMessage("Flow: 'decision_1' syntax is illegal. Error compiling result: 'LESS_THAN'." + " Value supports only expression or boolean true values."); preCompileExecutable("/results/decision_1.sl"); } @Test public void testDecisionMultipleDefaultResults() throws Exception { expectMessage("Flow: 'decision_1' syntax is illegal. Error compiling result: 'LESS_THAN'." + " Default result should be on last position."); preCompileExecutable("/results/decision_2.sl"); } private void testResults(String source, List<Result> expectedResults) throws Exception { Executable executable = preCompileExecutable(source); Assert.assertNotNull(executable); List<Result> actualResults = executable.getResults(); Assert.assertEquals(expectedResults, actualResults); } private Executable preCompileExecutable(String source) throws Exception { URL sourceUri = getClass().getResource(source); return compiler.preCompile(SlangSource.fromFile(sourceUri.toURI())); } private void expectMessage(String message) { exception.expect(RuntimeException.class); exception.expectMessage(message); } }