package org.eclipse.dltk.tcl.parser.tests;
import static org.junit.Assert.assertEquals;
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.junit.Test;
public class CommandOutOfScopeTests {
NamespaceScopeProcessor processor = new NamespaceScopeProcessor();
@Test
public void test001() {
String source = "break";
typedCheck(source, 1, "8.4");
}
@Test
public void test002() {
String source = "for {set i 0} {i<3} {incr i} {set i 4; break}";
typedCheck(source, 0, "8.4");
}
@Test
public void test003() {
String source = "while {true} {if (true) break}";
typedCheck(source, 0, "8.4");
}
@Test
public void test004() {
String source = "foreach x $values {if (true) break}";
typedCheck(source, 0, "8.4");
}
@Test
public void test005() {
String source = "continue";
typedCheck(source, 1, "8.4");
}
@Test
public void test006() {
String source = "for {set i 0} {i<3} {incr i} {set i 4; continue}";
typedCheck(source, 0, "8.4");
}
@Test
public void test007() {
String source = "while {true} {if (true) continue}";
typedCheck(source, 0, "8.4");
}
@Test
public void test008() {
String source = "foreach x $values {if (true) continue}";
typedCheck(source, 0, "8.4");
}
@Test
public void test009() {
String source = "if (i==0) {set i 4; break;continue}";
typedCheck(source, 2, "8.4");
}
@Test
public void test010() {
String source = "for {set i 0} {i<3} {incr i} {if (i==0) {set i 4; break}}";
typedCheck(source, 0, "8.4");
}
@Test
public void test011() {
String source = "if (0==0) {for {set i 0} {i<3} {incr i} {set i 4; break}}";
typedCheck(source, 0, "8.4");
}
@Test
public void test012() {
String source = "if (i>0) {if (i==3) {set i 4; break}}";
typedCheck(source, 1, "8.4");
}
@Test
public void test013() {
String source = "set i 0; break i";
typedCheck(source, 2, "8.4");
}
@Test
public void test014() {
String source = "set i 0; continue i";
typedCheck(source, 2, "8.4");
}
@Test
public void test015() {
String source = "namespace eval mns {while {true} {if (true) break}}";
typedCheck(source, 0, "8.4");
}
@Test
public void test016() {
String source = "namespace eval mns {while {true} {if (true) break};continue};break";
typedCheck(source, 2, "8.4");
}
@Test
public void test017() {
String source = "while {true} {foreach x $values {"
+ "for {set i 0} {i<3} {incr i} {set i 4; continue}; break}; continue}";
typedCheck(source, 0, "8.4");
}
private void typedCheck(String source, int errs, String version) {
processor = DefinitionManager.getInstance().createProcessor();
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
StackTraceElement element = stackTrace[2];
System.out.println("%%%%%%%%%%%%%%%%Test:" + element.getMethodName());
TclParser parser = TestUtils.createParser(version);
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(errs, errors.getCount());
}
}