Skip to content
Snippets Groups Projects
Commit b7706c07 authored by René Schöne's avatar René Schöne
Browse files

WIP: Adding test pipeline.

parent a81fc24c
No related branches found
No related tags found
No related merge requests found
Showing
with 335 additions and 310 deletions
...@@ -8,7 +8,7 @@ allprojects { ...@@ -8,7 +8,7 @@ allprojects {
} }
subprojects { subprojects {
apply plugin: 'java' apply plugin: 'java-library'
apply plugin: 'idea' apply plugin: 'idea'
sourceCompatibility = 1.8 sourceCompatibility = 1.8
......
relast.preprocessor/buildSrc/
\ No newline at end of file
apply plugin: 'java'
apply plugin: 'jastadd' apply plugin: 'jastadd'
apply plugin: 'application' apply plugin: 'application'
apply plugin: "idea"
sourceCompatibility = 1.8 sourceCompatibility = 1.8
...@@ -20,14 +17,11 @@ buildscript { ...@@ -20,14 +17,11 @@ buildscript {
} }
dependencies { dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.0' implementation 'com.fasterxml.jackson.core:jackson-core:2.9.8'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
testCompile 'org.assertj:assertj-core:3.12.1' // api 'org.jastadd:jastadd:2.3.4'
compile 'com.fasterxml.jackson.core:jackson-core:2.9.8'
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
compile 'org.jastadd:jastadd:2.3.4'
runtime 'org.jastadd:jastadd:2.3.4' runtime 'org.jastadd:jastadd:2.3.4'
compile group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11' api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
} }
sourceSets { sourceSets {
...@@ -163,3 +157,5 @@ jastadd { ...@@ -163,3 +157,5 @@ jastadd {
} }
generateAst.dependsOn relast generateAst.dependsOn relast
apply from: 'test.build.gradle'
//import java.util.Set; import java.util.Set;
//import java.util.TreeSet; import java.util.TreeSet;
//import java.util.LinkedList; import java.util.LinkedList;
//
// aspect Errors {
// coll Set<ErrorMessage> Ros2Rag.errors()
// [new TreeSet<ErrorMessage>()]
//aspect ErrorMessage { root Ros2Rag;
// public class ErrorMessage implements Comparable<ErrorMessage> {
// private final ASTNode node; // TypeUse contributes error("Type '" + getID() + "' not found")
// private final String filename; // when decl() == null && !isToken()
// private final int line; // to Program.errors();
// private final int col;
// private final String message; UpdateDefinition contributes error("")
// when true
// public ErrorMessage(ASTNode node, String message) { to Ros2Rag.errors();
// this.node = node; }
// this.filename = node.containedFile().getFileName();
// this.line = node.getStartLine();
// this.col = node.getStartColumn(); aspect ErrorMessage {
// this.message = message; public class ErrorMessage implements Comparable<ErrorMessage> {
// } private final ASTNode node;
// private final String filename;
// public ASTNode getNode() { private final int line;
// return node; private final int col;
// } private final String message;
// public int getLine() {
// return line; public ErrorMessage(ASTNode node, String message) {
// } this.node = node;
// public int getCol() { this.filename = node.containedFile().getFileName();
// return col; this.line = node.getStartLine();
// } this.col = node.getStartColumn();
// public String getMessage() { this.message = message;
// return message; }
// }
// public ASTNode getNode() {
// public String toString() { return node;
// return filename + " Line " + line + ", column " + col + ": " + message; }
// } public int getLine() {
// return line;
// @Override }
// public int compareTo(ErrorMessage err) { public int getCol() {
// int n = filename.compareTo(err.filename); return col;
// if (n != 0) { }
// return n; public String getMessage() {
// } return message;
// }
// n = line - err.line;
// if (n != 0) { public String toString() {
// return n; return filename + " Line " + line + ", column " + col + ": " + message;
// } }
//
// n = col-err.col; @Override
// if (n != 0) { public int compareTo(ErrorMessage err) {
// return n; int n = filename.compareTo(err.filename);
// } if (n != 0) {
// return n;
// return message.compareTo(err.message); }
// }
// } n = line - err.line;
// if (n != 0) {
// protected ErrorMessage ASTNode.error(String message) { return n;
// return new ErrorMessage(this, message); }
// }
//} n = col-err.col;
if (n != 0) {
return n;
}
return message.compareTo(err.message);
}
}
protected ErrorMessage ASTNode.error(String message) {
return new ErrorMessage(this, message);
}
}
...@@ -90,7 +90,7 @@ aspect AspectGeneration { ...@@ -90,7 +90,7 @@ aspect AspectGeneration {
} }
public void Ros2Rag.generateGrammarExtension(StringBuilder sb) { public void Ros2Rag.generateGrammarExtension(StringBuilder sb) {
sb.append("aspect ros2rag.GrammarExtension {\n"); sb.append("aspect ROS2RAG {\n");
for (UpdateDefinition def : getUpdateDefinitionList()) { for (UpdateDefinition def : getUpdateDefinitionList()) {
def.generateAspect(sb); def.generateAspect(sb);
...@@ -144,7 +144,7 @@ aspect AspectGeneration { ...@@ -144,7 +144,7 @@ aspect AspectGeneration {
sb.append(ind(2)).append(mqttUpdaterAttribute()).append("().newConnection(topic, message -> {\n"); sb.append(ind(2)).append(mqttUpdaterAttribute()).append("().newConnection(topic, message -> {\n");
String lastResult = generateMappingApplication(sb, 3, "message"); String lastResult = generateMappingApplication(sb, 3, "message");
sb.append(ind(3)).append("set").append(getToken().getName()).append("(").append(lastResult).append(");\n"); sb.append(ind(3)).append("set").append(getToken().getName()).append("(").append(lastResult).append(");\n");
sb.append(ind(2)).append("}\n"); sb.append(ind(2)).append("});\n");
sb.append(ind(1)).append("}\n\n"); sb.append(ind(1)).append("}\n\n");
} }
......
...@@ -4,6 +4,7 @@ import beaver.Parser; ...@@ -4,6 +4,7 @@ import beaver.Parser;
import org.jastadd.ros2rag.ast.*; import org.jastadd.ros2rag.ast.*;
import org.jastadd.ros2rag.compiler.options.CommandLine; import org.jastadd.ros2rag.compiler.options.CommandLine;
import org.jastadd.ros2rag.compiler.options.CommandLine.CommandLineException; import org.jastadd.ros2rag.compiler.options.CommandLine.CommandLineException;
import org.jastadd.ros2rag.compiler.options.FlagOption;
import org.jastadd.ros2rag.compiler.options.Option; import org.jastadd.ros2rag.compiler.options.Option;
import org.jastadd.ros2rag.compiler.options.StringOption; import org.jastadd.ros2rag.compiler.options.StringOption;
import org.jastadd.ros2rag.parser.Ros2RagParser; import org.jastadd.ros2rag.parser.Ros2RagParser;
...@@ -22,6 +23,7 @@ public class Compiler { ...@@ -22,6 +23,7 @@ public class Compiler {
private StringOption optionInputGrammar; private StringOption optionInputGrammar;
private StringOption optionRootNode; private StringOption optionRootNode;
private StringOption optionInputRos2Rag; private StringOption optionInputRos2Rag;
private FlagOption optionHelp;
private ArrayList<Option<?>> options; private ArrayList<Option<?>> options;
private CommandLine commandLine; private CommandLine commandLine;
...@@ -31,23 +33,34 @@ public class Compiler { ...@@ -31,23 +33,34 @@ public class Compiler {
addOptions(); addOptions();
} }
public int run(String[] args) throws CommandLineException, CompilerException { public void run(String[] args) throws CommandLineException, CompilerException {
options = new ArrayList<>(); options = new ArrayList<>();
addOptions(); addOptions();
commandLine = new CommandLine(options); commandLine = new CommandLine(options);
commandLine.parse(args); commandLine.parse(args);
String outputDir = "gen"; // should not be used, but otherwise there is a compiler warning if (optionHelp.isSet()) {
printUsage();
return;
}
String outputDir;
if (optionOutputDir.isSet()) { if (optionOutputDir.isSet()) {
outputDir = optionOutputDir.getValue(); outputDir = optionOutputDir.getValue();
} else { } else {
outputDir = "gen";
System.out.println("No output output dir is set. Assuming '" + outputDir + "'."); System.out.println("No output output dir is set. Assuming '" + outputDir + "'.");
} }
try {
Files.createDirectories(Paths.get(outputDir));
} catch (IOException e) {
throw new CompilerException("Error creating output dir " + outputDir, e);
}
printMessage("Running ROS2RAG Preprocessor"); printMessage("Running Ros2Rag Preprocessor");
if (anyRequiredOptionIsUnset()) { if (anyRequiredOptionIsUnset()) {
return error("Aborting."); throw new CompilerException("Aborting due to missing values for required options.");
} }
List<String> otherArgs = commandLine.getArguments(); List<String> otherArgs = commandLine.getArguments();
...@@ -59,15 +72,14 @@ public class Compiler { ...@@ -59,15 +72,14 @@ public class Compiler {
printMessage("Writing output files"); printMessage("Writing output files");
// copy MqttUpdater into outputDir // copy MqttUpdater into outputDir
try { try {
Files.copy(Paths.get("src", "main", "jastadd", "MqttUpdater.java_class"), Files.copy(Paths.get("src", "main", "resources", "MqttUpdater.jadd"),
Paths.get(outputDir, "MqttUpdater.java"), Paths.get(outputDir, "MqttUpdater.jadd"),
StandardCopyOption.REPLACE_EXISTING); StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) { } catch (IOException e) {
throw new CompilerException("Could not copy MqttUpdater.java", e); throw new CompilerException("Could not copy MqttUpdater.java", e);
} }
writeToFile(outputDir + "/Grammar.relast", ros2Rag.getProgram().generateAbstractGrammar()); writeToFile(outputDir + "/Grammar.relast", ros2Rag.getProgram().generateAbstractGrammar());
writeToFile(outputDir + "/ROS2RAG.jadd", ros2Rag.generateAspect(optionRootNode.getValue())); writeToFile(outputDir + "/ROS2RAG.jadd", ros2Rag.generateAspect(optionRootNode.getValue()));
return 0;
} }
private boolean anyRequiredOptionIsUnset() { private boolean anyRequiredOptionIsUnset() {
...@@ -111,6 +123,7 @@ public class Compiler { ...@@ -111,6 +123,7 @@ public class Compiler {
optionInputGrammar = addOption(new StringOption("inputGrammar", "base grammar.")); optionInputGrammar = addOption(new StringOption("inputGrammar", "base grammar."));
optionRootNode = addOption(new StringOption("rootNode", "root node in the base grammar.")); optionRootNode = addOption(new StringOption("rootNode", "root node in the base grammar."));
optionInputRos2Rag = addOption(new StringOption("inputRos2Rag", "ros2rag definition file.")); optionInputRos2Rag = addOption(new StringOption("inputRos2Rag", "ros2rag definition file."));
optionHelp = addOption(new FlagOption("help", "Print usage and exit."));
} }
private <OptionType extends Option<?>> OptionType addOption(OptionType option) { private <OptionType extends Option<?>> OptionType addOption(OptionType option) {
...@@ -149,35 +162,18 @@ public class Compiler { ...@@ -149,35 +162,18 @@ public class Compiler {
return ros2Rag; return ros2Rag;
} }
private void parse(Program program, Reader reader, String file) { protected void printUsage() {
Ros2RagScanner scanner = new Ros2RagScanner(reader); System.out.println("Usage: java -jar ros2rag.jar [--option1] [--option2=value] ... <filename1> <filename2> ... ");
Ros2RagParser parser = new Ros2RagParser(); System.out.println("Options:");
System.out.print(commandLine.printOptionHelp());
try {
GrammarFile newFile = (GrammarFile) parser.parse(scanner);
program.addGrammarFile(newFile);
} catch (IOException e) {
error(e.getMessage());
} catch (Parser.Exception e) {
System.err.println("Parse error in file " + file);
System.err.println(e.getMessage());
System.exit(1);
}
}
protected int error(String message) {
System.err.println("Error: " + message);
System.err.println();
System.err.println("Usage: java -jar ros2rag.jar [--option1] [--option2=value] ... <filename1> <filename2> ... ");
System.err.println("Options:");
System.err.print(commandLine.printOptionHelp());
return 1;
} }
public static class CompilerException extends Exception { public static class CompilerException extends Exception {
CompilerException(String message) {
super(message);
}
CompilerException(String message, Throwable cause) { CompilerException(String message, Throwable cause) {
super(message, cause); super(message, cause);
} }
} }
} }
package org.jastadd.ros2rag.compiler.mqtt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.fusesource.hawtbuf.Buffer;
import org.fusesource.hawtbuf.UTF8Buffer;
import org.fusesource.mqtt.client.*;
import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
/** /**
* Helper class to receive updates via MQTT and use callbacks to handle those messages. * Helper class to receive updates via MQTT and use callbacks to handle those messages.
* *
...@@ -25,33 +5,33 @@ import java.util.function.Consumer; ...@@ -25,33 +5,33 @@ import java.util.function.Consumer;
*/ */
public class MqttUpdater { public class MqttUpdater {
private final Logger logger; private final org.apache.logging.log4j.Logger logger;
private final String name; private final String name;
/** The host running the MQTT broker. */ /** The host running the MQTT broker. */
private URI host; private java.net.URI host;
/** The connection to the MQTT broker. */ /** The connection to the MQTT broker. */
private CallbackConnection connection; private org.fusesource.mqtt.client.CallbackConnection connection;
/** Whether we are subscribed to the topics yet */ /** Whether we are subscribed to the topics yet */
private final Condition readyCondition; private final java.util.concurrent.locks.Condition readyCondition;
private final Lock readyLock; private final java.util.concurrent.locks.Lock readyLock;
private boolean ready; private boolean ready;
private QoS qos; private org.fusesource.mqtt.client.QoS qos;
/** Dispatch knowledge */ /** Dispatch knowledge */
private final Map<String, Consumer<byte[]>> callbacks; private final java.util.Map<String, java.util.function.Consumer<byte[]>> callbacks;
public MqttUpdater() { public MqttUpdater() {
this("Ros2Rag"); this("Ros2Rag");
} }
public MqttUpdater(String name) { public MqttUpdater(String name) {
this.name = Objects.requireNonNull(name, "Name must be set"); this.name = java.util.Objects.requireNonNull(name, "Name must be set");
this.logger = LogManager.getLogger(MqttUpdater.class); this.logger = org.apache.logging.log4j.LogManager.getLogger(MqttUpdater.class);
this.callbacks = new HashMap<>(); this.callbacks = new java.util.HashMap<>();
this.readyLock = new ReentrantLock(); this.readyLock = new java.util.concurrent.locks.ReentrantLock();
this.readyCondition = readyLock.newCondition(); this.readyCondition = readyLock.newCondition();
this.ready = false; this.ready = false;
this.qos = QoS.AT_LEAST_ONCE; this.qos = org.fusesource.mqtt.client.QoS.AT_LEAST_ONCE;
} }
/** /**
...@@ -59,18 +39,18 @@ public class MqttUpdater { ...@@ -59,18 +39,18 @@ public class MqttUpdater {
* @throws IOException if could not connect, or could not subscribe to a topic * @throws IOException if could not connect, or could not subscribe to a topic
* @return self * @return self
*/ */
public MqttUpdater setHost(String host, int port) throws IOException { public MqttUpdater setHost(String host, int port) throws java.io.IOException {
this.host = URI.create("tcp://" + host + ":" + port); this.host = java.net.URI.create("tcp://" + host + ":" + port);
logger.debug("Host for {} is {}", this.name, this.host); logger.debug("Host for {} is {}", this.name, this.host);
Objects.requireNonNull(this.host, "Host need to be set!"); java.util.Objects.requireNonNull(this.host, "Host need to be set!");
MQTT mqtt = new MQTT(); org.fusesource.mqtt.client.MQTT mqtt = new org.fusesource.mqtt.client.MQTT();
mqtt.setHost(this.host); mqtt.setHost(this.host);
connection = mqtt.callbackConnection(); connection = mqtt.callbackConnection();
AtomicReference<Throwable> error = new AtomicReference<>(); java.util.concurrent.atomic.AtomicReference<Throwable> error = new java.util.concurrent.atomic.AtomicReference<>();
// add the listener to dispatch messages later // add the listener to dispatch messages later
connection.listener(new ExtendedListener() { connection.listener(new org.fusesource.mqtt.client.ExtendedListener() {
public void onConnected() { public void onConnected() {
logger.debug("Connected"); logger.debug("Connected");
} }
...@@ -81,9 +61,9 @@ public class MqttUpdater { ...@@ -81,9 +61,9 @@ public class MqttUpdater {
} }
@Override @Override
public void onPublish(UTF8Buffer topic, Buffer body, Callback<Callback<Void>> ack) { public void onPublish(org.fusesource.hawtbuf.UTF8Buffer topic, org.fusesource.hawtbuf.Buffer body, org.fusesource.mqtt.client.Callback<org.fusesource.mqtt.client.Callback<Void>> ack) {
String topicString = topic.toString(); String topicString = topic.toString();
Consumer<byte[]> callback = callbacks.get(topicString); java.util.function.Consumer<byte[]> callback = callbacks.get(topicString);
if (callback == null) { if (callback == null) {
logger.debug("Got a message, but no callback to call. Forgot to unsubscribe?"); logger.debug("Got a message, but no callback to call. Forgot to unsubscribe?");
} else { } else {
...@@ -95,7 +75,7 @@ public class MqttUpdater { ...@@ -95,7 +75,7 @@ public class MqttUpdater {
} }
@Override @Override
public void onPublish(UTF8Buffer topicBuffer, Buffer body, Runnable ack) { public void onPublish(org.fusesource.hawtbuf.UTF8Buffer topicBuffer, org.fusesource.hawtbuf.Buffer body, Runnable ack) {
logger.warn("onPublish should not be called"); logger.warn("onPublish should not be called");
} }
...@@ -108,10 +88,10 @@ public class MqttUpdater { ...@@ -108,10 +88,10 @@ public class MqttUpdater {
throwIf(error); throwIf(error);
// actually establish the connection // actually establish the connection
connection.connect(new Callback<Void>() { connection.connect(new org.fusesource.mqtt.client.Callback<Void>() {
@Override @Override
public void onSuccess(Void value) { public void onSuccess(Void value) {
connection.publish("components", (name + " is connected").getBytes(), QoS.AT_LEAST_ONCE, false, new Callback<Void>() { connection.publish("components", (name + " is connected").getBytes(), org.fusesource.mqtt.client.QoS.AT_LEAST_ONCE, false, new org.fusesource.mqtt.client.Callback<Void>() {
@Override @Override
public void onSuccess(Void value) { public void onSuccess(Void value) {
logger.debug("success sending welcome message"); logger.debug("success sending welcome message");
...@@ -141,21 +121,21 @@ public class MqttUpdater { ...@@ -141,21 +121,21 @@ public class MqttUpdater {
return this; return this;
} }
public URI getHost() { public java.net.URI getHost() {
return host; return host;
} }
private void throwIf(AtomicReference<Throwable> error) throws IOException { private void throwIf(java.util.concurrent.atomic.AtomicReference<Throwable> error) throws java.io.IOException {
if (error.get() != null) { if (error.get() != null) {
throw new IOException(error.get()); throw new java.io.IOException(error.get());
} }
} }
public void setQoSForSubscription(QoS qos) { public void setQoSForSubscription(org.fusesource.mqtt.client.QoS qos) {
this.qos = qos; this.qos = qos;
} }
public void newConnection(String topic, Consumer<byte[]> callback) { public void newConnection(String topic, java.util.function.Consumer<byte[]> callback) {
if (!ready) { if (!ready) {
// TODO should maybe be something more kind than throwing an exception here // TODO should maybe be something more kind than throwing an exception here
throw new IllegalStateException("Updater not ready"); throw new IllegalStateException("Updater not ready");
...@@ -165,7 +145,7 @@ public class MqttUpdater { ...@@ -165,7 +145,7 @@ public class MqttUpdater {
// subscribe at broker // subscribe at broker
Topic[] topicArray = { new Topic(topic, this.qos) }; Topic[] topicArray = { new Topic(topic, this.qos) };
connection.subscribe(topicArray, new Callback<byte[]>() { connection.subscribe(topicArray, new org.fusesource.mqtt.client.Callback<byte[]>() {
@Override @Override
public void onSuccess(byte[] qoses) { public void onSuccess(byte[] qoses) {
logger.debug("Subscribed to {}, qoses: {}", topic, qoses); logger.debug("Subscribed to {}, qoses: {}", topic, qoses);
...@@ -187,7 +167,7 @@ public class MqttUpdater { ...@@ -187,7 +167,7 @@ public class MqttUpdater {
* @param unit the time unit of the time argument * @param unit the time unit of the time argument
* @return whether this updater is ready * @return whether this updater is ready
*/ */
public boolean waitUntilReady(long time, TimeUnit unit) { public boolean waitUntilReady(long time, java.util.concurrent.TimeUnit unit) {
try { try {
readyLock.lock(); readyLock.lock();
if (ready) { if (ready) {
...@@ -207,7 +187,7 @@ public class MqttUpdater { ...@@ -207,7 +187,7 @@ public class MqttUpdater {
logger.warn("Stopping without connection. Was setHost() called?"); logger.warn("Stopping without connection. Was setHost() called?");
return; return;
} }
connection.disconnect(new Callback<Void>() { connection.disconnect(new org.fusesource.mqtt.client.Callback<Void>() {
@Override @Override
public void onSuccess(Void value) { public void onSuccess(Void value) {
logger.info("Disconnected {} from {}", name, host); logger.info("Disconnected {} from {}", name, host);
...@@ -221,7 +201,7 @@ public class MqttUpdater { ...@@ -221,7 +201,7 @@ public class MqttUpdater {
} }
public void publish(String topic, byte[] bytes) { public void publish(String topic, byte[] bytes) {
connection.publish(topic, bytes, qos, false, new Callback<Void>() { connection.publish(topic, bytes, qos, false, new org.fusesource.mqtt.client.Callback<Void>() {
@Override @Override
public void onSuccess(Void value) { public void onSuccess(Void value) {
logger.debug("Published some bytes to {}", topic); logger.debug("Published some bytes to {}", topic);
......
02-after-ros2rag/*
03-after-relast/*
java-gen/*
...@@ -6,7 +6,7 @@ Zone ::= Coordinate* ; ...@@ -6,7 +6,7 @@ Zone ::= Coordinate* ;
RobotArm ::= Joint* EndEffector <AttributeTestSource:int> /<AppropriateSpeed:double>/ ; // normally this would be: <AttributeTestSource:int> ; RobotArm ::= Joint* EndEffector <AttributeTestSource:int> /<AppropriateSpeed:double>/ ; // normally this would be: <AttributeTestSource:int> ;
Joint ::= <Name> <CurrentPosition:IntPosition> ; // normally this would be: <CurrentPosition:IntPosition> Joint ::= <Name:String> <CurrentPosition:IntPosition> ; // normally this would be: <CurrentPosition:IntPosition>
EndEffector : Joint; EndEffector : Joint;
......
syntax = "proto3";
package panda;
message PandaLinkState {
string name = 1;
message Position {
float positionX = 1;
float positionY = 2;
float positionZ = 3;
}
message Orientation {
float orientationX = 1;
float orientationY = 2;
float orientationZ = 3;
float orientationW = 4;
}
message TwistLinear {
float twistLinearX = 1;
float twistLinearY = 2;
float twistLinearZ = 3;
}
message TwistAngular {
float twistAngularX = 1;
float twistAngularY = 2;
float twistAngularZ = 3;
}
Position pos = 2;
Orientation orient = 3;
TwistLinear tl = 4;
TwistAngular ta = 5;
}
syntax = "proto3";
package config;
message RobotConfig {
double speed = 1;
bool loopTrajectory = 2;
enum PlanningMode {
FLUID = 0;
CARTESIAN = 1;
}
PlanningMode planningMode = 3;
}
package org.jastadd.ros2rag.tests;
import example.ast.*;
import org.junit.jupiter.api.Test;
/**
* Test case "example".
*
* @author rschoene - Initial contribution
*/
public class ExampleTest {
@Test
public void buildModel() {
Model model = new Model();
model.MqttSetHost("localhost");
ZoneModel zoneModel = new ZoneModel();
zoneModel.setSize(makePosition(1, 1, 1));
IntPosition myPosition = makePosition(0, 0, 0);
Coordinate myCoordinate = new Coordinate(myPosition);
Coordinate leftPosition = new Coordinate(makePosition(-1, 0, 0));
Coordinate rightPosition = new Coordinate(makePosition(1, 0, 0));
Zone safetyZone = new Zone();
safetyZone.addCoordinate(myCoordinate);
safetyZone.addCoordinate(leftPosition);
safetyZone.addCoordinate(rightPosition);
zoneModel.addSafetyZone(safetyZone);
model.setZoneModel(zoneModel);
RobotArm robotArm = new RobotArm();
robotArm.setAttributeTestSource(1); // set initial value, no trigger
Joint joint1 = new Joint();
joint1.setName("joint1");
joint1.setCurrentPosition(myPosition);
EndEffector endEffector = new EndEffector();
endEffector.setName("gripper");
endEffector.setCurrentPosition(makePosition(2, 2, 3));
robotArm.addJoint(joint1);
robotArm.setEndEffector(endEffector);
model.setRobotArm(robotArm);
// add dependencies
robotArm.addDependency1(joint1);
robotArm.addDependency1(endEffector);
robotArm.addDependency2(robotArm);
}
private static IntPosition makePosition(int x, int y, int z) {
return IntPosition.of(x, y, z);
}
}
...@@ -2,6 +2,7 @@ package org.jastadd.ros2rag.tests; ...@@ -2,6 +2,7 @@ package org.jastadd.ros2rag.tests;
import org.jastadd.ros2rag.compiler.Compiler; import org.jastadd.ros2rag.compiler.Compiler;
import org.jastadd.ros2rag.compiler.options.CommandLine; import org.jastadd.ros2rag.compiler.options.CommandLine;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.io.File; import java.io.File;
...@@ -10,6 +11,7 @@ import java.util.Objects; ...@@ -10,6 +11,7 @@ import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
@Disabled("migrating build logic from test to build, this test is disabled for now")
public class RosToRagTest { public class RosToRagTest {
void transform(String inputGrammar, String inputRos2Rag, String rootNode, String outputDir) throws CommandLine.CommandLineException, Compiler.CompilerException { void transform(String inputGrammar, String inputRos2Rag, String rootNode, String outputDir) throws CommandLine.CommandLineException, Compiler.CompilerException {
......
import org.jastadd.relast.plugin.RelastPlugin
import org.jastadd.relast.plugin.RelastTest
apply plugin: RelastPlugin
relastTest {
compilerLocation = '../libs/relast.jar'
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.0'
testImplementation 'org.assertj:assertj-core:3.12.1'
testImplementation group: 'org.fusesource.mqtt-client', name: 'mqtt-client', version: '1.15'
testImplementation group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
testImplementation 'com.google.protobuf:protobuf-java:3.0.0'
}
sourceSets {
test {
java.srcDir "src/test/java-gen"
}
}
task preprocessExampleTest(type: JavaExec, group: 'verification') {
doFirst {
delete 'src/test/02-after-ros2rag/example/Grammar.relast',
'src/test/02-after-ros2rag/example/MqttUpdater.java',
'src/test/02-after-ros2rag/example/ROS2RAG.jadd'
}
classpath = sourceSets.main.runtimeClasspath
main = 'org.jastadd.ros2rag.compiler.Compiler'
//noinspection GroovyAssignabilityCheck
args '--outputDir=src/test/02-after-ros2rag/example',
'--inputGrammar=src/test/01-input/example/Example.relast',
'--inputRos2Rag=src/test/01-input/example/Example.ros2rag',
'--rootNode=Model'
}
//task compileExampleTest(type: JavaExec, group: 'verification') {
//
// doFirst {
// delete 'src/test/java-gen/example'
// }
//
// classpath = sourceSets.main.runtimeClasspath
// main = 'org.jastadd.JastAdd'
// //noinspection GroovyAssignabilityCheck
// args '--o=src/test/java-gen/', '--package=example.ast',
// 'src/test/jastadd-gen/example/Grammar.relast',
// 'src/test/jastadd-gen/example/MqttUpdater.java',
// 'src/test/jastadd-gen/example/ROS2RAG.jadd',
// 'src/test/jastadd/Example.jadd'
//}
task compileExampleTest(type: RelastTest) {
verbose = true
relastFiles 'src/test/02-after-ros2rag/example/Grammar.relast'
grammarName = 'src/test/03-after-relast/example/example'
packageName = 'example.ast'
moreInputFiles 'src/test/01-input/example/Example.jadd',
'src/test/02-after-ros2rag/example/MqttUpdater.jadd',
'src/test/02-after-ros2rag/example/ROS2RAG.jadd'
}
test.dependsOn compileExampleTest
compileExampleTest.dependsOn preprocessExampleTest
// General configuration (plugins, settings, dependencies)
buildscript {
repositories.mavenLocal()
repositories.mavenCentral()
dependencies {
classpath group: 'org.jastadd', name: 'jastaddgradle', version: '1.13.3'
}
}
plugins {
id 'java'
id 'application'
id 'idea'
id 'jacoco'
}
apply plugin: 'jastadd'
group 'de.tudresden.inf.st'
version '0.1'
sourceCompatibility = 1.8
repositories.mavenCentral()
idea.module.generatedSourceDirs += file('src/gen/java')
configurations {
ragdoc
}
sourceSets.main.java.srcDir "src/gen/java"
jar.manifest.attributes('Main-Class': 'de.tudresden.inf.st.hybridpps.Main')
dependencies {
implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: "${jackson_version}"
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}"
implementation group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
jastadd2 "org.jastadd:jastadd:2.3.4"
ragdoc files('../libs/rd-builder.jar')
}
test {
testLogging {
events "passed", "skipped", "failed"
exceptionFormat "full"
}
}
jacocoTestReport {
reports {
xml.enabled true
html.enabled false
}
}
run {
mainClassName = 'de.tudresden.inf.st.hybridpps.Main'
// standardInput = System.in
}
run.enabled = false
// Input files
def relastFiles = ["./src/main/jastadd/problem.relast", "./src/main/jastadd/solution.relast"]
// phase: RelAst -> JastAdd
task relastToJastAdd(type: JavaExec) {
group = 'Build'
main = "-jar"
args(["../libs/relast.jar",
"--grammarName=./src/gen/jastadd/model",
"--useJastAddNames",
"--listClass=ArrayList",
"--jastAddList=JastAddList",
"--resolverHelper",
"--file"]
+
relastFiles)
inputs.files relastFiles
outputs.files file("./src/gen/jastadd/model.ast"), file("./src/gen/jastadd/model.jadd")
}
// phase: JastAdd -> Java (using JastAdd Gradle plugin)
jastadd {
configureModuleBuild()
modules {
module("hybridpps") {
java {
basedir "src/"
include "main/**/*.java"
include "gen/**/*.java"
}
jastadd {
basedir "src/"
include "main/jastadd/**/*.ast"
include "main/jastadd/**/*.jadd"
include "main/jastadd/**/*.jrag"
include "gen/jastadd/**/*.ast"
include "gen/jastadd/**/*.jadd"
include "gen/jastadd/**/*.jrag"
}
scanner {
include "src/main/jastadd/HybridPPSModelScanner.flex"
}
parser {
include "src/main/jastadd/HybridPPSModelParser.parser"
}
}
}
cleanGen.doFirst {
delete "src/gen/java/de"
delete "src/gen-res/BuildInfo.properties"
}
module = "hybridpps"
astPackage = 'de.tudresden.inf.st.hybridpps.jastadd.model'
parser.name = 'HybridPPSModelParser'
genDir = 'src/gen/java'
buildInfoDir = 'src/gen-res'
scanner.genDir = "src/gen/java/de/tudresden/inf/st/hybridpps/jastadd/scanner"
parser.genDir = "src/gen/java/de/tudresden/inf/st/hybridpps/jastadd/parser"
// default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false'
extraJastAddOptions = ['--List=JastAddList']
}
// Workflow configuration for phases
generateAst.dependsOn relastToJastAdd
//// always run jastadd
//jastadd.outputs.upToDateWhen {false}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment