diff --git a/.rultor.yml b/.rultor.yml
deleted file mode 100644
index 7444c70..0000000
--- a/.rultor.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-decrypt:
- settings.xml: "repo/settings.xml.asc"
- pubring.gpg: "repo/pubring.gpg.asc"
- secring.gpg: "repo/secring.gpg.asc"
-release:
- script: |
- mvn versions:set "-DnewVersion=${tag}"
- git commit -am "${tag}"
- mvn clean deploy -Psonatype --settings /home/r/settings.xml
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..c9739cc
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,105 @@
+allprojects {
+ apply plugin: 'maven'
+ apply plugin: 'groovy'
+ apply plugin: 'maven'
+ apply plugin: 'signing'
+
+ group = 'org.fix4j'
+ version = '1.4'
+}
+
+subprojects {
+ apply plugin: 'java'
+ sourceCompatibility = 1.7
+ targetCompatibility = 1.7
+ tasks.withType(JavaCompile) {
+ options.encoding = 'UTF-8'
+ }
+
+ tasks.withType(Javadoc) {
+ options.addStringOption('Xdoclint:none', '-quiet')
+ }
+
+ repositories {
+ mavenLocal()
+
+ maven { url "http://repo.maven.apache.org/maven2" }
+ maven { url "http://repo.marketcetera.org/maven" }
+ }
+
+ dependencies {
+ compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.3.0'
+ compile group: 'org.slf4j', name: 'slf4j-api', version: '1.3.0'
+ testCompile group: 'junit', name: 'junit', version: '4.11'
+ testCompile "org.spockframework:spock-core:1.0-groovy-2.4"
+ // dependencies for using Spock
+ testCompile "org.hamcrest:hamcrest-core:1.3" // only necessary if Hamcrest matchers are used
+ testRuntime "cglib:cglib-nodep:3.1" // allows mocking of classes (in addition to interfaces)
+ testRuntime "org.objenesis:objenesis:2.1" // allows mocking of classes without default constructor (together with CGLIB)
+
+ }
+
+ task javadocJar(type: Jar) {
+ classifier = 'javadoc'
+ from javadoc
+ }
+
+ task sourcesJar(type: Jar) {
+ classifier = 'sources'
+ from sourceSets.main.allSource
+ }
+
+ artifacts {
+ archives javadocJar, sourcesJar
+ }
+
+ signing {
+ sign configurations.archives
+ }
+
+ uploadArchives {
+ repositories {
+ mavenDeployer {
+ beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
+
+ repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
+ authentication(userName: ossrhUsername, password: ossrhPassword)
+ }
+
+ snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
+ authentication(userName: ossrhUsername, password: ossrhPassword)
+ }
+
+ pom.project {
+ name 'Fix4j Assert'
+ packaging 'jar'
+ artifactId 'fix4j-assert'
+ description 'fix4j-assert is a library to assist in testing of applications using FIX protocol'
+ url 'http://www.fix4j.org'
+
+ scm {
+ connection 'scm:git:git://github.com/tools4j/groovy-tables.git'
+ developerConnection 'scm:git:git@github.com:tools4j/fix4j-assert.git'
+ url 'https://github.com/tools4j/fix4j-assert'
+ }
+
+ licenses {
+ license {
+ name 'GNU General Public License (GPL)'
+ url 'http://www.gnu.org/licenses/gpl.txt'
+ }
+ }
+
+ developers {
+ developer {
+ id 'ben'
+ name 'Ben Warner'
+ email 'bjwarner@gmail.com'
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/dist/1.4/fix4j-assert-acceptance-1.4.jar b/dist/1.4/fix4j-assert-acceptance-1.4.jar
new file mode 100644
index 0000000..faffd21
Binary files /dev/null and b/dist/1.4/fix4j-assert-acceptance-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-all-1.4.jar b/dist/1.4/fix4j-assert-all-1.4.jar
new file mode 100644
index 0000000..4bb3665
Binary files /dev/null and b/dist/1.4/fix4j-assert-all-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-codegen-1.4.jar b/dist/1.4/fix4j-assert-codegen-1.4.jar
new file mode 100644
index 0000000..b74fe06
Binary files /dev/null and b/dist/1.4/fix4j-assert-codegen-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-core-1.4.jar b/dist/1.4/fix4j-assert-core-1.4.jar
new file mode 100644
index 0000000..855f336
Binary files /dev/null and b/dist/1.4/fix4j-assert-core-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-fixspec-50sp2-1.4.jar b/dist/1.4/fix4j-assert-fixspec-50sp2-1.4.jar
new file mode 100644
index 0000000..d6acb5c
Binary files /dev/null and b/dist/1.4/fix4j-assert-fixspec-50sp2-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-integration-1.4.jar b/dist/1.4/fix4j-assert-integration-1.4.jar
new file mode 100644
index 0000000..673a9a2
Binary files /dev/null and b/dist/1.4/fix4j-assert-integration-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-quickfix-1.4.jar b/dist/1.4/fix4j-assert-quickfix-1.4.jar
new file mode 100644
index 0000000..9a9fcf6
Binary files /dev/null and b/dist/1.4/fix4j-assert-quickfix-1.4.jar differ
diff --git a/dist/1.4/fix4j-assert-testcommon-1.4.jar b/dist/1.4/fix4j-assert-testcommon-1.4.jar
new file mode 100644
index 0000000..925ce40
Binary files /dev/null and b/dist/1.4/fix4j-assert-testcommon-1.4.jar differ
diff --git a/fix4j-assert-acceptance/build.gradle b/fix4j-assert-acceptance/build.gradle
new file mode 100644
index 0000000..95327b1
--- /dev/null
+++ b/fix4j-assert-acceptance/build.gradle
@@ -0,0 +1,7 @@
+
+description = ''
+dependencies {
+ compile project(':fix4j-assert-core')
+ compile project(':fix4j-assert-all')
+ compile project(':fix4j-assert-testcommon')
+}
diff --git a/fix4j-assert-acceptance/pom.xml b/fix4j-assert-acceptance/pom.xml
deleted file mode 100644
index 56048f8..0000000
--- a/fix4j-assert-acceptance/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-acceptance
-
-
-
-
-
- org.codehaus.gmaven
- gmaven-plugin
-
-
-
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
- org.fix4j
- fix4j-assert-all
- 1.3
-
-
- org.fix4j
- fix4j-assert-testcommon
- 1.3
-
-
-
diff --git a/fix4j-assert-all/build.gradle b/fix4j-assert-all/build.gradle
new file mode 100644
index 0000000..7ab3331
--- /dev/null
+++ b/fix4j-assert-all/build.gradle
@@ -0,0 +1,15 @@
+
+description = ''
+dependencies {
+ compile project(':fix4j-assert-core')
+ compile project(':fix4j-assert-fixspec-50sp2')
+ compile project(':fix4j-assert-quickfix')
+ testCompile(group: 'junit', name: 'junit', version:'4.12') {
+exclude(module: 'hamcrest-core')
+ }
+ testCompile group: 'org.hamcrest', name: 'hamcrest-core', version:'1.3'
+ testCompile group: 'org.hamcrest', name: 'hamcrest-library', version:'1.3'
+ testCompile(group: 'org.mockito', name: 'mockito-core', version:'2.0.31-beta') {
+exclude(module: 'hamcrest-core')
+ }
+}
diff --git a/fix4j-assert-all/pom.xml b/fix4j-assert-all/pom.xml
deleted file mode 100644
index 21a4e72..0000000
--- a/fix4j-assert-all/pom.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-all
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
- org.fix4j
- fix4j-assert-fixspec-50sp2
- 1.3
-
-
- org.fix4j
- fix4j-assert-quickfix
- 1.3
-
-
-
-
diff --git a/fix4j-assert-codegen/build.gradle b/fix4j-assert-codegen/build.gradle
new file mode 100644
index 0000000..853aa24
--- /dev/null
+++ b/fix4j-assert-codegen/build.gradle
@@ -0,0 +1,5 @@
+
+description = ''
+dependencies {
+ compile group: 'org.codehaus.groovy', name: 'groovy-all', version:'2.3.8'
+}
diff --git a/fix4j-assert-codegen/pom.xml b/fix4j-assert-codegen/pom.xml
deleted file mode 100644
index 3c540d2..0000000
--- a/fix4j-assert-codegen/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-codegen
-
-
-
- org.codehaus.groovy
- groovy-all
- 2.3.8
-
-
-
-
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/Asserts.java b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/Asserts.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/Asserts.java
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/Asserts.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/CompositeContentHelper.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/CompositeContentHelper.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/CompositeContentHelper.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/CompositeContentHelper.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldClassEnumCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldClassEnumCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldClassEnumCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldClassEnumCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldTypeCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldTypeCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldTypeCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldTypeCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldTypesEnumCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldTypesEnumCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FieldTypesEnumCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FieldTypesEnumCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FixSpecificationClassCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FixSpecificationClassCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/FixSpecificationClassCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/FixSpecificationClassCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/MsgTypeCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/MsgTypeCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/MsgTypeCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/MsgTypeCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/MsgTypesEnumCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/MsgTypesEnumCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/MsgTypesEnumCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/MsgTypesEnumCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/SpecParser.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/SpecParser.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/SpecParser.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/SpecParser.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/StandardHeaderCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/StandardHeaderCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/StandardHeaderCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/StandardHeaderCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/StandardTrailerCreator.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/StandardTrailerCreator.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/StandardTrailerCreator.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/StandardTrailerCreator.groovy
diff --git a/fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/Util.groovy b/fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/Util.groovy
similarity index 100%
rename from fix4j-assert-codegen/src/main/java/org/fix4j/spec/codegen/Util.groovy
rename to fix4j-assert-codegen/src/main/groovy/fix4j/spec/codegen/Util.groovy
diff --git a/fix4j-assert-core/build.gradle b/fix4j-assert-core/build.gradle
new file mode 100644
index 0000000..4215ed4
--- /dev/null
+++ b/fix4j-assert-core/build.gradle
@@ -0,0 +1,5 @@
+
+description = ''
+dependencies {
+ testCompile project(':fix4j-assert-testcommon')
+}
diff --git a/fix4j-assert-core/pom.xml b/fix4j-assert-core/pom.xml
deleted file mode 100644
index 5e62221..0000000
--- a/fix4j-assert-core/pom.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-core
-
-
-
-
-
- org.codehaus.gmaven
- gmaven-plugin
-
-
-
-
-
-
- org.fix4j
- fix4j-assert-testcommon
- 1.3
- test
-
-
-
diff --git a/fix4j-assert-core/src/main/java/org/fix4j/test/messageflags/SessionLevelRejectMessageFlagRule.java b/fix4j-assert-core/src/main/java/org/fix4j/test/messageflags/SessionLevelRejectMessageFlagRule.java
index da9014d..c836619 100644
--- a/fix4j-assert-core/src/main/java/org/fix4j/test/messageflags/SessionLevelRejectMessageFlagRule.java
+++ b/fix4j-assert-core/src/main/java/org/fix4j/test/messageflags/SessionLevelRejectMessageFlagRule.java
@@ -3,6 +3,7 @@
import org.fix4j.test.expression.FlexibleMessageExpressionParser;
import org.fix4j.test.fixmodel.Field;
import org.fix4j.test.fixmodel.FixMessage;
+import org.fix4j.test.fixspec.FieldType;
import org.fix4j.test.fixspec.FixSpecification;
import org.fix4j.test.matching.matchers.FixMessageMatcher;
import org.fix4j.test.util.Consts;
@@ -36,7 +37,12 @@ public MessageFlags getMessageFlags(final FixMessage fixMessage){
if(refTagId != null){
try {
int refTagIdInt = Integer.valueOf(refTagId.getValue());
- refTagName = fixSpecification.getFieldTypeByTag(refTagIdInt).getName();
+ final FieldType fieldType = fixSpecification.getFieldTypeByTag(refTagIdInt);
+ if(fieldType != null) {
+ refTagName = fieldType.getName();
+ } else {
+ refTagName = null;
+ }
} catch(NumberFormatException e){
refTagName = null;
}
diff --git a/fix4j-assert-examples/build.gradle b/fix4j-assert-examples/build.gradle
new file mode 100644
index 0000000..2b84313
--- /dev/null
+++ b/fix4j-assert-examples/build.gradle
@@ -0,0 +1,33 @@
+apply plugin: 'java'
+apply plugin: 'maven'
+
+/**
+NOTE!: this gradle module does NOT have a parent.
+
+It is designed to be run after a maven release to central has been done as a way to test the release.
+
+When running the tests, the fix4j artifacts should be downloaded from the central repo.
+**/
+
+group = 'org.fix4j'
+version = '1.0-SNAPSHOT'
+
+description = 'Module to test a released version of fix4j-assert'
+
+sourceCompatibility = 1.5
+targetCompatibility = 1.5
+tasks.withType(JavaCompile) {
+ options.encoding = 'UTF-8'
+}
+
+
+
+repositories {
+
+ maven { url "http://repo.maven.apache.org/maven2" }
+}
+dependencies {
+ compile group: 'org.fix4j', name: 'fix4j-assert-core', version:'1.4'
+ testCompile group: 'org.fix4j', name: 'fix4j-assert-all', version:'1.4'
+ testCompile group: 'org.fix4j', name: 'fix4j-assert-testcommon', version:'1.4'
+}
diff --git a/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.jar b/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..11268e5
Binary files /dev/null and b/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.properties b/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..6c62dfe
--- /dev/null
+++ b/fix4j-assert-examples/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Jan 24 06:29:50 GMT 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
diff --git a/fix4j-assert-examples/gradlew b/fix4j-assert-examples/gradlew
new file mode 100755
index 0000000..4453cce
--- /dev/null
+++ b/fix4j-assert-examples/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save ( ) {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/fix4j-assert-examples/gradlew.bat b/fix4j-assert-examples/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/fix4j-assert-examples/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/fix4j-assert-examples/pom.xml b/fix4j-assert-examples/pom.xml
deleted file mode 100644
index 9957bf0..0000000
--- a/fix4j-assert-examples/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
- 4.0.0
-
-
-
- org.fix4j
- fix4j-assert-examples
- 1.0-SNAPSHOT
-
-
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
- org.fix4j
- fix4j-assert-all
- 1.3
- test
-
-
- org.fix4j
- fix4j-assert-testcommon
- 1.3
- test
-
-
-
-
diff --git a/fix4j-assert-examples/settings.gradle b/fix4j-assert-examples/settings.gradle
new file mode 100644
index 0000000..43d56d0
--- /dev/null
+++ b/fix4j-assert-examples/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'fix4j-assert-examples'
diff --git a/fix4j-assert-examples/src/test/java/org/fix4j/test/examples/clients/MatchingSessionTest.java b/fix4j-assert-examples/src/test/java/org/fix4j/test/examples/clients/MatchingSessionTest.java
index 4760126..d0c8441 100644
--- a/fix4j-assert-examples/src/test/java/org/fix4j/test/examples/clients/MatchingSessionTest.java
+++ b/fix4j-assert-examples/src/test/java/org/fix4j/test/examples/clients/MatchingSessionTest.java
@@ -44,7 +44,7 @@ public void testMatchingSession() {
//Create a new session which initiates connection to the server
client = helper.createMatchingSession(new FixSessionId("FIX.4.4", "CLIENT_COMP_ID", "SERVER_COMP_ID"), FixConnectionMode.INITIATOR);
- //Discard all messges until a Logon message is received
+ //Discard all messages until a Logon message is received
client.discardUntil(MsgTypes.Logon);
//Send a MarketDataRequest
@@ -55,7 +55,7 @@ public void testMatchingSession() {
quote.getField("NoMDEntries[2].MDEntryPx").assertValueEquals(1.12335);
//Now send an order...");
- client.send("35=D|38=1000|59=1|100=N|40=1|11=ORD10001|60=20070123-19:01:17|55=AUD/USD|54=1|");
+ client.send("35=D|38=1000|59=1|100=N|40=1|11=ORD10001|60=20070123-19:01:17|55=AUD/USD|54=1|9004=asdf");
//Waiting for fill
final FixMessage fill = client.discardUntil(MsgTypes.ExecutionReport);
diff --git a/fix4j-assert-fixspec-50sp2/build.gradle b/fix4j-assert-fixspec-50sp2/build.gradle
new file mode 100644
index 0000000..5f86fac
--- /dev/null
+++ b/fix4j-assert-fixspec-50sp2/build.gradle
@@ -0,0 +1,12 @@
+description = ''
+dependencies {
+ compile project(':fix4j-assert-core')
+ testCompile(group: 'junit', name: 'junit', version: '4.12') {
+ exclude(module: 'hamcrest-core')
+ }
+ testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
+ testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
+ testCompile(group: 'org.mockito', name: 'mockito-core', version: '2.0.31-beta') {
+ exclude(module: 'hamcrest-core')
+ }
+}
diff --git a/fix4j-assert-fixspec-50sp2/pom.xml b/fix4j-assert-fixspec-50sp2/pom.xml
deleted file mode 100644
index 132978d..0000000
--- a/fix4j-assert-fixspec-50sp2/pom.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-fixspec-50sp2
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
-
diff --git a/fix4j-assert-integration/build.gradle b/fix4j-assert-integration/build.gradle
new file mode 100644
index 0000000..047b270
--- /dev/null
+++ b/fix4j-assert-integration/build.gradle
@@ -0,0 +1,7 @@
+
+description = ''
+dependencies {
+ compile project(':fix4j-assert-core')
+ compile project(':fix4j-assert-fixspec-50sp2')
+ compile project(':fix4j-assert-testcommon')
+}
diff --git a/fix4j-assert-integration/pom.xml b/fix4j-assert-integration/pom.xml
deleted file mode 100644
index c68d217..0000000
--- a/fix4j-assert-integration/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-integration
-
-
-
-
-
- org.codehaus.gmaven
- gmaven-plugin
-
-
-
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
- org.fix4j
- fix4j-assert-fixspec-50sp2
- 1.3
-
-
- org.fix4j
- fix4j-assert-testcommon
- 1.3
-
-
-
diff --git a/fix4j-assert-quickfix/build.gradle b/fix4j-assert-quickfix/build.gradle
new file mode 100644
index 0000000..bacf7f3
--- /dev/null
+++ b/fix4j-assert-quickfix/build.gradle
@@ -0,0 +1,9 @@
+
+description = ''
+dependencies {
+ compile project(':fix4j-assert-core')
+ compile group: 'org.apache.servicemix.bundles', name: 'org.apache.servicemix.bundles.quickfix', version:'1.5.3_1'
+ compile group: 'org.apache.mina', name: 'mina-core', version:'1.1.0'
+ testCompile project(':fix4j-assert-fixspec-50sp2')
+ testCompile project(':fix4j-assert-testcommon')
+}
diff --git a/fix4j-assert-quickfix/pom.xml b/fix4j-assert-quickfix/pom.xml
deleted file mode 100644
index 4f0dd83..0000000
--- a/fix4j-assert-quickfix/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-quickfix
-
-
-
- org.fix4j
- fix4j-assert-core
- 1.3
-
-
- org.fix4j
- fix4j-assert-fixspec-50sp2
- 1.3
- test
-
-
- org.apache.servicemix.bundles
- org.apache.servicemix.bundles.quickfix
- 1.5.3_1
-
-
- org.apache.mina
- mina-core
- 1.1.0
-
-
- org.fix4j
- fix4j-assert-testcommon
- 1.3
- test
-
-
-
-
-
- MarketceteraRepo
- http://repo.marketcetera.org/maven
-
- true
-
-
-
-
diff --git a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixProperties.java b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixProperties.java
index a1dcd1c..8867ae3 100644
--- a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixProperties.java
+++ b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixProperties.java
@@ -16,7 +16,11 @@ public enum QuickFixProperties implements Keyable {
USE_DATA_DICTIONARY("fix4j.quickfix.use.data.dictionary"),
SOCKET_CONNECT_PORT("fix4j.quickfix.socket.connect.port"),
SOCKET_ACCEPT_PORT("fix4j.quickfix.socket.accept.port"),
- LOG_HEARTBEATS("fix4j.quickfix.log.heartbeats");
+ LOG_HEARTBEATS("fix4j.quickfix.log.heartbeats"),
+ ALLOW_UNKNOWN_MSG_FIELDS("fix4j.quickfix.allow.unknown.msg.fields"),
+ VALIDATE_FIELDS_OUT_OF_ORDER("fix4j.quickfix.validate.fields.out.of.order"),
+ VALIDATE_FIELDS_HAVE_VALUES("fix4j.quickfix.validate.fields.have.values"),
+ VALIDATE_USER_DEFINED_FIELDS("fix4j.quickfix.validate.user.defined.fields");
private final String key;
diff --git a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixTestSessionFactory.java b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixTestSessionFactory.java
index dd550c5..80e0451 100644
--- a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixTestSessionFactory.java
+++ b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/QuickFixTestSessionFactory.java
@@ -39,27 +39,32 @@ public FixEngineSession createSession(final FixSessionId sessionId, final FixCon
private Connector create(final SessionID quickfixSessionId, final QuickFixApplication app, final FixConnectionMode fixConnectionMode){
try {
+ final ApplicationProperties properties = ApplicationProperties.Singleton.instance();
final SessionSettings settings = new SessionSettings();
settings.setString("ConnectionType", (fixConnectionMode == FixConnectionMode.INITIATOR ? "initiator": "acceptor"));
settings.setString("SenderCompID", quickfixSessionId.getSenderCompID());
settings.setString("TargetCompID", quickfixSessionId.getTargetCompID());
- settings.setString("SocketConnectHost", ApplicationProperties.Singleton.instance().getAsString(QuickFixProperties.SOCKET_CONNECT_HOST, "localhost"));
- settings.setString("StartTime", ApplicationProperties.Singleton.instance().getAsString("quickfix.start.time", "00:00:00"));
- settings.setString("EndTime", ApplicationProperties.Singleton.instance().getAsString("quickfix.end.time", "00:00:00"));
- settings.setString("HeartBtInt", ApplicationProperties.Singleton.instance().getAsString("quickfix.heart.beat.interval", "10"));
+ settings.setString("SocketConnectHost", properties.getAsString(QuickFixProperties.SOCKET_CONNECT_HOST, "localhost"));
+ settings.setString("StartTime", properties.getAsString(QuickFixProperties.START_TIME, "00:00:00"));
+ settings.setString("EndTime", properties.getAsString(QuickFixProperties.END_TIME, "00:00:00"));
+ settings.setString("HeartBtInt", properties.getAsString(QuickFixProperties.HEART_BEAT_INTERVAL, "10"));
settings.setString("BeginString", quickfixSessionId.getBeginString());
- settings.setString("ReconnectInterval", ApplicationProperties.Singleton.instance().getAsString("quickfix.reconnect.interval", "5"));
- settings.setString("UseDataDictionary", ApplicationProperties.Singleton.instance().getAsString("quickfix.use.data.dictionary", "Y"));
+ settings.setString("ReconnectInterval", properties.getAsString(QuickFixProperties.RECONNECT_INTERVAL, "5"));
+ settings.setString("UseDataDictionary", properties.getAsString(QuickFixProperties.USE_DATA_DICTIONARY, "Y"));
+ settings.setString("AllowUnknownMsgFields", properties.getAsString(QuickFixProperties.ALLOW_UNKNOWN_MSG_FIELDS, "Y"));
+ settings.setString("ValidateFieldsOutOfOrder", properties.getAsString(QuickFixProperties.VALIDATE_FIELDS_OUT_OF_ORDER, "N"));
+ settings.setString("ValidateFieldsHaveValues", properties.getAsString(QuickFixProperties.VALIDATE_FIELDS_HAVE_VALUES, "N"));
+ settings.setString("ValidateUserDefinedFields", properties.getAsString(QuickFixProperties.VALIDATE_USER_DEFINED_FIELDS, "N"));
if(fixConnectionMode == FixConnectionMode.INITIATOR) {
- settings.setString(quickfixSessionId, "SocketConnectPort", ApplicationProperties.Singleton.instance().getAsString("quickfix.socket.connect.port", "9880"));
+ settings.setString(quickfixSessionId, "SocketConnectPort", properties.getAsString(QuickFixProperties.SOCKET_CONNECT_PORT, "9880"));
} else if(fixConnectionMode == FixConnectionMode.ACCEPTOR){
- settings.setString(quickfixSessionId, "SocketAcceptPort", ApplicationProperties.Singleton.instance().getAsString("quickfix.socket.accept.port", "9880"));
+ settings.setString(quickfixSessionId, "SocketAcceptPort", properties.getAsString(QuickFixProperties.SOCKET_ACCEPT_PORT, "9880"));
} else {
throw new IllegalArgumentException("Unknown mode:" + fixConnectionMode);
}
- final boolean logHeartbeats = ApplicationProperties.Singleton.instance().getAsBoolean("quickfix.log.heartbeats", true);
+ final boolean logHeartbeats = properties.getAsBoolean(QuickFixProperties.LOG_HEARTBEATS, true);
final MemoryStoreFactory messageStoreFactory = new MemoryStoreFactory();
final ScreenLogFactory logFactory = new ScreenLogFactory(true, true, true, logHeartbeats);
final DefaultMessageFactory messageFactory = new DefaultMessageFactory();
diff --git a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/ToQuickFixMessageConverter.java b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/ToQuickFixMessageConverter.java
index 6b84256..2155a0e 100644
--- a/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/ToQuickFixMessageConverter.java
+++ b/fix4j-assert-quickfix/src/main/java/org/fix4j/test/integration/quickfix/ToQuickFixMessageConverter.java
@@ -1,5 +1,6 @@
package org.fix4j.test.integration.quickfix;
+import org.fix4j.test.fixspec.FieldType;
import org.fix4j.test.fixspec.GroupType;
import org.fix4j.test.integration.MessageConverter;
import org.fix4j.test.fixmodel.Field;
@@ -69,7 +70,13 @@ private void addGroupToQuickfixFieldMap(final org.fix4j.test.fixmodel.Group fixT
}
private void addFieldToQuickfixFieldMap(final Field field, final FieldMap fieldMap) {
- final FieldClass fieldClass = fixSpecification.getFieldTypeByTag(field.getTag()).getFieldClass();
+ final FieldType fieldType = fixSpecification.getFieldTypeByTag(field.getTag());
+ if(fieldType == null){
+ fieldMap.setString(field.getTag().getValue(), field.getValue());
+ return;
+ }
+
+ final FieldClass fieldClass = fieldType.getFieldClass();
switch (fieldClass) {
case TZTIMESTAMP:
diff --git a/fix4j-assert-testcommon/build.gradle b/fix4j-assert-testcommon/build.gradle
new file mode 100644
index 0000000..e1c2f28
--- /dev/null
+++ b/fix4j-assert-testcommon/build.gradle
@@ -0,0 +1,17 @@
+
+description = ''
+dependencies {
+ compile(group: 'junit', name: 'junit', version:'4.11') {
+exclude(module: 'hamcrest-core')
+ }
+ compile group: 'org.codehaus.groovy', name: 'groovy-all', version:'2.3.8'
+ compile group: 'org.apache.maven.surefire', name: 'surefire-junit4', version:'2.17'
+ compile(group: 'org.spockframework', name: 'spock-maven', version:'0.7-groovy-2.0') {
+exclude(module: 'surefire-junit47')
+ }
+ testCompile group: 'org.hamcrest', name: 'hamcrest-core', version:'1.3'
+ testCompile group: 'org.hamcrest', name: 'hamcrest-library', version:'1.3'
+ testCompile(group: 'org.mockito', name: 'mockito-core', version:'2.0.31-beta') {
+exclude(module: 'hamcrest-core')
+ }
+}
diff --git a/fix4j-assert-testcommon/pom.xml b/fix4j-assert-testcommon/pom.xml
deleted file mode 100644
index 3d60564..0000000
--- a/fix4j-assert-testcommon/pom.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
- fix4j-assert
- org.fix4j
- 1.3
-
- 4.0.0
-
- fix4j-assert-testcommon
-
-
-
-
-
- org.codehaus.gmaven
- gmaven-plugin
- 1.4
-
- 2.0
-
-
-
-
- compile
- testCompile
-
-
-
-
-
- org.codehaus.gmaven.runtime
- gmaven-runtime-2.0
- 1.4
-
-
- org.codehaus.groovy
- groovy-all
-
-
-
-
- org.codehaus.groovy
- groovy-all
- 2.3.8
-
-
-
-
-
-
-
-
- junit
- junit
- 4.11
-
-
- org.codehaus.groovy
- groovy-all
- 2.3.8
-
-
- org.apache.maven.surefire
- surefire-junit4
- 2.17
-
-
- org.spockframework
- spock-maven
- 0.7-groovy-2.0
-
-
- org.apache.maven.surefire
- surefire-junit47
-
-
-
-
-
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..b22e5ef
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..ce15c64
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Jan 23 17:20:39 GMT 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..4453cce
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save ( ) {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index a65e3e4..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
- 4.0.0
-
-
- com.jcabi
- parent
- 0.38
-
-
- org.fix4j
- fix4j-assert
- pom
- 1.3
-
- fix4j-assert-core
- fix4j-assert-quickfix
- fix4j-assert-acceptance
- fix4j-assert-codegen
- fix4j-assert-fixspec-50sp2
- fix4j-assert-all
- fix4j-assert-testcommon
- fix4j-assert-integration
-
-
- ${project.groupId}:${project.artifactId}
- fix4j-assert is a library to assist in testing of applications using FIX protocol
- https://github.com/fix4j/fix4j-assert
-
-
-
- GNU General Public License (GPL)
- http://www.gnu.org/licenses/gpl.txt
-
-
-
-
-
- Ben Warner
- bjwarner@gmail.com
- fix4j
- http://www.fix4j.org
-
-
-
-
- https://github.com/fix4j/fix4j-assert
- scm:git:git://github.com/fix4j/fix4j-assert.git
- scm:git:git@github.com:fix4j/fix4j-assert.git
- HEAD
-
-
-
- 1.7
- 1.7
- UTF-8
- UTF-8
-
-
-
-
- org.slf4j
- slf4j-log4j12
- 1.3.0
-
-
- org.slf4j
- slf4j-api
- 1.3.0
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-report-plugin
- 2.18.1
-
-
-
-
-
-
-
- sonatype
-
-
-
- maven-javadoc-plugin
-
-
- jcabi-javadoc
- package
-
- jar
-
-
-
-
- org.fix4j.spec.fix50sp2.fieldtype.*
-
-
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.1
-
- 1.7
- 1.7
-
-
-
- org.codehaus.gmaven
- gmaven-plugin
- 1.4
-
- 2.0
-
-
-
-
- compile
- testCompile
-
-
-
-
-
- org.codehaus.gmaven.runtime
- gmaven-runtime-2.0
- 1.4
-
-
- org.codehaus.groovy
- groovy-all
-
-
-
-
- org.codehaus.groovy
- groovy-all
- 2.3.8
-
-
-
-
-
-
-
diff --git a/pubring.gpg.asc b/pubring.gpg.asc
deleted file mode 100644
index d098d3f..0000000
--- a/pubring.gpg.asc
+++ /dev/null
@@ -1,225 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
-Comment: GPGTools - http://gpgtools.org
-
-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
-=V+s2
------END PGP MESSAGE-----
diff --git a/secring.gpg.asc b/secring.gpg.asc
deleted file mode 100644
index 3e2c4ca..0000000
--- a/secring.gpg.asc
+++ /dev/null
@@ -1,100 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
-Comment: GPGTools - http://gpgtools.org
-
-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
-=HJPD
------END PGP MESSAGE-----
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..73db7c2
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,18 @@
+rootProject.name = 'fix4j-assert'
+include ':fix4j-assert-core'
+include ':fix4j-assert-quickfix'
+include ':fix4j-assert-acceptance'
+include ':fix4j-assert-codegen'
+include ':fix4j-assert-fixspec-50sp2'
+include ':fix4j-assert-all'
+include ':fix4j-assert-testcommon'
+include ':fix4j-assert-integration'
+
+project(':fix4j-assert-core').projectDir = "$rootDir/fix4j-assert-core" as File
+project(':fix4j-assert-quickfix').projectDir = "$rootDir/fix4j-assert-quickfix" as File
+project(':fix4j-assert-acceptance').projectDir = "$rootDir/fix4j-assert-acceptance" as File
+project(':fix4j-assert-codegen').projectDir = "$rootDir/fix4j-assert-codegen" as File
+project(':fix4j-assert-fixspec-50sp2').projectDir = "$rootDir/fix4j-assert-fixspec-50sp2" as File
+project(':fix4j-assert-all').projectDir = "$rootDir/fix4j-assert-all" as File
+project(':fix4j-assert-testcommon').projectDir = "$rootDir/fix4j-assert-testcommon" as File
+project(':fix4j-assert-integration').projectDir = "$rootDir/fix4j-assert-integration" as File
\ No newline at end of file
diff --git a/settings.xml.asc b/settings.xml.asc
deleted file mode 100644
index a9627a9..0000000
--- a/settings.xml.asc
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
-Comment: GPGTools - http://gpgtools.org
-
-hQEMA5qETcGag5w6AQf/Rl7RZumUuI0iR5pF4kfBG/4epfVOrxaUqZbBm9vaJW9+
-VrjyDur/39rGZgZnZTDz5c1RtrJNazL6h+RrYFrDYyNrFxFHyQ9FqHyNv6dJi5GZ
-rHkDF/QGfjF0sssZYkXD33ovHJJOURmY0egXMViZWWWaUy2G8yK1EqN+qPQG8lhm
-XVucZXPM1WejZV6gPCGNVdedglBugIN/HkHYST86WX8tgozt3B+A0cU4eGdz2Swk
-XbiFNkP8OT1Bi+P9q1lal4nsjf7tN3pucpHQx3DGWGUgptt3QEjthu20eB5Ddw5V
-6ifCdPACPLeM3eWMMXTKXfm/iMaNXm0U0YA7SdoWX9LpAf6ZlY26pw1+lynhrAfj
-CYluosqVfmSPkG63/t6uIQXfvzVkmYxgkBkitgg/Ri2sAdYUWr9SzOPO0NUMoarh
-VNtHj5Z85CzUvkhH9xZHsR2Sx/z7wucirpFLmjsdt+uRCeyVO9JL643VJZWyWk1j
-+jo4eJoeH3RHcipNq1y9qZgYKWDSrseA+uzJYuUvLJSpSeOKVvnef46ZF61iaAPO
-woQV8Gdb5DLOIYE8xy7zoK187Fdak5ZBGljF/y7Xyf4+UPFyUPdklbX0vJ/Yx7cm
-rwcvdBgBJFfKk+Z7BSlvmVN2pvbEWJ6WtXL+qkG/Vhe6RJiQMjx/0hvTvZQ5nb5p
-2rAmS/eb0dS3oU/1Aj6Z4fzTt7ME/q0ikNoxHyECS7L6QyaQwSOt+Tugc/LElM39
-dRfhFrR7M4d/iYwSVmyGSQOE8SE/hkYrbhF+A76KC4uK12nnnr+prRUEkQnM3NX3
-4ekP9Db5O7lFZcnArLFVlXVCUoOTmlZJ/7mISkXTV8NhLxw63FZUuFdRiJiX11fY
-lKmtqJdVK0V/0go+Wg/sbjoLPvmw0nEpPdr7O2t/Wj0iyw/Rx9OPHpTLXsckFQal
-dVwSErZBl/d5P4FOv49/qGLdSaCf5no+sJ91qIRv9n4PPwcEhYIZlpNTeYjNzT8E
-EYpz10MxzuMJTUCiyiarUThbV3gsKExxnLN5ISnbZVJYLZV3fACjQvHqgyshDqAN
-p48a63xxeqWsL1lx1/lJtm3MpKLhCnOgIaW4ojd8Sg6d2ranPkFjWwlqRD82cJq1
-MK4T0iJE73jiPLo1sA==
-=S5CD
------END PGP MESSAGE-----
diff --git a/todo.txt b/todo.txt
deleted file mode 100644
index 0334374..0000000
--- a/todo.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-00001 DONE When a plain old assertion error occurs in a test, would be good to see the other "reportables" showing their details. Could probably use a @RunWith annotation to pick up on AssertionErrors
-00002 DONE TEST THIS: Be able to configure test settings at the start of a test method, or at the start of a test class, or at the start of a JUnit run??.
-00003 DONE Consts (applicationProperties) to print out all it's values, and where they are sourced from.
-00004 DONE Rename Consts to "Configuration" or "ApplicationProperties" or something.
-00005 DONE Add a ApplicationPropertiesSource interface. Implement it for env variables, system variables, defaults, testMethodSettings, testClassSettings, testRunSettings, etc.
-00006 DONE ??? Make MatchFailureTextFactory replaceable.
-00007 Look at http://java-performance.info/fix-message-processing-writing-a-fix-parser/
-00008 DONE Get rid of all System.out's
-00009 Finish mavenenization
-00010 Make all tests consistent, i.e. consistently spock or junit
-00011 DONE Package restructure/organization
-00012 Test coverage
-00013 Finish VariousMessageRepresentationsTest
-
-
-FAQ
-Do I need to populate header fields when creating a message?
-Do tests have to be written in either groovy or junit?
-
-
-
-
-