Index: java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java
===================================================================
--- java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java	(revision 78)
+++ java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java	(revision 78)
@@ -0,0 +1,77 @@
+package com.framsticks.parsers;
+
+import com.framsticks.model.*;
+import com.framsticks.model.Package;
+import com.framsticks.params.*;
+import com.framsticks.params.types.FloatParam;
+import com.framsticks.util.Point3d;
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+/**
+ * Author: Piotr Śniegowski
+ */
+public class F0ParserTest {
+
+	@Test
+	public void testParser() throws Exception {
+		PropertyConfigurator.configure(getClass().getResource("/log4j.properties"));
+		//testing schema
+		Schema schema = new Schema(Schema.getDefaultDefinitionAsStream());
+
+		{
+			FramsClass joint = schema.getRegistry().getInfoFromCache("j");
+			Param dx = joint.getParamEntry("dx");
+			assertEquals(FloatParam.class, dx.getClass());
+			assertEquals(21, schema.getNeuroClasses().size());
+			assertEquals("delta.x", dx.getName());
+			assertEquals(-2.0, dx.getMin(Double.class), 0.0);
+		}
+
+		Package.register(schema.getRegistry());
+		//testing parser
+		List<AccessInterface> accesses = new F0Parser(schema, F0ParserTest.class.getResourceAsStream("/parsers/f0_example.txt")).parse();
+
+		{
+			assertEquals(12, accesses.size());
+			assertTrue(accesses.get(0).getSelected() instanceof F0Genotype);
+			assertEquals("1,2,3,\"dsadsa,,,,", accesses.get(5).get("i", String.class));
+			assertEquals("|:p=0.25,r=1", accesses.get(7).get("d", String.class));
+			assertEquals("@:p=0.25", accesses.get(10).get("d", String.class));
+		}
+
+		List<Object> objects = Util.stripAccessInterface(accesses);
+		{
+			assertEquals(Part.class, objects.get(1).getClass());
+			assertEquals(Joint.class, objects.get(4).getClass());
+			assertEquals(NeuroDef.class, objects.get(6).getClass());
+		}
+
+		F0Genotype f0Genotype = Genotype.build(objects);
+		{
+			assertEquals(3, f0Genotype.getParts().size());
+			assertEquals(6, f0Genotype.getNeuroDefs().size());
+			assertEquals(2, f0Genotype.getJoints().size());
+
+			assertEquals(new Integer(0), f0Genotype.getJoints().get(0).part1);
+			assertEquals(new Integer(1), f0Genotype.getJoints().get(0).part2);
+			assertEquals(new Integer(1), f0Genotype.getNeuroDefs().get(0).part);
+			assertEquals(new Integer(-1), f0Genotype.getNeuroDefs().get(0).joint);
+			assertEquals("|:p=0.25,r=1", f0Genotype.getNeuroDefs().get(1).details);
+			assertEquals("N", f0Genotype.getNeuroDefs().get(3).details);
+			assertEquals(new Integer(-1), f0Genotype.getNeuroDefs().get(4).part);
+		}
+
+		F0Model f0model = F0Model.build(f0Genotype);
+		{
+			assertEquals(2.0, f0model.getMechParts().get(1).getPosition().x, 0.0);
+			assertTrue(f0model.getMechParts().get(2).getPosition().sub(new Point3d(2.27236, -0.0792596, -0.958924)).length() < 0.0001);
+			assertTrue(f0model.getMechParts().get(2).getOrientation().y.sub(new Point3d(0.870277, -0.404792, 0.280644)).length() < 0.0001);
+		}
+
+	}
+}
Index: java/main/src/test/resources/log4j.properties
===================================================================
--- java/main/src/test/resources/log4j.properties	(revision 78)
+++ java/main/src/test/resources/log4j.properties	(revision 78)
@@ -0,0 +1,28 @@
+# -------------------------------------------------------------------
+# Global logger configuration
+# -------------------------------------------------------------------
+#log4j.rootLogger=INFO, STDOUT, FILE
+log4j.rootLogger=DEBUG, STDOUT
+
+
+# -------------------------------------------------------------------
+# Disable certain libraries from spamming the output
+# -------------------------------------------------------------------
+
+# Apache commons
+log4j.logger.org.apache.commons=WARN
+
+# HttpClient
+log4j.logger.httpclient=WARN
+
+# -------------------------------------------------------------------
+# Define appenders.
+# -------------------------------------------------------------------
+
+# A plain console appender
+log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
+log4j.appender.STDOUT.Target=System.out
+log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
+log4j.appender.STDOUT.layout.ConversionPattern=%d{ABSOLUTE} [%-5p] [%t] %c -- %m%n
+
+log4j.logger.com.framsticks=INFO
Index: java/main/src/test/resources/parsers/f0_example.txt
===================================================================
--- java/main/src/test/resources/parsers/f0_example.txt	(revision 78)
+++ java/main/src/test/resources/parsers/f0_example.txt	(revision 78)
@@ -0,0 +1,20 @@
+//0
+
+p:
+p:i=,Vstyle=
+p:m=1,i="bla"
+j:0,1,dx=2
+j:1,2,dx=1,rx=3,i="1,2,3,\"dsadsa,,,,",rx=8,,9,ry=5,6
+n:p=1
+n:j=0,d="|:p=0.25,r=1"
+n:j=0,d=G
+n:p=1
+n:j=0,d=@:p=0.25
+n:p=1,d=Nu
+#c:0,2
+#c:0,2,5.4
+#c:1,0
+#c:2,0,3.4
+#c:0,1,4.5
+#c:1,0,5.6
+#c:2,1
