1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.oracle.bundlers.mac; 27 28 import com.oracle.bundlers.*; 29 import com.oracle.bundlers.Bundler; 30 import com.sun.javafx.tools.packager.Log; 31 import com.sun.javafx.tools.packager.bundlers.*; 32 import org.junit.After; 33 import org.junit.Assume; 34 import org.junit.Before; 35 import org.junit.BeforeClass; 36 import org.junit.Test; 37 38 import java.io.File; 39 import java.io.IOException; 40 import java.nio.file.Files; 41 import java.util.*; 42 43 import static org.junit.Assert.assertNotNull; 44 import static org.junit.Assert.assertTrue; 45 46 public class MacPKGBundlerTest { 47 48 static File tmpBase; 49 static File workDir; 50 static File appResourcesDir; 51 static File fakeMainJar; 52 static Set<File> appResources; 53 static boolean retain = false; 54 55 @BeforeClass 56 public static void prepareApp() { 57 // only run on mac 58 Assume.assumeTrue(System.getProperty("os.name").toLowerCase().contains("os x")); 59 60 Log.setLogger(new Log.Logger(true)); 61 62 retain = Boolean.parseBoolean(System.getProperty("RETAIN_PACKAGER_TESTS")); 63 64 workDir = new File("build/tmp/tests", "macpkg"); 65 appResourcesDir = new File("build/tmp/tests", "appResources"); 66 fakeMainJar = new File(appResourcesDir, "mainApp.jar"); 67 68 appResources = new HashSet<>(Arrays.asList(fakeMainJar)); 69 } 70 71 @Before 72 public void createTmpDir() throws IOException { 73 if (retain) { 74 tmpBase = new File("build/tmp/tests/macpkg"); 75 } else { 76 tmpBase = Files.createTempDirectory("fxpackagertests").toFile(); 77 } 78 tmpBase.mkdir(); 79 } 80 81 @After 82 public void maybeCleanupTmpDir() { 83 if (!retain) { 84 attemptDelete(tmpBase); 85 } 86 } 87 88 private void attemptDelete(File tmpBase) { 89 if (tmpBase.isDirectory()) { 90 File[] children = tmpBase.listFiles(); 91 if (children != null) { 92 for (File f : children) { 93 attemptDelete(f); 94 } 95 } 96 } 97 boolean success; 98 try { 99 success = !tmpBase.exists() || tmpBase.delete(); 100 } catch (SecurityException se) { 101 success = false; 102 } 103 if (!success) { 104 System.err.println("Could not clean up " + tmpBase.toString()); 105 } 106 } 107 108 /** 109 * See if smoke comes out 110 */ 111 @Test 112 public void smokeTest() throws IOException, ConfigException, UnsupportedPlatformException { 113 AbstractBundler bundler = new MacPKGBundler(); 114 bundler.setVerbose(true); 115 116 assertNotNull(bundler.getName()); 117 assertNotNull(bundler.getID()); 118 assertNotNull(bundler.getDescription()); 119 //assertNotNull(bundler.getBundleParameters()); 120 121 Map<String, Object> bundleParams = new HashMap<>(); 122 123 bundleParams.put(StandardBundlerParam.BUILD_ROOT.getID(), tmpBase); 124 125 bundleParams.put(StandardBundlerParam.NAME.getID(), "Smoke"); 126 bundleParams.put(StandardBundlerParam.MAIN_CLASS.getID(), "hello.TestPackager"); 127 bundleParams.put(StandardBundlerParam.APP_RESOURCES.getID(), new RelativeFileSet(appResourcesDir, appResources)); 128 129 bundleParams.put(StandardBundlerParam.RUNTIME.getID(), 130 StandardBundlerParam.extractJreAsRelativeFileSet("~/tools/jdk1.8.0.jdk/Contents/Home/jre")); 131 132 bundler.execute(bundleParams, new File(workDir, "smoke")); 133 } 134 135 /** 136 * The bare minimum configuration needed to make it work 137 * <ul> 138 * <li>Where to build it</li> 139 * <li>The jar containing the application (with a main-class attribute)</li> 140 * </ul> 141 * 142 * All other values will be driven off of those two values. 143 */ 144 @Test 145 public void minimumConfig() throws IOException, ConfigException, UnsupportedPlatformException { 146 Bundler bundler = new MacPKGBundler(); 147 ((AbstractBundler)bundler).setVerbose(true); 148 149 Map<String, Object> bundleParams = new HashMap<>(); 150 151 bundleParams.put(StandardBundlerParam.BUILD_ROOT.getID(), tmpBase); 152 153 bundleParams.put(StandardBundlerParam.NAME.getID(), "Smoke"); 154 bundleParams.put(StandardBundlerParam.APP_RESOURCES.getID(), new RelativeFileSet(appResourcesDir, appResources)); 155 156 File output = bundler.execute(bundleParams, new File(workDir, "BareMinimum")); 157 System.err.println(output); 158 assertTrue(output.isFile()); 159 //TODO assert file name 160 } 161 }