Package org.xtext.tortoiseshell.tests

Source Code of org.xtext.tortoiseshell.tests.InterpreterTest

/**
* Copyright (c) 2012 itemis AG (http://www.itemis.eu) 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
*/
package org.xtext.tortoiseshell.tests;

import com.google.inject.Inject;
import java.util.ArrayList;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.swt.graphics.Color;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.eclipse.xtext.junit4.util.ParseHelper;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.xtext.tortoiseshell.TortoiseShellInjectorProvider;
import org.xtext.tortoiseshell.interpreter.TortoiseShellInterpeter;
import org.xtext.tortoiseshell.lib.ITortoiseEvent;
import org.xtext.tortoiseshell.lib.MoveEvent;
import org.xtext.tortoiseshell.lib.Tortoise;
import org.xtext.tortoiseshell.lib.TurnEvent;
import org.xtext.tortoiseshell.tortoiseShell.Program;

@RunWith(XtextRunner.class)
@InjectWith(TortoiseShellInjectorProvider.class)
@SuppressWarnings("all")
public class InterpreterTest {
  @Inject
  @Extension
  private TortoiseShellInterpeter _tortoiseShellInterpeter;
 
  @Inject
  @Extension
  private ParseHelper<Program> _parseHelper;
 
  @Test
  public void testTortoiseDefaults() {
    Tortoise _tortoise = new Tortoise();
    final Procedure1<Tortoise> _function = new Procedure1<Tortoise>() {
      public void apply(final Tortoise it) {
        boolean _isPaint = it.isPaint();
        Assert.assertTrue(_isPaint);
        double _angle = it.getAngle();
        Assert.assertEquals(0.0, _angle, 0.0);
        Point _point = new Point(0, 0);
        Point _position = it.getPosition();
        Assert.assertEquals(_point, _position);
        int _delay = it.getDelay();
        Assert.assertEquals(200, _delay);
        Color _lineColor = it.getLineColor();
        Assert.assertEquals(ColorConstants.black, _lineColor);
        int _lineWidth = it.getLineWidth();
        Assert.assertEquals(1, _lineWidth);
      }
    };
    ObjectExtensions.<Tortoise>operator_doubleArrow(_tortoise, _function);
  }
 
  @Test
  public void testTortoisProgram() {
    try {
      Tortoise _tortoise = new Tortoise();
      final Procedure1<Tortoise> _function = new Procedure1<Tortoise>() {
        public void apply(final Tortoise it) {
          boolean _isPaint = it.isPaint();
          Assert.assertTrue(_isPaint);
          double _angle = it.getAngle();
          Assert.assertEquals(0.0, _angle, 0.0);
          Point _point = new Point(0, 0);
          Point _position = it.getPosition();
          Assert.assertEquals(_point, _position);
          int _delay = it.getDelay();
          Assert.assertEquals(200, _delay);
          Color _lineColor = it.getLineColor();
          Assert.assertEquals(ColorConstants.black, _lineColor);
          int _lineWidth = it.getLineWidth();
          Assert.assertEquals(1, _lineWidth);
        }
      };
      final Tortoise tortoise = ObjectExtensions.<Tortoise>operator_doubleArrow(_tortoise, _function);
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("begin");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("delay = 1");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("penUp");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("lineWidth = 2");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("lineColor = blue");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("forward(10)");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("turnLeft(10)");
      _builder.newLine();
      _builder.append("end");
      _builder.newLine();
      final Program program = this._parseHelper.parse(_builder);
      this._tortoiseShellInterpeter.run(tortoise, program, (-10));
      final Procedure1<Tortoise> _function_1 = new Procedure1<Tortoise>() {
        public void apply(final Tortoise it) {
          boolean _isPaint = it.isPaint();
          Assert.assertFalse(_isPaint);
          double _angle = it.getAngle();
          Assert.assertEquals(10.0, _angle, 0.0);
          Point _point = new Point(0, (-10));
          Point _position = it.getPosition();
          Assert.assertEquals(_point, _position);
          int _delay = it.getDelay();
          Assert.assertEquals(1, _delay);
          Color _lineColor = it.getLineColor();
          Assert.assertEquals(ColorConstants.blue, _lineColor);
          int _lineWidth = it.getLineWidth();
          Assert.assertEquals(2, _lineWidth);
        }
      };
      ObjectExtensions.<Tortoise>operator_doubleArrow(tortoise, _function_1);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  @Test
  public void testSubProgram() {
    try {
      final Tortoise tortoise = new Tortoise();
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("begin");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("delay = 0");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("val angle = 20");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("for(i: (0..360).withStep(angle)) {");
      _builder.newLine();
      _builder.append("\t\t");
      _builder.append("turnAndGo(10, angle)");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("}");
      _builder.newLine();
      _builder.append("end");
      _builder.newLine();
      _builder.newLine();
      _builder.append("sub turnAndGo");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("int dist");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("int angle");
      _builder.newLine();
      _builder.append("begin");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("forward(dist) ");
      _builder.newLine();
      _builder.append("\t");
      _builder.append("turnLeft(angle)");
      _builder.newLine();
      _builder.append("end");
      _builder.newLine();
      final Program program = this._parseHelper.parse(_builder);
      final ArrayList<MoveEvent> moveEvents = CollectionLiterals.<MoveEvent>newArrayList();
      final ArrayList<TurnEvent> turnEvents = CollectionLiterals.<TurnEvent>newArrayList();
      final ITortoiseEvent.Listener _function = new ITortoiseEvent.Listener() {
        public void handleTortoiseEvent(final ITortoiseEvent it) {
          boolean _matched = false;
          if (!_matched) {
            if (it instanceof MoveEvent) {
              _matched=true;
              moveEvents.add(((MoveEvent)it));
            }
          }
          if (!_matched) {
            if (it instanceof TurnEvent) {
              _matched=true;
              turnEvents.add(((TurnEvent)it));
            }
          }
        }
      };
      tortoise.addListener(_function);
      this._tortoiseShellInterpeter.run(tortoise, program, (-10));
      int _size = moveEvents.size();
      Assert.assertEquals(19, _size);
      int _size_1 = turnEvents.size();
      Assert.assertEquals(19, _size_1);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
}
TOP

Related Classes of org.xtext.tortoiseshell.tests.InterpreterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.