/*******************************************************************************
* (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.result.ExecutableModellingResult;
import java.net.URI;
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.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertTrue;
/**
* @author Bonczidai Levente
* @since 8/26/2016
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SlangCompilerSpringConfig.class)
public class CharValidationsPreCompileErrorsTest {
@Autowired
private SlangCompiler compiler;
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testNamespace() throws Exception {
runAndValidateError("/corrupted/chars/op_1.sl", "Argument[bo$$.ops] violates character rules.");
}
@Test
public void testImportValue() throws Exception {
runAndValidateError("/corrupted/chars/flow_1.sl", "Argument[bo$$.ops] violates character rules.");
}
@Test
public void testReferenceId() throws Exception {
runAndValidateError("/corrupted/chars/flow_2.sl", "Argument[bo$$.ops.check_Weather] violates character rules.");
}
@Test
public void testAlias() throws Exception {
runAndValidateError("/corrupted/chars/flow_3.sl", "Argument[op$] violates character rules.");
}
@Test
public void testExecutableName() throws Exception {
runAndValidateError("/corrupted/chars/flow-4.sl", "Argument[flow-4] violates character rules.");
}
@Test
public void testStepName() throws Exception {
runAndValidateError("/corrupted/chars/flow_5.sl", "Argument[*CheckWeather*] violates character rules.");
}
@Test
public void testResultName() throws Exception {
runAndValidateError(
"/corrupted/chars/op_2.sl",
"For operation 'op_1' syntax is illegal.",
"Argument[CUSTOM_RE$ULT] violates character rules."
);
}
@Test
public void testNavigationKey() throws Exception {
runAndValidateError("/corrupted/chars/flow_6.sl", "Argument[SUCCE$$] violates character rules.");
}
@Test
public void testBreakKeys() throws Exception {
runAndValidateError(
"/corrupted/chars/flow_7.sl",
"For step 'CheckWeather' syntax is illegal.",
"Argument[INV#LID] violates character rules."
);
}
@Test
public void testNavigationValue() throws Exception {
runAndValidateError("/corrupted/chars/flow_8.sl", "Argument[%SUCCESS%] violates character rules.");
}
@Test
public void testInputKey() throws Exception {
runAndValidateError(
"/corrupted/chars/op_3.sl",
"For operation 'op_3' syntax is illegal.",
"Argument[9_var_name] violates character rules."
);
}
@Test
public void testOutputKey() throws Exception {
runAndValidateError(
"/corrupted/chars/op_4.sl",
"For operation 'op_4' syntax is illegal.",
"Argument[0name] violates character rules."
);
}
@Test
public void testPublishKey() throws Exception {
runAndValidateError(
"/corrupted/chars/flow_9.sl",
"Argument[00invalid_key] violates character rules."
);
}
@Test
public void testLoopStatementVariable() throws Exception {
runAndValidateError(
"/corrupted/chars/flow_10.sl",
"For step 'CheckWeather' syntax is illegal.",
"Argument[${var}] violates character rules."
);
}
@Test
public void testStepInputName() throws Exception {
runAndValidateError(
"/corrupted/chars/flow_11.sl",
"For step 'CheckWeather' syntax is illegal.",
"Argument[bo$$] violates character rules."
);
}
@Test
public void testStepInputNameMissingColon() throws Exception {
runAndValidateError(
"/corrupted/chars/flow_12.sl",
"For step 'CheckWeather' syntax is illegal.",
"Argument[input_python_null ${ None }] violates character rules."
);
}
public void runAndValidateError(String sourcePath, String... messages) throws Exception {
URI resource = getClass().getResource(sourcePath).toURI();
ExecutableModellingResult result = compiler.preCompileSource(SlangSource.fromFile(resource));
assertTrue(result.getErrors().size() > 0);
if (messages.length > 0) {
exception.expect(RuntimeException.class);
for (String element : messages) {
exception.expectMessage(element);
}
}
throw result.getErrors().get(0);
}
}