/******************************************************************************* * 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 static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.eclipse.dltk.tcl.ast.StringArgument; import org.eclipse.dltk.tcl.ast.Substitution; import org.eclipse.dltk.tcl.ast.TclArgument; import org.eclipse.dltk.tcl.ast.TclCommand; import org.eclipse.dltk.tcl.parser.TclErrorCollector; import org.eclipse.dltk.tcl.parser.TclParser; import org.eclipse.emf.common.util.EList; import org.junit.Test; public class TclParserTests { @Test public void testParser001() { TclParser parser = TestUtils.createParser(); String source = "set a 20\n" + "set c 30"; List<TclCommand> module = parser.parse(source); assertEquals(2, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertEquals(2, st1.getArguments().size()); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("set", ref1.getValue()); TclArgument exp2 = st1.getArguments().get(0); assertTrue(exp1 instanceof StringArgument); StringArgument ref2 = (StringArgument) exp2; assertEquals("a", ref2.getValue()); TclArgument exp3 = st1.getArguments().get(1); assertTrue(exp3 instanceof StringArgument); StringArgument ref3 = (StringArgument) exp3; assertEquals("20", ref3.getValue()); } @Test public void testParser002() { TclParser parser = TestUtils.createParser(); String source = "set a \"wer\"\n" + "set c 30"; List<TclCommand> module = parser.parse(source); assertNotNull(module); assertEquals(2, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("set", ref1.getValue()); assertEquals(2, st1.getArguments().size()); TclArgument exp2 = st1.getArguments().get(0); assertTrue(exp1 instanceof StringArgument); StringArgument ref2 = (StringArgument) exp2; assertEquals("a", ref2.getValue()); TclArgument exp3 = st1.getArguments().get(1); assertTrue(exp3 instanceof StringArgument); StringArgument ref3 = (StringArgument) exp3; assertEquals("\"wer\"", ref3.getValue()); } @Test public void testParser003() { TclParser parser = TestUtils.createParser(); String source = "set a {wer}\n" + "set c 30"; List<TclCommand> module = parser.parse(source); assertNotNull(module); assertEquals(2, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("set", ref1.getValue()); assertEquals(2, st1.getArguments().size()); TclArgument exp2 = st1.getArguments().get(0); assertTrue(exp1 instanceof StringArgument); StringArgument ref2 = (StringArgument) exp2; assertEquals("a", ref2.getValue()); TclArgument exp3 = st1.getArguments().get(1); assertTrue(exp3 instanceof StringArgument); StringArgument ref3 = (StringArgument) exp3; assertEquals("{wer}", ref3.getValue()); } @Test public void testParser004() { TclParser parser = TestUtils.createParser(); String source = "set a [wer]\n" + "set c 30"; List<TclCommand> module = parser.parse(source); assertNotNull(module); assertEquals(2, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("set", ref1.getValue()); assertEquals(2, st1.getArguments().size()); TclArgument exp2 = st1.getArguments().get(0); assertTrue(exp1 instanceof StringArgument); StringArgument ref2 = (StringArgument) exp2; assertEquals("a", ref2.getValue()); TclArgument exp3 = st1.getArguments().get(1); assertTrue(exp3 instanceof Substitution); Substitution subst = (Substitution) exp3; EList<TclCommand> list = subst.getCommands(); assertEquals(1, list.size()); TclCommand anyCommand = list.get(0); assertNotNull(anyCommand); EList<TclArgument> arguments = anyCommand.getArguments(); assertEquals(0, arguments.size()); TclArgument argument = anyCommand.getName(); assertTrue(argument instanceof StringArgument); assertEquals("wer", ((StringArgument) argument).getValue()); } @Test public void testParser005() { TclParser parser = TestUtils.createParser(); String source = "puts \"alfa[de]be$teta\" $delta"; List<TclCommand> module = parser.parse(source); assertEquals(1, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertEquals(2, st1.getArguments().size()); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("puts", ref1.getValue()); } @Test public void testParser006() { TclParser parser = TestUtils.createParser(); String source = "incr i -$length"; List<TclCommand> module = parser.parse(source); assertEquals(1, module.size()); TclCommand st1 = module.get(0); TclArgument exp1 = st1.getName(); assertEquals(2, st1.getArguments().size()); assertTrue(exp1 instanceof StringArgument); StringArgument ref1 = (StringArgument) exp1; assertEquals("incr", ref1.getValue()); } @Test public void testSimpleErrors001() { TclParser parser = TestUtils.createParser(); String source = "set a \"This is\nset b 20"; TclErrorCollector collector = new TclErrorCollector(); List<TclCommand> module = parser.parse(source, collector, null); assertEquals(1, module.size()); TestUtils.outErrors(source, collector); assertEquals(1, collector.getCount()); } @Test public void testSimpleErrors002() { TclParser parser = TestUtils.createParser(); String source = "set a [This is\nset b 20"; TclErrorCollector collector = new TclErrorCollector(); List<TclCommand> module = parser.parse(source, collector, null); assertEquals(1, module.size()); TestUtils.outErrors(source, collector); assertEquals(1, collector.getCount()); } @Test public void testSimpleErrors003() { TclParser parser = TestUtils.createParser(); String source = "set a {This is\nset b 20"; TclErrorCollector collector = new TclErrorCollector(); List<TclCommand> module = parser.parse(source, collector, null); assertEquals(1, module.size()); TestUtils.outErrors(source, collector); assertEquals(1, collector.getCount()); } }