001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.apisupport.project;
043:
044: import java.io.File;
045: import java.io.InputStream;
046: import org.apache.tools.ant.module.api.support.ActionUtils;
047: import org.netbeans.api.project.ProjectManager;
048: import org.netbeans.modules.apisupport.project.layers.LayerTestBase;
049: import org.netbeans.modules.apisupport.project.suite.SuiteProject;
050: import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
051: import org.openide.DialogDescriptor;
052: import org.openide.execution.ExecutorTask;
053: import org.openide.filesystems.FileObject;
054: import org.openide.filesystems.FileUtil;
055: import org.openide.util.Utilities;
056:
057: /**
058: * Tests Paintapp sample.
059: * Invokes various Ant targets over Paintapp sample.
060: *
061: * @author Tomas Musil
062: */
063: public class BuildPaintapplicationTest extends TestBase {
064:
065: private File paintFolder = null;
066:
067: static {
068: // #65461: do not try to load ModuleInfo instances from ant module
069: System.setProperty(
070: "org.netbeans.core.startup.ModuleSystem.CULPRIT",
071: "true");
072: LayerTestBase.Lkp.setLookup(new Object[0]);
073: DialogDisplayerImpl
074: .returnFromNotify(DialogDescriptor.NO_OPTION);
075: }
076:
077: public BuildPaintapplicationTest(String testName) {
078: super (testName);
079: }
080:
081: protected void setUp() throws Exception {
082: clearWorkDir();
083: noDataDir = true;
084: super .setUp();
085: InstalledFileLocatorImpl.registerDestDir(destDirF);
086: TestAntLogger.getDefault().setEnabled(true);
087: }
088:
089: protected void tearDown() throws Exception {
090: TestAntLogger.getDefault().setEnabled(false);
091: }
092:
093: /**
094: * Extracts paintapp to workdir, then platform properties are copied and ant task(s) is called. Build status is returned
095: */
096: public int runAntTargetsOnPaintapp(String[] targets)
097: throws Exception {
098: InputStream is = getClass()
099: .getClassLoader()
100: .getResourceAsStream(
101: "org/netbeans/modules/apisupport/paintapp/PaintAppProject.zip");
102: assertNotNull(is);
103: paintFolder = new File(getWorkDir(), "paintapp");
104: paintFolder.mkdir();
105: FileObject fo = FileUtil.toFileObject(paintFolder);
106: assertNotNull(fo);
107:
108: try {
109: FileUtil.extractJar(fo, is);
110: } finally {
111: is.close();
112: }
113:
114: File buildProps = new File(getWorkDir(), "build.properties");
115: File privateFolder = new File(
116: new File(paintFolder, "nbproject"), "private");
117: privateFolder.mkdir();
118:
119: FileObject platfPrivateProps = FileUtil.copyFile(FileUtil
120: .toFileObject(buildProps), FileUtil
121: .toFileObject(privateFolder), "platform-private");
122: assertNotNull(platfPrivateProps);
123: SuiteProject PaintappSuite = (SuiteProject) ProjectManager
124: .getDefault().findProject(fo);
125: assertNotNull(PaintappSuite);
126: FileObject buildScript = PaintappSuite.getProjectDirectory()
127: .getFileObject(GeneratedFilesHelper.BUILD_XML_PATH);
128: assertNotNull(buildScript);
129: assertTrue(buildScript.isValid());
130:
131: System.out.println("------------- BUILD OUTPUT --------------");
132: ExecutorTask et = ActionUtils.runTarget(buildScript, targets,
133: null);
134: et.waitFinished();
135: System.out.println("-----------------------------------------");
136: // ant task executor returns 0 on win and jdk 1.5.0_xxx
137: boolean win15 = Utilities.isWindows()
138: && System.getProperty("java.version").startsWith(
139: "1.5.0_");
140:
141: return (win15) ? 0 : et.result();
142: }
143:
144: /**
145: * Invokes build-jnlp target on paintapp
146: */
147: public void testBuildJNLP() throws Exception {
148: int ret = runAntTargetsOnPaintapp(new String[] { "build-jnlp" });
149: assertEquals(
150: "build-jnlp ant target should return zero - build successful",
151: 0, ret);
152: File dist = new File(paintFolder, "dist");
153: File warFile = new File(dist, "paintit.war");
154: assertTrue("paintapp.war file should be in dist folder",
155: warFile.exists());
156:
157: }
158:
159: /**
160: * Invokes build-zip target on paintapp
161: */
162: public void testBuildZip() throws Exception {
163: int ret = runAntTargetsOnPaintapp(new String[] { "build-zip" });
164: assertEquals(
165: "build-zipant target should return zero - build successful",
166: 0, ret);
167: File dist = new File(paintFolder, "dist");
168: File zipFile = new File(dist, "paintit.zip");
169: assertTrue("paintit.zip file should be in dist folder", zipFile
170: .exists());
171: }
172:
173: /**
174: * Invokes build target on paintapp
175: */
176: public void testBuild() throws Exception {
177: int ret = runAntTargetsOnPaintapp(new String[] { "build" });
178: assertEquals(
179: "build ant target should return zero - build successful",
180: 0, ret);
181: File buildFolder = new File(paintFolder, "build");
182: assertTrue("build folder should exist", buildFolder.exists()
183: && buildFolder.isDirectory());
184: String[] children = buildFolder.list();
185: assertTrue("build folder is not empty", children.length > 0);
186:
187: }
188:
189: /**
190: * Invokes nbms target on paintapp
191: */
192: public void testBuildNBMs() throws Exception {
193: int ret = runAntTargetsOnPaintapp(new String[] { "nbms" });
194: assertEquals(
195: "build ant target should return zero - build successful",
196: 0, ret);
197: File buildFolder = new File(paintFolder, "build");
198: File updatesFolder = new File(buildFolder, "updates");
199: assertTrue("build/update folder exists", updatesFolder.exists()
200: && updatesFolder.isDirectory());
201: File paintNbm = new File(updatesFolder,
202: "org-netbeans-paint.nbm");
203: File colorchooserNbm = new File(updatesFolder,
204: "org-netbeans-swing-colorchooser.nbm");
205: assertTrue(
206: "Both nbms(paint+colorchooser) are in build/updates folder",
207: paintNbm.exists() && colorchooserNbm.exists());
208: }
209:
210: /**
211: * Invokes clean target on paintapp
212: */
213: public void testClean() throws Exception {
214: int ret = runAntTargetsOnPaintapp(new String[] { "clean" });
215: assertEquals(
216: "clean ant target should return zero - build successful",
217: 0, ret);
218: File buildFolder = new File(paintFolder, "build");
219: File distFolder = new File(paintFolder, "dist");
220: assertTrue("build and dist folders are deleted", !distFolder
221: .exists()
222: && !buildFolder.exists());
223: }
224: }
|