package org.eclipse.dltk.tcl.parser.tests; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import org.eclipse.dltk.tcl.parser.ITclErrorConstants; import org.eclipse.dltk.tcl.parser.ITclParserOptions; import org.eclipse.dltk.tcl.parser.TclError; 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.junit.Test; public class ErrorReportingTests { NamespaceScopeProcessor processor = new NamespaceScopeProcessor(); @Test public void test001() { String source = "namespace eval"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test002() { String source = "eval"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test003() { String source = "fcopy inchan"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test004() { String source = "fcopy inchan outchan -size"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test005() { String source = "fcopy inchan outchan -size -command callback"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.INVALID_ARGUMENT_VALUE); typedCheck(source, errorCodes); } @Test public void test006() { String source = "namespace eval nms {puts 3}"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } @Test public void test007() { String source = "switch alpha c1 history c2 history c3"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.EXTRA_ARGUMENTS); typedCheck(source, errorCodes); } @Test public void test008() { String source = "namespace"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test009() { String source = "foreach"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test010() { String source = "read $in"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } @Test public void test011() { String source = "string is . ."; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.INVALID_ARGUMENT_VALUE); typedCheck(source, errorCodes); } @Test public void test012() { String source = "fcopy inchan outchan -size -size 34"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.EXTRA_ARGUMENTS); typedCheck(source, errorCodes); } @Test public void test013() { String source = "subst -nocommands -novariables $val"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } @Test public void test014() { String source = "after"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test015() { String source = "linsert list"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test016() { String source = "foreach"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test017() { String source = "after c"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test018() { String source = "after k"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.INVALID_ARGUMENT_VALUE); typedCheck(source, errorCodes); } @Test public void test019() { String source = "registry set $key $value $data $mod"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } @Test public void test020() { String source = "linsert list f"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.INVALID_ARGUMENT_VALUE); typedCheck(source, errorCodes); } @Test public void test021() { String source = "fconfigure stdin"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } @Test public void test022() { String source = "socket $host"; List<Integer> errorCodes = new ArrayList<>(); errorCodes.add(ITclErrorConstants.MISSING_ARGUMENT); typedCheck(source, errorCodes); } @Test public void test023() { String source = "switch a {#(v {puts lala}}"; List<Integer> errorCodes = new ArrayList<>(); typedCheck(source, errorCodes); } // public void test021() { // String source = "proc {{arg def1 def2}} {puts $arg}"; // List<Integer> errorCodes = new ArrayList<Integer>(); // errorCodes.add(ITclErrorReporter.INVALID_ARGUMENT_VALUE); // typedCheck(source, errorCodes); // } // public void test022() { // String source = "proc {{arg def1 def2}} {{arg def1 def2}}"; // List<Integer> errorCodes = new ArrayList<Integer>(); // errorCodes.add(ITclErrorReporter.INVALID_ARGUMENT_VALUE); // typedCheck(source, errorCodes); // } private void typedCheck(String source, List<Integer> errorCodes) { processor = DefinitionManager.getInstance().createProcessor(); StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); StackTraceElement element = stackTrace[2]; System.out.println("%%%%%%%%%%%%%%%%Test:" + element.getMethodName()); TclParser parser = TestUtils.createParser("8.4"); TclErrorCollector errors = new TclErrorCollector(); parser.setOptionValue(ITclParserOptions.REPORT_UNKNOWN_AS_ERROR, true); parser.parse(source, errors, processor); if (errors.getCount() > 0) { TestUtils.outErrors(source, errors); } assertEquals(errorCodes.size(), errors.getCount()); int count = 0; for (int code : errorCodes) { for (TclError tclError : errors.getErrors()) { if (tclError.getCode() == code) { count++; break; } } } assertEquals(errorCodes.size(), count); } }