Bug 267354:
* Improve test
* Fix
diff --git a/plugins/org.eclipse.gmf.graphdef.codegen/templates/Children.xpt b/plugins/org.eclipse.gmf.graphdef.codegen/templates/Children.xpt
index c2abf83..49cd9f4 100644
--- a/plugins/org.eclipse.gmf.graphdef.codegen/templates/Children.xpt
+++ b/plugins/org.eclipse.gmf.graphdef.codegen/templates/Children.xpt
@@ -28,13 +28,22 @@
«ENDDEFINE»
«DEFINE instantiate(count : Integer, parentFigure : gmfgraph::RealFigure, parentFigureVariable : String) FOR gmfgraph::FigureRef-»
-/*FIXME referenced figures are just not yet fully-functional; need process attrs and layout here*/
+«LET figureVariableName(figure, count) AS figureVarName»
«EXPAND instantiate(count, parentFigure, parentFigureVariable) FOR figure-»
+// Process FigureRef details
+«EXPAND populate(count, parentFigure, parentFigureVariable, figureVarName) FOR self-»
+«ENDLET»
«ENDDEFINE»
«DEFINE instantiate(count : Integer, parentFigure : gmfgraph::RealFigure, parentFigureVariable : String) FOR gmfgraph::RealFigure»
«LET figureVariableName(self, count) AS figureVarName»
«EXPAND newFigureInstance(figureVarName)»
+«EXPAND populate(count, parentFigure, parentFigureVariable, figureVarName) FOR self-»
+«EXPAND instantiate(count + 1, self, figureVarName) FOREACH children-»
+«ENDLET»
+«ENDDEFINE»
+
+«DEFINE populate(count : Integer, parentFigure : gmfgraph::RealFigure, parentFigureVariable : String, figureVarName : String) FOR gmfgraph::Figure»
«EXPAND Attrs::Init(figureVarName)-»
«IF null = layoutData or null = parentFigure.layout-»«REM»Check for (parentLayout != null) to avoid generating data that won't be used. Not sure it's essential, but it was that way with old jet templates«ENDREM»
«parentFigureVariable».add(«figureVarName»);
@@ -42,8 +51,6 @@
«EXPAND LayoutData::Init(parentFigureVariable, figureVarName) FOR layoutData-»
«ENDIF-»
«EXPAND Layout::Init(figureVarName) FOR layout-»
-«EXPAND instantiate(count + 1, self, figureVarName) FOREACH children-»
-«ENDLET»
«ENDDEFINE»
«DEFINE newFigureInstance(figureVarName : String) FOR gmfgraph::RealFigure»«IF needsField(self)»«figureVarName» = «EXPAND Runtime::newInstance»;«ELSE»«EXPAND Runtime::newInstance(figureVarName)»«ENDIF»«ENDDEFINE»
diff --git a/plugins/org.eclipse.gmf.graphdef.codegen/templates/top/Figure.xpt b/plugins/org.eclipse.gmf.graphdef.codegen/templates/top/Figure.xpt
index f8f88d2..4653831 100644
--- a/plugins/org.eclipse.gmf.graphdef.codegen/templates/top/Figure.xpt
+++ b/plugins/org.eclipse.gmf.graphdef.codegen/templates/top/Figure.xpt
@@ -17,10 +17,14 @@
«DEFINE ClassBody(cuName : String) FOR gmfgraph::Figure»«ERROR 'abstract ClassBody(Figure)'»«ENDDEFINE»
«DEFINE ClassBody(cuName : String) FOR gmfgraph::FigureRef-»
-«EXPAND ClassBody(cuName) FOR figure-»
+«EXPAND ClassBody(cuName, self) FOR figure-»
«ENDDEFINE»
«DEFINE ClassBody(cuName : String) FOR gmfgraph::RealFigure-»
+«EXPAND ClassBody(cuName, null) FOR self-»
+«ENDDEFINE»
+
+«DEFINE ClassBody(cuName : String, figureRef : gmfgraph::FigureRef) FOR gmfgraph::RealFigure-»
/**
* @generated
*/
@@ -28,6 +32,12 @@
«clearBorders()-»
«EXPAND Layout::Init('this') FOR layout-»
«EXPAND Attrs::Init('this')-»
+«IF not figureRef->isEmpty()-»
+ // «figureRef.figure.name»
+ // Process FigureRef details
+ «EXPAND Layout::Init('this') FOR figureRef.layout-»
+ «EXPAND Attrs::Init('this') FOR figureRef-»
+«ENDIF-»
«IF not (children)[gmfgraph::Figure]->isEmpty()-»
createContents();
}
@@ -40,7 +50,7 @@
«EXPAND additions-»
«ENDDEFINE»
-«DEFINE ClassBody(cuName : String) FOR gmfgraph::PolylineConnection-»
+«DEFINE ClassBody(cuName : String, figureRef : gmfgraph::FigureRef) FOR gmfgraph::PolylineConnection-»
/**
* @generated
*/
diff --git a/tests/org.eclipse.gmf.tests/models/tests/267354-FigureRefChildren.gmfgraph b/tests/org.eclipse.gmf.tests/models/tests/267354-FigureRefChildren.gmfgraph
index dbaeacc..5515c06 100644
--- a/tests/org.eclipse.gmf.tests/models/tests/267354-FigureRefChildren.gmfgraph
+++ b/tests/org.eclipse.gmf.tests/models/tests/267354-FigureRefChildren.gmfgraph
@@ -2,13 +2,14 @@
<gmfgraph:Canvas xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:gmfgraph="http://www.eclipse.org/gmf/2006/GraphicalDefinition">
- <figures>
+ xmlns:gmfgraph="http://www.eclipse.org/gmf/2006/GraphicalDefinition" name="">
+ <figures
+ name="">
<figures
xsi:type="gmfgraph:Rectangle"
name="figure"/>
<descriptors
- name="desc">
+ name="DirectFigureRef">
<actualFigure
xsi:type="gmfgraph:FigureRef"
figure="//@figures.0/@figures.0">
@@ -17,8 +18,34 @@
value="lightGreen"/>
</actualFigure>
</descriptors>
+ <descriptors
+ name="ChildFigureRef">
+ <actualFigure
+ xsi:type="gmfgraph:Rectangle">
+ <layout
+ xsi:type="gmfgraph:XYLayout"/>
+ <children
+ xsi:type="gmfgraph:FigureRef"
+ figure="//@figures.0/@figures.0">
+ <foregroundColor
+ xsi:type="gmfgraph:ConstantColor"
+ value="lightGreen"/>
+ </children>
+ </actualFigure>
+ </descriptors>
+ <descriptors
+ name="NoRefFigure">
+ <actualFigure
+ xsi:type="gmfgraph:Rectangle"/>
+ </descriptors>
</figures>
<nodes
- name="node"
- figure="desc"/>
+ name="DirectFigureRefNode"
+ figure="DirectFigureRef"/>
+ <nodes
+ name="ChildFigureRefNode"
+ figure="ChildFigureRef"/>
+ <nodes
+ name="NoRefNode"
+ figure="NoRefFigure"/>
</gmfgraph:Canvas>
diff --git a/tests/org.eclipse.gmf.tests/pom.xml b/tests/org.eclipse.gmf.tests/pom.xml
index 2299afa..8356f81 100644
--- a/tests/org.eclipse.gmf.tests/pom.xml
+++ b/tests/org.eclipse.gmf.tests/pom.xml
@@ -52,7 +52,15 @@
<useUIThread>true</useUIThread>
</configuration>
</execution>
+ <execution>
+ <!-- Skip default test -->
+ <id>default-test</id>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </execution>
</executions>
+ <!-- Inherited configuration -->
<configuration>
<useUIHarness>true</useUIHarness>
<testSuite>org.eclipse.gmf.tests</testSuite>
diff --git a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/swtbot/FigureGenerationTest.java b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/swtbot/FigureGenerationTest.java
index 95dbdbd..cc2fc97 100644
--- a/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/swtbot/FigureGenerationTest.java
+++ b/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/gen/swtbot/FigureGenerationTest.java
@@ -63,17 +63,55 @@
return null;
}
}, 40000);
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- try {
- IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("org.eclipse.gmf.testProjectBug267354").getFile(new Path("src/org/eclipse/gmf/testProjectBug267354/Desc.java"));
- IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file);
- } catch (Exception ex) {
- ex.printStackTrace();
+ {
+ // Check in ChildFigureRef
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("org.eclipse.gmf.testProjectBug267354").getFile(new Path("src/org/eclipse/gmf/testProjectBug267354/ChildFigureRef.java"));
+ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
}
- }
- });
- Assert.assertTrue("Did not find specified background color attribute", bot.editorByTitle("Desc.java").toTextEditor().getText().contains("ColorConstants.lightGreen"));
+ });
+ String generatedCode = bot.editorByTitle("ChildFigureRef.java").toTextEditor().getText();
+ Assert.assertTrue("No mention of FigureRef details", generatedCode.contains("Process FigureRef details"));
+ Assert.assertTrue("Did not find specified background color attribute", generatedCode.contains("ColorConstants.lightGreen"));
+ }
+ {
+ // Check in DirectFigureRef
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("org.eclipse.gmf.testProjectBug267354").getFile(new Path("src/org/eclipse/gmf/testProjectBug267354/DirectFigureRef.java"));
+ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ });
+ String generatedCode = bot.editorByTitle("DirectFigureRef.java").toTextEditor().getText();
+ Assert.assertTrue("No mention of FigureRef details", generatedCode.contains("Process FigureRef details"));
+ Assert.assertTrue("Did not find specified background color attribute", generatedCode.contains("ColorConstants.lightGreen"));
+ }
+ {
+ // Check in NoRefFigure: no change for figures without Ref
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("org.eclipse.gmf.testProjectBug267354").getFile(new Path("src/org/eclipse/gmf/testProjectBug267354/NoRefFigure.java"));
+ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ });
+ String generatedCode = bot.editorByTitle("NoRefFigure.java").toTextEditor().getText();
+ Assert.assertFalse("Mention of 'FigureRef details' in figure without Ref!", generatedCode.contains("Process FigureRef details"));
+ }
}
}