/******************************************************************************* * Copyright (c) 2006, 2008 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.core.tests.internal.model; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.InputStream; import junit.framework.TestCase; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jpt.core.JpaProject; import org.eclipse.jpt.core.JptCorePlugin; import org.eclipse.jpt.core.internal.GenericJpaModel; import org.eclipse.jpt.core.internal.JpaModelManager; import org.eclipse.jpt.core.tests.internal.projects.TestFacetedProject; import org.eclipse.jpt.core.tests.internal.projects.TestJavaProject; import org.eclipse.jpt.core.tests.internal.projects.TestPlatformProject; import org.eclipse.jpt.utility.internal.ClassTools; @SuppressWarnings("nls") public class JpaModelTests extends TestCase { /** carriage return */ public static final String CR = System.getProperty("line.separator"); protected TestFacetedProject testProject; public JpaModelTests(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); if (this.debug()) { this.printName(); } this.testProject = this.buildTestProject(); } private boolean debug() { Boolean debug = (Boolean) ClassTools.staticFieldValue(JpaModelManager.class, "DEBUG"); return debug.booleanValue(); } private void printName() { String name = this.getName(); System.out.println(); System.out.println(); this.printNameBorder(name); System.out.println(name); this.printNameBorder(name); } private void printNameBorder(String name) { for (int i = name.length(); i-- > 0; ) { System.out.print('='); } System.out.println(); } @Override protected void tearDown() throws Exception { this.testProject.getProject().delete(true, true, null); this.testProject = null; super.tearDown(); } /** * Builds a project with the java and utility facets installed, and with * pre-existing entities added. */ private TestFacetedProject buildTestProject() throws Exception { TestJavaProject testProject = TestJavaProject.buildJavaProject(ClassTools.shortClassNameForObject(this), true); testProject.installFacet("jst.utility", "1.0"); testProject.createCompilationUnit("test.pkg", "TestEntity.java", "@Entity public class TestEntity {}"); testProject.createCompilationUnit("test.pkg", "TestEntity2.java", "@Entity public class TestEntity2 {}"); return testProject; } private IFile getFile(TestPlatformProject p, String path) { return p.getProject().getFile(new Path(path)); } public void testJpaModel() { assertNotNull(JptCorePlugin.getJpaModel()); } public void testProjectCloseReopen() throws Exception { this.testProject.installFacet("jpt.jpa", "1.0"); this.testProject.getProject().close(null); assertFalse(this.testProject.getProject().isOpen()); JpaProject jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNull(jpaProject); this.testProject.getProject().open(null); assertTrue(this.testProject.getProject().isOpen()); jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNotNull(jpaProject); assertEquals(4, jpaProject.jpaFilesSize()); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity2.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/persistence.xml"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/orm.xml"))); } public void testProjectDeleteReimport() throws Exception { this.testProject.installFacet("jpt.jpa", "1.0"); JpaProject jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNotNull(jpaProject); assertEquals(1, JptCorePlugin.getJpaModel().jpaProjectsSize()); this.testProject.getProject().delete(false, true, null); jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNull(jpaProject); assertEquals(0, JptCorePlugin.getJpaModel().jpaProjectsSize()); assertEquals(0, ResourcesPlugin.getWorkspace().getRoot().getProjects().length); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(this.testProject.getProject().getName()); project.create(null); assertEquals(1, ResourcesPlugin.getWorkspace().getRoot().getProjects().length); project.open(null); assertTrue(project.isOpen()); assertTrue(JptCorePlugin.projectHasJpaFacet(project)); jpaProject = JptCorePlugin.getJpaProject(project); assertNotNull(jpaProject); assertEquals(4, jpaProject.jpaFilesSize()); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity2.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/persistence.xml"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/orm.xml"))); } public void testFacetInstallUninstall() throws Exception { assertNull(JptCorePlugin.getJpaProject(this.testProject.getProject())); this.testProject.installFacet("jpt.jpa", "1.0"); assertEquals(1, JptCorePlugin.getJpaModel().jpaProjectsSize()); JpaProject jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNotNull(jpaProject); assertEquals(4, jpaProject.jpaFilesSize()); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity2.java"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/persistence.xml"))); assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/orm.xml"))); this.testProject.uninstallFacet("jpt.jpa", "1.0"); assertEquals(0, JptCorePlugin.getJpaModel().jpaProjectsSize()); jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); assertNull(jpaProject); } //TODO - Commented out this test, since it was failing in the I-Build and we're not sure why. //See bug 221757 public void testEditFacetSettingsFile() throws Exception { assertNull(JptCorePlugin.getJpaProject(this.testProject.getProject())); // add the JPA facet by modifying the facet settings file directly IFile facetSettingsFile = this.getFile(this.testProject, ".settings/org.eclipse.wst.common.project.facet.core.xml"); InputStream inStream = new BufferedInputStream(facetSettingsFile.getContents()); int fileSize = inStream.available(); byte[] buf = new byte[fileSize]; inStream.read(buf); inStream.close(); String oldDocument = new String(buf); String oldString = ""; String newString = oldString + CR + " " + ""; String newDocument = oldDocument.replaceAll(oldString, newString); facetSettingsFile.setContents(new ByteArrayInputStream(newDocument.getBytes()), false, false, null); // TODO moved more stuff to the error console until we can figure out why it fails intermittently ~kfb // assertEquals(1, JptCorePlugin.getJpaModel().jpaProjectsSize()); // JpaProject jpaProject = JptCorePlugin.getJpaProject(this.testProject.getProject()); // assertNotNull(jpaProject); // // persistence.xml and orm.xml do not get created in this situation (?) // assertEquals(2, jpaProject.jpaFilesSize()); // assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity.java"))); // assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/test/pkg/TestEntity2.java"))); //// assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/persistence.xml"))); //// assertNotNull(jpaProject.getJpaFile(this.getFile(this.testProject, "src/META-INF/orm.xml"))); int size = JptCorePlugin.getJpaModel().jpaProjectsSize(); if (size != 1) { System.err.println("bogus size: " + size); System.err.println("bogus project: " + JptCorePlugin.getJpaProject(this.testProject.getProject())); } // now remove the JPA facet facetSettingsFile.setContents(new ByteArrayInputStream(oldDocument.getBytes()), false, false, null); // TODO moved this stuff to the error console until we can figure out why it fails intermittently ~bjv // assertEquals(0, JptCorePlugin.jpaModel().jpaProjectsSize()); // jpaProject = JptCorePlugin.jpaProject(testProject.getProject()); // assertNull(jpaProject); int newSize = JptCorePlugin.getJpaModel().jpaProjectsSize(); if (newSize != 0) { System.err.println("bogus size: " + newSize); System.err.println("bogus project: " + JptCorePlugin.getJpaProject(this.testProject.getProject())); } } /** * make sure the DEBUG constants are 'false' before checking in the code */ public void testDEBUG() { this.verifyDEBUG(JpaModelManager.class); this.verifyDEBUG(GenericJpaModel.class); } private void verifyDEBUG(Class clazz) { assertFalse("Recompile with \"DEBUG = false\": " + clazz.getName(), ((Boolean) ClassTools.staticFieldValue(clazz, "DEBUG")).booleanValue()); } }