/******************************************************************************* * Copyright (c) 2010, 2013 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.debug.tests.launching; import java.io.File; import java.io.FileInputStream; import java.util.HashMap; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.debug.testplugin.JavaTestPlugin; import org.eclipse.jdt.debug.tests.AbstractDebugTest; import org.eclipse.jdt.internal.launching.MacInstalledJREs; import org.eclipse.jdt.internal.launching.PListParser; import org.eclipse.jdt.launching.VMStandin; /** * Tests the PList Parser. */ public class PListParserTests extends AbstractDebugTest { /** * Constructs a test * * @param name test name */ public PListParserTests(String name) { super(name); } /** * Tests parsing of a sample installed JREs plist from the Mac. * * @throws Exception */ public void testParseJREs() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist.xml")); assertNotNull(file); assertEquals(true, file.exists()); Object obj = new PListParser().parse(new FileInputStream(file)); if (obj instanceof Object[]) { Object[] jres = (Object[]) obj; assertEquals("Should be 3 entries in the array", 3, jres.length); // the first map HashMap<String, Comparable<?>> map = new HashMap<String, Comparable<?>>(); map.put("JVMArch", "i386"); map.put("JVMBundleID", "com.apple.javajdk15"); map.put("JVMEnabled", Boolean.TRUE); map.put("JVMHomePath", "/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home"); map.put("JVMIsBuiltIn", Boolean.TRUE); map.put("JVMName", "J2SE 5.0"); map.put("JVMPlatformVersion", "1.5"); map.put("JVMVersion", "1.5.0_24"); map.put("test", Boolean.FALSE); map.put("testint", new Integer(42)); assertEquals("Incorrect values parsed", map, jres[0]); map = new HashMap<String, Comparable<?>>(); map.put("JVMArch", "x86_64"); map.put("JVMBundleID", "com.apple.javajdk16"); map.put("JVMEnabled", Boolean.TRUE); map.put("JVMHomePath", "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home"); map.put("JVMIsBuiltIn", Boolean.TRUE); map.put("JVMName", "Java SE 6"); map.put("JVMPlatformVersion", "1.6"); map.put("JVMVersion", "1.6.0_20"); assertEquals("Incorrect values parsed", map, jres[1]); map = new HashMap<String, Comparable<?>>(); map.put("JVMArch", "x86_64"); map.put("JVMBundleID", "com.apple.javajdk15"); map.put("JVMEnabled", Boolean.TRUE); map.put("JVMHomePath", "/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home"); map.put("JVMIsBuiltIn", Boolean.TRUE); map.put("JVMName", "J2SE 5.0"); map.put("JVMPlatformVersion", "1.5"); map.put("JVMVersion", "1.5.0_24"); assertEquals("Incorrect values parsed", map, jres[2]); } else { assertTrue("Top level object should be an array", false); } } /** * Tests that we parse out the correct number of raw entries from the 'lion' plist output * * @throws Exception * @since 3.8 */ public void testParseLionJREs() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-lion.xml")); assertNotNull(file); assertEquals(true, file.exists()); Object obj = new PListParser().parse(new FileInputStream(file)); if (obj instanceof Object[]) { Object[] jres = (Object[]) obj; assertEquals("Should be 8 entries in the array", 8, jres.length); } else { assertTrue("Top level object should be an array", false); } } /** * Tests that we parse out the correct number of raw entries from the 'now leopard' plist output * * @throws Exception * @since 3.8 */ public void testParseSnowLeopardJREs() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-snowleopard.xml")); assertNotNull(file); assertEquals(true, file.exists()); Object obj = new PListParser().parse(new FileInputStream(file)); if (obj instanceof Object[]) { Object[] jres = (Object[]) obj; assertEquals("Should be 2 entries in the array", 2, jres.length); } else { assertTrue("Top level object should be an array", false); } } /** * Tests that we can parse out certain {@link VMStandin}s from the 'old' style * of plist output. * * @throws Exception * @since 3.8 */ public void testParseJREDescriptors() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist.xml")); assertNotNull(file); assertEquals(true, file.exists()); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 2 JRE descriptions", 2, desc.length); } /** * Tests that we can parse out certain {@link VMStandin}s from the 'snow leopard' style * of plist output. * * @throws Exception * @since 3.8 */ public void testParseJREDescriptorsSnowLeopard() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-snowleopard.xml")); assertNotNull(file); assertEquals(true, file.exists()); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 1 JRE description", 1, desc.length); } /** * Tests that we can parse out certain {@link VMStandin}s from the 'lion' style * of plist output. * * @throws Exception * @since 3.8 */ public void testParseJREDescriptorsLion() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-lion.xml")); assertNotNull(file); assertEquals(true, file.exists()); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 4 JRE descriptions", 4, desc.length); } /** * Tests that we can parse out certain {@link VMStandin}s from the plist * output known to be bad - wrong data types. * <br><br> * <code>plist-bad1.xml</code> has a boolean value in place of the VM name for the 1.6 VM, * but we should still recover the remainder of the VMs defined (3 of them) * * @throws Exception * @since 3.8 */ public void testParseJREDescriptorsBad() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-bad1.xml")); assertNotNull(file); assertEquals(true, file.exists()); System.out.println("*** EXPECTED SAX EXCEPTION testParseJREDescriptorsBad ***"); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 3 JRE descriptions", 3, desc.length); } /** * Tests that we can parse out certain {@link VMStandin}s from the plist * output known to be bad - missing element. * <br><br> * <code>plist-bad2.xml</code> is missing a key element - but still has the value for the key. * * @throws Exception * @since 3.8 */ public void testParseJREDescriptorsBad2() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-bad2.xml")); assertNotNull(file); assertEquals(true, file.exists()); System.out.println("*** EXPECTED SAX EXCEPTION testParseJREDescriptorsBad2 ***"); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 3 JRE descriptions", 3, desc.length); } /** * Tests that we can parse out certain {@link VMStandin}s from the plist * output known to be bad - corrupt XML syntax. * <br><br> * <code>plist-bad3.xml</code> has corrupt XML syntax * * @throws Exception * @since 3.8 */ public void testParseJREDescriptorsBad3() throws Exception { File file = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/plist-bad3.xml")); assertNotNull(file); assertEquals(true, file.exists()); System.out.println("*** EXPECTED SAX EXCEPTION testParseJREDescriptorsBad3 ***"); VMStandin[] desc = MacInstalledJREs.parseJREInfo(new FileInputStream(file), null); assertEquals("There should be 0 JRE descriptions", 0, desc.length); } }