aboutsummaryrefslogtreecommitdiffstats
path: root/src/junit
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-06-14 04:40:39 +0200
committerSven Gothel <[email protected]>2013-06-14 04:40:39 +0200
commita7802a2ab90a68ecbba962149a335f975fce24e7 (patch)
treea702cdf0e35e36f6e2bf042b6325c3f435c5b65c /src/junit
parent3cf28f2980b1593e4b32230d5206decd6afe2cbb (diff)
GlueGen (Compile Time): Add 'CStruct' Annotation Processor (APT) to 'gluegen' C Structs on-the-fly (2-pass actually).
Convenient annotation processing (APT) hooked to 'javac' (1.6) via gluegen.jar META-INF service provider 'javax.annotation.processing.Processor' -> 'com.jogamp.gluegen.structgen.CStructAnnotationProcessor'. Am implicit APT / JAVAC would be possible, however - to have a proper process the unit test utilizes an explicit 2 pass run: <!-- Annotation Processor Only - First --> <javac destdir="${build_t.java}"> <classpath refid="junit.compile.classpath"/> <compilerarg value="-proc:only"/> <compilerarg value="-J-Djogamp.gluegen.structgen.debug"/> <compilerarg value="-J-Djogamp.gluegen.structgen.output=${build_t.gen}/classes"/> <src path="${test.base.dir}/com/jogamp/gluegen/test/junit/structgen"/> </javac> <!-- Javac Only - Second --> <javac destdir="${build_t.java}"> <classpath refid="junit.compile.classpath"/> <compilerarg value="-proc:none"/> <src path="${test.base.dir}"/> <src path="${build_t.gen}" /> </javac> Original code from Michael Bien's 'superglue' git://github.com/mbien/superglue.git, finally merged to GlueGen (as once intended). Note: The APT javac pass requires to use 'gluegen.jar' instead of 'gluegen-rt.jar' ! The 2-pass process also alows using the runtime gluegen-rt.jar and hence ensures clean namespace check at compilation.
Diffstat (limited to 'src/junit')
-rw-r--r--src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h24
-rw-r--r--src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java51
2 files changed, 75 insertions, 0 deletions
diff --git a/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h
new file mode 100644
index 0000000..6ad77d9
--- /dev/null
+++ b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h
@@ -0,0 +1,24 @@
+//
+// TestStruct01.h
+//
+
+typedef struct {
+ float x, y, z;
+} Vec3f;
+
+typedef struct {
+ Vec3f orig, dir;
+} Camera;
+
+typedef struct {
+ unsigned int width, height;
+ int superSamplingSize;
+ int actvateFastRendering;
+ int enableShadow;
+
+ unsigned int maxIterations;
+ float epsilon;
+ float mu[4];
+ float light[3];
+ Camera camera;
+} RenderingConfig;
diff --git a/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java
new file mode 100644
index 0000000..444593d
--- /dev/null
+++ b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java
@@ -0,0 +1,51 @@
+package com.jogamp.gluegen.test.junit.structgen;
+
+import com.jogamp.gluegen.structgen.CStruct;
+import com.jogamp.junit.util.JunitTracer;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestStructGen01 extends JunitTracer {
+
+ // APT is only triggered for fields,
+ // hence we use unused fields in this unit test!
+
+ // @CStruct(name="RenderingConfig", header="TestStruct01.h")
+ // MyRenderingConfig config;
+
+ @CStruct(header="TestStruct01.h")
+ RenderingConfig config0;
+
+ @Test
+ public void test01() {
+ RenderingConfig config = RenderingConfig.create();
+ Vec3f dir = config.getCamera().getDir();
+ dir.setX(0.5f);
+ dir.setY(0.6f);
+ dir.setZ(0.7f);
+ Vec3f dir2 = Vec3f.create(dir.getBuffer());
+ Assert.assertEquals(dir.getX(), dir2.getX(), 0.0001f);
+ Assert.assertEquals(dir.getY(), dir2.getY(), 0.0001f);
+ Assert.assertEquals(dir.getZ(), dir2.getZ(), 0.0001f);
+ }
+
+ @Test
+ public void test02() {
+ Camera cam = Camera.create();
+ Vec3f cam_dir = cam.getDir();
+ Vec3f cam_orig = cam.getOrig();
+ cam_dir.setX(1);
+ cam_dir.setY(2);
+ cam_dir.setZ(3);
+ cam_orig.setX(0);
+ cam_orig.setY(1);
+ cam_orig.setZ(2);
+ }
+
+ public static void main(String args[]) {
+ String tstname = TestStructGen01.class.getName();
+ org.junit.runner.JUnitCore.main(tstname);
+ }
+
+}