/******************************************************************************* * Copyright (c) 2008, 2017 xored software, Inc. 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: * xored software, Inc. - initial API and Implementation (Andrei Sobolev) *******************************************************************************/ package org.eclipse.dltk.tcl.parser.tests; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.environment.EnvironmentManager; import org.eclipse.dltk.core.environment.IEnvironment; import org.eclipse.dltk.core.environment.IExecutionEnvironment; import org.eclipse.dltk.tcl.internal.tclchecker.Checker4OutputProcessor; import org.eclipse.dltk.tcl.internal.tclchecker.TclChecker; import org.eclipse.dltk.tcl.internal.tclchecker.TclCheckerConfigUtils; import org.eclipse.dltk.tcl.internal.tclchecker.TclCheckerConfigUtils.ValidatorInstanceResponse; import org.eclipse.dltk.tcl.internal.tclchecker.TclCheckerProblem; import org.eclipse.dltk.tcl.parser.ITclErrorConstants; import org.eclipse.dltk.tcl.parser.ITclParserOptions; import org.eclipse.dltk.tcl.parser.TclErrorCollector; import org.eclipse.dltk.tcl.parser.TclParser; import org.eclipse.dltk.tcl.parser.definitions.DefinitionManager; import org.eclipse.dltk.tcl.parser.definitions.NamespaceScopeProcessor; import org.eclipse.dltk.tcl.parser.internal.tests.Activator; import org.eclipse.dltk.tcl.parser.tests.TestUtils.CodeModel; import org.eclipse.dltk.validators.core.NullValidatorOutput; import org.junit.Test; import org.osgi.framework.Bundle; public class TclCheckerDLTKErrorComparisonTests { IProject project; @Test public void test001() throws Exception { String fileName = "main1.tcl"; Bundle bundle = Platform .getBundle("org.eclipse.dltk.tcl.parser.tests.ats"); IPath loc = Activator.getDefault().getStateLocation(); TestUtils.exractFilesInto(loc.toOSString(), bundle.getEntry("/alfa.zip"), new String[] { fileName }); String fileLoc = loc.append(fileName).toOSString(); final String contents = TestUtils .getContents(new FileInputStream(fileLoc)); CodeModel model = new CodeModel(contents); List<TclCheckerProblem> list = check(fileLoc); TclParser parser = TestUtils.createParser(); NamespaceScopeProcessor processor = DefinitionManager.getInstance() .createProcessor(); parser.setOptionValue(ITclParserOptions.REPORT_UNKNOWN_AS_ERROR, false); TclErrorCollector col = new TclErrorCollector(); /* List<TclCommand> commands = */parser.parse(contents, col, processor); System.out.println("-----------------source----------------------\n"); col.reportAll( (code, message, extraMessage, start, end, kind) -> System.out .println((kind == ITclErrorConstants.ERROR ? "Error:" : "Warning/Info:") + code + " (" + start + "," + end + ") message:" + message + "\n" + contents.substring(start, end))); System.out.println("============================================="); for (TclCheckerProblem tclCheckerProblem : list) { System.out.println(); int[] bounds = model .getBounds(tclCheckerProblem.getLineNumber() - 1); System.out.println( (tclCheckerProblem.isError() ? "Error:" : "Warning/Info:") + tclCheckerProblem.getMessage() + " (" + bounds[0] + "," + bounds[1] + ") message:" + tclCheckerProblem.getExplanation() + "\n" + contents.substring(bounds[0], bounds[1])); } } public List<TclCheckerProblem> check(String file) { final List<TclCheckerProblem> problems = new ArrayList<>(); final IEnvironment environment = EnvironmentManager .getLocalEnvironment(); final String[] cmdLine = new String[] { getTclChecker(), file }; try { final Checker4OutputProcessor processor = new Checker4OutputProcessor( new NullProgressMonitor(), new NullValidatorOutput(), (module, problem) -> problems.add(problem)) { @Override protected boolean isValidModule() { return true; } }; final ValidatorInstanceResponse response = TclCheckerConfigUtils .getConfiguration(environment, TclCheckerConfigUtils.ALL); if (!response.isEmpty()) { TclChecker checker = new TclChecker( response.instances.get(0).environmentInstance, response.instances.get(0).config, environment); IExecutionEnvironment execEnvironment = environment .getAdapter(IExecutionEnvironment.class); checker.executeProcess(processor, execEnvironment, cmdLine); } } catch (Exception e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } } return problems; } private String getTclChecker() { return "/home/dltk/apps/bin/tclchecker"; } }