/*
* Copyright 2013-2014 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
* (see the CONTRIBUTORS file).
*
* 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.
*/
package org.intellij.xquery.runner.state.run;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.openapi.vfs.LocalFileSystem;
import org.intellij.xquery.BaseFunctionalTestCase;
import org.intellij.xquery.runner.XQueryRunConfigurationFactory;
import org.intellij.xquery.runner.XQueryRunConfigurationType;
import org.mockito.InOrder;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.intellij.xquery.runner.XQueryRunConfigurationType.XQUERY_MAIN_MODULE;
import static org.intellij.xquery.runner.state.run.XQueryRunConfiguration.RUNNER_CLASS;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
/**
* User: ligasgr
* Date: 14/11/13
* Time: 15:53
*/
public class XQueryRunConfigurationTest extends BaseFunctionalTestCase {
private static final String VM_PARAMS = "params";
private static final String PROGRAM_PARAMS = "program params";
private static final String JRE_PATH = "jre path";
private static final boolean JRE_ENABLED = true;
private static final boolean PASS_PARENT_ENVS = true;
private static final String MAIN_FILE_NAME = "file.xq";
private static final boolean CONTEXT_ITEM_ENABLED = true;
private static final boolean CONTEXT_ITEM_FROM_EDITOR_ENABLED = true;
private static final String CONTEXT_ITEM_TEXT = "my text";
private static final String CONTEXT_ITEM_FILE = "file.xml";
private static final String CONTEXT_ITEM_TYPE = "xs:int";
private static final String DATA_SOURCE_NAME = "saxon";
private final Map<String, String> envs = new HashMap<String, String>();
private TestXQueryRunConfiguration configuration;
private XQueryRunVariables variables = new XQueryRunVariables(Collections.<XQueryRunVariable>emptyList());
private VariablesValidator variablesValidator;
private ContextItemValidator contextItemValidator;
private DataSourceValidator dataSourceValidator;
private AlternativeJreValidator alternativeJreValidator;
private ModuleValidator moduleValidator;
private XmlConfigurationAccessor xmlConfigurationAccessor;
private VariablesAccessor variablesAccessor;
@Override
public void setUp() throws Exception {
super.setUp();
XQueryRunConfigurationModule module = new XQueryRunConfigurationModule(getProject());
XQueryRunConfigurationType type = new XQueryRunConfigurationType();
ConfigurationFactory factory = new XQueryRunConfigurationFactory(XQUERY_MAIN_MODULE, type);
variablesValidator = mock(VariablesValidator.class);
contextItemValidator = mock(ContextItemValidator.class);
dataSourceValidator = mock(DataSourceValidator.class);
alternativeJreValidator = mock(AlternativeJreValidator.class);
moduleValidator = mock(ModuleValidator.class);
xmlConfigurationAccessor = mock(XmlConfigurationAccessor.class);
variablesAccessor = mock(VariablesAccessor.class);
configuration = new TestXQueryRunConfiguration(XQUERY_MAIN_MODULE, module, factory,
variablesValidator, contextItemValidator, dataSourceValidator, alternativeJreValidator, moduleValidator,
xmlConfigurationAccessor, variablesAccessor);
configuration.setVariables(variables);
configuration.setDataSourceName(DATA_SOURCE_NAME);
}
public void testShouldCreateConfiguration() {
assertThat(configuration, is(not(nullValue())));
}
public void testShouldSetWorkingDirectoryToProjectBasePath() {
assertThat(configuration.getWorkingDirectory(), is(getProject().getBasePath().replace('/', File.separatorChar)));
assertThat(configuration.getWorkingDirectory(), not(containsString(LocalFileSystem.PROTOCOL)));
assertThat(configuration.getRawWorkingDirectory(), containsString(LocalFileSystem.PROTOCOL));
assertThat(configuration.getRawWorkingDirectory(), not(containsString("\\")));
}
public void testShouldReturnCorrectRunnerClass() {
assertThat(configuration.getRunClass(), is(RUNNER_CLASS));
}
public void testShouldReturnNullPackage() {
assertThat(configuration.getPackage(), is(nullValue()));
}
public void testShouldAssignAndReturnJavaRelatedParameters() {
configuration.setVMParameters(VM_PARAMS);
configuration.setProgramParameters(PROGRAM_PARAMS);
configuration.setAlternativeJrePathEnabled(JRE_ENABLED);
configuration.setAlternativeJrePath(JRE_PATH);
configuration.setEnvs(envs);
configuration.setPassParentEnvs(PASS_PARENT_ENVS);
assertThat(configuration.getVMParameters(), is(VM_PARAMS));
assertThat(configuration.getProgramParameters(), is(PROGRAM_PARAMS));
assertThat(configuration.isAlternativeJrePathEnabled(), is(JRE_ENABLED));
assertThat(configuration.getAlternativeJrePath(), is(JRE_PATH));
assertThat(configuration.getEnvs(), is(envs));
assertThat(configuration.isPassParentEnvs(), is(PASS_PARENT_ENVS));
}
public void testShouldAssignAndReturnXQueryRelatedParameters() {
configuration.setVariables(variables);
configuration.setMainFileName(MAIN_FILE_NAME);
configuration.setContextItemEnabled(CONTEXT_ITEM_ENABLED);
configuration.setContextItemFromEditorEnabled(CONTEXT_ITEM_FROM_EDITOR_ENABLED);
configuration.setContextItemText(CONTEXT_ITEM_TEXT);
configuration.setContextItemFile(CONTEXT_ITEM_FILE);
configuration.setContextItemType(CONTEXT_ITEM_TYPE);
configuration.setDataSourceName(DATA_SOURCE_NAME);
assertThat(configuration.getVariables(), is(variables));
assertThat(configuration.getMainFileName(), is(MAIN_FILE_NAME));
assertThat(configuration.isContextItemEnabled(), is(CONTEXT_ITEM_ENABLED));
assertThat(configuration.isContextItemFromEditorEnabled(), is(CONTEXT_ITEM_FROM_EDITOR_ENABLED));
assertThat(configuration.getContextItemText(), is(CONTEXT_ITEM_TEXT));
assertThat(configuration.getContextItemFile(), is(CONTEXT_ITEM_FILE));
assertThat(configuration.getContextItemType(), is(CONTEXT_ITEM_TYPE));
assertThat(configuration.getDataSourceName(), is(DATA_SOURCE_NAME));
}
public void testShouldVerifyConfigurationUsingValidators() throws RuntimeConfigurationException {
configuration.checkConfiguration();
InOrder inOrder = inOrder(alternativeJreValidator,
moduleValidator,
variablesValidator,
contextItemValidator,
dataSourceValidator);
inOrder.verify(alternativeJreValidator).validate(configuration);
inOrder.verify(moduleValidator).validate(configuration);
inOrder.verify(variablesValidator).validate(variables);
inOrder.verify(contextItemValidator).validate(anyBoolean(), anyString(), anyBoolean(), anyString(), anyString());
}
private class TestXQueryRunConfiguration extends XQueryRunConfiguration {
public TestXQueryRunConfiguration(String name,
XQueryRunConfigurationModule configurationModule,
ConfigurationFactory factory,
VariablesValidator variablesValidator,
ContextItemValidator contextItemValidator,
DataSourceValidator dataSourceValidator,
AlternativeJreValidator alternativeJreValidator,
ModuleValidator moduleValidator,
XmlConfigurationAccessor xmlConfigurationAccessor,
VariablesAccessor variablesAccessor) {
super(name, configurationModule, factory, variablesValidator, contextItemValidator, dataSourceValidator,
alternativeJreValidator, moduleValidator, xmlConfigurationAccessor, variablesAccessor);
}
}
}