public void testCustomPreferences() throws Exception { DiaGenSource s = createLibraryGen(false); final GenDiagram gd = s.getGenDiagram(); GenCustomPreferencePage pp = GMFGenFactory.eINSTANCE.createGenCustomPreferencePage(); if (gd.getPreferencePages().isEmpty()) { gd.getPreferencePages().add(pp); } else { gd.getPreferencePages().get(0).getChildren().add(pp); } pp.setGenerateBoilerplate(true); pp.setName("Page Name"); pp.setQualifiedClassName( gd.getEditorGen().getEditor().getPackageName() + ".CustomPreferencePage"); GenPreference p1 = GMFGenFactory.eINSTANCE.createGenPreference(); p1.setName("PREF_XXX_ONE"); p1.setDefaultValue("\"XXX_ONE_DEFAULT\""); GenPreference p2 = GMFGenFactory.eINSTANCE.createGenPreference(); p2.setName("NO_PREFIX_XXX_TWO"); p2.setKey("KEY.XXX.TWO"); pp.getPreferences().add(p1); pp.getPreferences().add(p2); // generateAndCompile(s); // IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(gd.getEditorGen().getPlugin().getID()); IFile file_pp = generatedProject.getFile("/src/" + pp.getQualifiedClassName().replace('.', '/') + ".java"); assertTrue(file_pp.exists()); ICompilationUnit cuPage = (ICompilationUnit) JavaCore.create(file_pp); assertNotNull(cuPage); IType mainClass = cuPage.getTypes()[0]; assertNotNull(mainClass); assertEquals(2, mainClass.getFields().length); final IField p1field = mainClass.getField(p1.getName()); final IField p2field = mainClass.getField(p2.getName()); assertTrue(Flags.isPublic(p1field.getFlags())); assertTrue(Flags.isStatic(p1field.getFlags())); assertTrue(Flags.isPublic(p2field.getFlags())); assertTrue(Flags.isStatic(p2field.getFlags())); assertEquals('"' + p1.getKey() + '"', p1field.getConstant()); assertEquals('"' + p2.getKey() + '"', p2field.getConstant()); IMethod initMethod = mainClass.getMethod( "initDefaults", new String[] {"Q" + IPreferenceStore.class.getSimpleName() + ";"}); assertNotNull(initMethod); String methodText = initMethod.getSource(); assertTrue(methodText.indexOf(p1.getName()) != -1); assertTrue(methodText.indexOf(p1.getDefaultValue()) != -1); assertTrue(methodText.indexOf(p2.getName()) == -1); }
public void testPreferencePages() throws Exception { DiaGenSource s = createLibraryGen(false); final GenDiagram gd = s.getGenDiagram(); // Part 1: compile all standard GenStandardPreferencePage[] p = new GenStandardPreferencePage[StandardPreferencePages.values().length]; assertTrue("sanity", p.length > 5); for (int i = 0; i < p.length; i++) { p[i] = GMFGenFactory.eINSTANCE.createGenStandardPreferencePage(); p[i].setClassName("Page" + i); p[i].setKind(StandardPreferencePages.values()[i]); if (i > 0) { p[i - 1].getChildren().add(p[i]); } } gd.getPreferencePages().clear(); gd.getPreferencePages().add(p[0]); generateAndCompile(s); GenPlugin gp = gd.getEditorGen().getPlugin(); IProject generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(gp.getID()); IFile generatedManifest = generatedProject.getFile("plugin.xml"); assertTrue(generatedManifest.exists()); XPathFactory xf = XPathFactory.newInstance(); XPathExpression xe = xf.newXPath().compile("/plugin/extension[@point = 'org.eclipse.ui.preferencePages']/page"); NodeList result = (NodeList) xe.evaluate(new InputSource(generatedManifest.getContents()), XPathConstants.NODESET); assertEquals(p.length, result.getLength()); // // Part 2: generateBoilerplate and subset of pages gp.setID(gp.getID() + ".boilerplateprefpage"); gd.getPreferencePages().clear(); GenCustomPreferencePage cp1 = GMFGenFactory.eINSTANCE.createGenCustomPreferencePage(); cp1.setQualifiedClassName(gd.getPreferencesPackageName() + ".CustomPageNoCodeGenerated"); cp1.setGenerateBoilerplate(false); GenCustomPreferencePage cp2 = GMFGenFactory.eINSTANCE.createGenCustomPreferencePage(); cp2.setQualifiedClassName(gd.getPreferencesPackageName() + ".CustomPageWithBoilerplateCode"); cp2.setGenerateBoilerplate(true); GenStandardPreferencePage onePage = GMFGenFactory.eINSTANCE.createGenStandardPreferencePage(); onePage.setKind(StandardPreferencePages.CONNECTIONS_LITERAL); onePage.getChildren().add(cp1); onePage.getChildren().add(cp2); gd.getPreferencePages().add(onePage); generateAndCompile(s); generatedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(gp.getID()); generatedManifest = generatedProject.getFile("plugin.xml"); assertTrue(generatedManifest.exists()); // check all three have been registered result = (NodeList) xe.evaluate(new InputSource(generatedManifest.getContents()), XPathConstants.NODESET); assertEquals(3, result.getLength()); HashSet<String> names = new HashSet<String>(); names.add(onePage.getQualifiedClassName()); names.add(cp1.getQualifiedClassName()); names.add(cp2.getQualifiedClassName()); assertTrue("sanity", names.size() == 3); for (int i = 0; i < result.getLength(); i++) { String className = result.item(i).getAttributes().getNamedItem("class").getNodeValue(); assertTrue(className, names.remove(className)); } assertTrue(names.isEmpty()); // check real files IFile file_sp = generatedProject.getFile( "/src/" + onePage.getQualifiedClassName().replace('.', '/') + ".java"); IFile file_cp1 = generatedProject.getFile("/src/" + cp1.getQualifiedClassName().replace('.', '/') + ".java"); IFile file_cp2 = generatedProject.getFile("/src/" + cp2.getQualifiedClassName().replace('.', '/') + ".java"); assertTrue(file_sp.exists()); assertTrue(file_cp2.exists()); assertFalse(file_cp1.exists()); }