blob: a81fd849370b3a3e6e2d768095b8a94729e24542 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Obeo and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.examples.test.standalone;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.emf.validation.validity.RootNode;
import org.eclipse.ocl.examples.emf.validation.validity.export.HTMLExporter;
import org.eclipse.ocl.examples.emf.validation.validity.export.ModelExporter;
import org.eclipse.ocl.examples.emf.validation.validity.export.TextExporter;
import org.eclipse.ocl.examples.standalone.StandaloneApplication;
import org.eclipse.ocl.examples.standalone.StandaloneResponse;
import org.eclipse.ocl.examples.xtext.tests.TestUtil;
import org.junit.Test;
public class StandaloneExecutionTests extends StandaloneTestCase
{
protected static void assertNoLogFile(@NonNull String logFileName) {
File file = new File(logFileName);
assertFalse(file.exists());
}
private void doFailingTest(@NonNull String[] arguments) throws CoreException {
StandaloneApplication validityApplication = new StandaloneApplication();
StandaloneResponse applicationResponse = validityApplication.execute(arguments);
assertEquals(StandaloneResponse.FAIL, applicationResponse);
validityApplication.stop();
}
private void doOKTest(@NonNull String[] arguments) throws CoreException {
StandaloneApplication validityApplication = new StandaloneApplication();
StandaloneResponse applicationResponse = validityApplication.execute(arguments);
assertEquals(StandaloneResponse.OK, applicationResponse);
validityApplication.stop();
}
private @NonNull List<String> checkLogFile(@NonNull String logFileName, int oks, int infos, int warnings, int errors, int fails) throws IOException {
File file = new File(logFileName);
assertTrue(file.exists());
List<String> lines = new ArrayList<String>();
BufferedReader r = new BufferedReader(new FileReader(file));
int metricsLine = 0;
for (String line = r.readLine(); line != null; line = r.readLine()) {
if ("==== METRICS ====".equals(line)) {
metricsLine = lines.size();
}
lines.add(line);
}
r.close();
assertEquals("- Number of Success: " + oks, lines.get(metricsLine + 2));
assertEquals("- Number of Infos: " + infos, lines.get(metricsLine + 3));
assertEquals("- Number of Warnings: " + warnings, lines.get(metricsLine + 4));
assertEquals("- Number of Errors: " + errors, lines.get(metricsLine + 5));
assertEquals("- Number of Failures: " + fails, lines.get(metricsLine + 6));
return lines;
}
@Test
public void test_help() throws CoreException {
String[] arguments = {"help"};
doOKTest(arguments);
}
@Test
public void test_mandatoryArgumentsOnly() throws CoreException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName};
doOKTest(arguments);
assertNoLogFile(getTextLogFileName());
}
@Test
public void test_missingOutputArgument() throws CoreException, IOException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output"
};
doFailingTest(arguments);
assertNoLogFile(getTextLogFileName());
}
@Test
public void test_missingExporterArgument() throws CoreException, IOException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-exporter"
};
doFailingTest(arguments);
assertNoLogFile(getTextLogFileName());
}
@Test
public void test_missingUsingArgument() throws CoreException, IOException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-using"
};
doFailingTest(arguments);
assertNoLogFile(getTextLogFileName());
}
@Test
public void test_textExportedFile() throws CoreException, IOException {
String textLogFileName = getTextLogFileName();
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", textLogFileName,
"-exporter", TextExporter.EXPORTER_TYPE};
doOKTest(arguments);
checkLogFile(textLogFileName, 36, 1, 1, 1, 0);
}
@Test
public void test_modelExportedFile() throws CoreException, IOException, InterruptedException {
String modelLogFileName = getLogFileName(ModelExporter.INSTANCE);
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", modelLogFileName,
"-exporter", ModelExporter.EXPORTER_TYPE};
doOKTest(arguments);
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
URI newFileURI = URI.createFileURI(modelLogFileName);
Resource newResource = resourceSet.getResource(newFileURI, true);
EObject eObject = newResource.getContents().get(0);
assertTrue(eObject instanceof RootNode);
Resource refResource = resourceSet.getResource(newFileURI.trimFileExtension().appendFileExtension("reference").appendFileExtension("validity"), true);
refResource.setURI(newFileURI);
TestUtil.assertSameModel(refResource, newResource);
}
@Test
public void test_htmlExportedFile() throws CoreException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", getHTMLLogFileName(),
"-exporter", HTMLExporter.EXPORTER_TYPE};
doOKTest(arguments);
File file = new File(getHTMLLogFileName());
assertTrue(file.exists());
}
@Test
public void test_unknownExporter() throws CoreException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", getTextLogFileName(),
"-exporter", "anotherExporterAttribute"};
doFailingTest(arguments);
assertNoLogFile(getTextLogFileName());
}
@Test
public void test_nonExistentModelFile() throws CoreException {
String textLogFileName = getTextLogFileName();
String[] arguments = {"validate",
"-model", getProjectFileURI("models/nonExistentModel.ecore").toString(),
"-rules", inputOCLFileName,
"-output", textLogFileName,
"-exporter", TextExporter.EXPORTER_TYPE};
doFailingTest(arguments);
assertNoLogFile(textLogFileName);
}
@Test
public void test_nonExistentOclFile() throws CoreException, IOException {
String textLogFileName = getTextLogFileName();
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", getProjectFileURI("models/nonExistentFile.ocl").toString(),
"-output", textLogFileName,
"-exporter", TextExporter.EXPORTER_TYPE};
doOKTest(arguments); // Missing file is ignored
checkLogFile(textLogFileName, 30, 0, 0, 0, 0);
}
/* @Test
public void test_unexistingOutputFileTest() throws CoreException, IOException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", "unexistingFile",
"-exporter", textExporterAttribute};
doFailingTest(arguments);
File file = new File(getTextLogFileName());
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
reader.close();
assertEquals(null, line);
} */
@Test
public void test_nonExistentOutputFolder() throws CoreException {
String nonExistentOutputFolderPath = "nonExistent" + "/" + "anotherName.txt"; //$NON-NLS-3$
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", inputOCLFileName,
"-output", nonExistentOutputFolderPath,
"-exporter", TextExporter.EXPORTER_TYPE};
doFailingTest(arguments);
assertNoLogFile(nonExistentOutputFolderPath);
}
@Test
public void test_listOfOCLFiles() throws CoreException, IOException {
String textLogFileName = getTextLogFileName();
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", textInputOCLFileName,
"-output", textLogFileName,
"-exporter", TextExporter.EXPORTER_TYPE};
doOKTest(arguments);
checkLogFile(textLogFileName, 42, 2, 2, 2, 0);
}
@Test
public void test_listOfOCLFilesToStdout() throws CoreException {
String[] arguments = {"validate",
"-model", inputModelName,
"-rules", textInputOCLFileName,
"-exporter", TextExporter.EXPORTER_TYPE};
doOKTest(arguments);
assertNoLogFile(getTextLogFileName());
}
}