| /******************************************************************************* |
| * Copyright (c) 2000, 2020 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Alexander Fedorov (ArSysOp) - Bug 561712 |
| *******************************************************************************/ |
| package org.eclipse.equinox.common.tests; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.net.URI; |
| import java.net.URL; |
| import java.nio.file.FileSystem; |
| import java.nio.file.FileSystems; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import java.util.Arrays; |
| import java.util.Collections; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.MultiStatus; |
| import org.eclipse.core.runtime.OperationCanceledException; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.core.tests.harness.CoreTest; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.BundleException; |
| import org.osgi.framework.FrameworkUtil; |
| |
| public class StatusTest extends CoreTest { |
| |
| private int status1Severity = IStatus.OK; |
| private String status1PluginId = "org.eclipse.core.tests.runtime"; |
| private int status1Code = -20; |
| private String status1Message = "Something was canceled"; |
| private Exception status1Exception = new OperationCanceledException(); |
| private Status status1; |
| |
| private int status2Severity = IStatus.ERROR; |
| private String status2PluginId = " "; |
| private int status2Code = IStatus.OK; |
| private String status2Message = ""; |
| private Exception status2Exception = null; |
| private Status status2; |
| |
| private String multistatus1PluginId = "org.eclipse.core.tests.multistatus1"; |
| private int multistatus1Code = 20; |
| private IStatus[] multistatus1Children = new IStatus[0]; |
| private String multistatus1Message = "Multistatus #1 message"; |
| private Throwable multistatus1Exception = new OperationCanceledException(); |
| private MultiStatus multistatus1; |
| |
| private MultiStatus multistatus2; |
| |
| public StatusTest() { |
| super(null); |
| } |
| |
| public StatusTest(String name) { |
| super(name); |
| } |
| |
| @Override |
| protected void setUp() { |
| status1 = new Status(status1Severity, status1PluginId, status1Code, status1Message, status1Exception); |
| status2 = new Status(status2Severity, status2PluginId, status2Code, status2Message, status2Exception); |
| |
| multistatus1 = new MultiStatus(multistatus1PluginId, multistatus1Code, multistatus1Children, multistatus1Message, multistatus1Exception); |
| multistatus2 = new MultiStatus(" ", 45, new Status[0], "", null); |
| multistatus2.add(status1); |
| multistatus2.add(status1); |
| } |
| |
| public void testMultiStatusReturnValues() { |
| assertEquals("1.1", multistatus1PluginId, multistatus1.getPlugin()); |
| assertEquals("1.2", multistatus1Code, multistatus1.getCode()); |
| assertTrue("1.3", Arrays.equals(multistatus1Children, multistatus1.getChildren())); |
| assertEquals("1.4", multistatus1Message, multistatus1.getMessage()); |
| assertEquals("1.5", multistatus1Exception, multistatus1.getException()); |
| assertTrue("1.6", multistatus1.isMultiStatus()); |
| assertEquals("1.7", IStatus.OK, multistatus1.getSeverity()); |
| assertTrue("1.8", multistatus1.isOK()); |
| assertEquals("1.9", false, status1.matches(IStatus.ERROR | IStatus.WARNING | IStatus.INFO)); |
| } |
| |
| public void testSingleStatusReturnValues() { |
| assertEquals("1.0", status1Severity, status1.getSeverity()); |
| assertEquals("1.1", status1PluginId, status1.getPlugin()); |
| assertEquals("1.2", status1Code, status1.getCode()); |
| assertEquals("1.3", status1Message, status1.getMessage()); |
| assertEquals("1.4", status1Exception, status1.getException()); |
| assertEquals("1.5", 0, status1.getChildren().length); |
| assertEquals("1.6", false, status1.isMultiStatus()); |
| assertEquals("1.7", status1Severity == IStatus.OK, status1.isOK()); |
| assertEquals("1.8", status1.matches(IStatus.ERROR | IStatus.WARNING | IStatus.INFO), !status1.isOK()); |
| |
| assertEquals("2.0", status2Severity, status2.getSeverity()); |
| assertEquals("2.1", status2PluginId, status2.getPlugin()); |
| assertEquals("2.2", status2Code, status2.getCode()); |
| assertEquals("2.3", status2Message, status2.getMessage()); |
| assertEquals("2.4", status2Exception, status2.getException()); |
| assertEquals("2.5", 0, status2.getChildren().length); |
| assertEquals("2.6", false, status2.isMultiStatus()); |
| assertEquals("2.7", status2Severity == IStatus.OK, status2.isOK()); |
| assertEquals("2.8", status2.matches(IStatus.ERROR), !status2.isOK()); |
| } |
| |
| public void testAdd() { |
| |
| multistatus1.add(status1); |
| assertEquals("1.0", status1, (multistatus1.getChildren())[0]); |
| |
| multistatus1.add(multistatus2); |
| assertEquals("1.1", multistatus2, (multistatus1.getChildren())[1]); |
| |
| multistatus1.add(multistatus1); |
| assertEquals("1.2", multistatus1, (multistatus1.getChildren())[2]); |
| |
| } |
| |
| public void testSingleFromClass() throws ClassNotFoundException, IOException, BundleException { |
| assertEquals("org.eclipse.equinox.common.tests", new Status(IStatus.WARNING, StatusTest.class, "").getPlugin()); |
| assertEquals("org.eclipse.equinox.common", new Status(IStatus.ERROR, IStatus.class, "", null).getPlugin()); |
| assertEquals("java.lang.String", new Status(IStatus.WARNING, String.class, 0, "", null).getPlugin()); |
| assertEquals("org.eclipse.core.runtime.Status", new Status(IStatus.WARNING, (Class<?>) null, "").getPlugin()); |
| assertEquals(TestClass.class.getName(), |
| new Status(IStatus.WARNING, installNoBSNBundle().loadClass(TestClass.class.getName()), "").getPlugin()); |
| } |
| |
| public void testMultiFromClass() throws ClassNotFoundException, IOException, BundleException { |
| assertEquals("org.eclipse.equinox.common", new MultiStatus(IStatus.class, 0, "").getPlugin()); |
| assertEquals("org.eclipse.equinox.common.tests", new MultiStatus(StatusTest.class, 0, "").getPlugin()); |
| assertEquals("java.lang.String", new MultiStatus(String.class, 0, new Status[0], "", null).getPlugin()); |
| assertEquals("org.eclipse.core.runtime.MultiStatus", new MultiStatus((Class<?>) null, 0, "").getPlugin()); |
| assertEquals(TestClass.class.getName(), |
| new MultiStatus(installNoBSNBundle().loadClass(TestClass.class.getName()), 0, "").getPlugin()); |
| } |
| |
| private Bundle installNoBSNBundle() throws IOException, BundleException { |
| BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| File noNameBSNFile = bc.getDataFile("noNameBSN.jar"); |
| noNameBSNFile.delete(); |
| URI noNameBSNJar = URI.create("jar:" + noNameBSNFile.toURI().toASCIIString()); |
| |
| try (FileSystem zipfs = FileSystems.newFileSystem(noNameBSNJar, Collections.singletonMap("create", "true"))) { |
| URL testClassURL = getClass().getResource("TestClass.class"); |
| Path testClassPath = zipfs.getPath(testClassURL.getPath().substring(1)); |
| // copy a file into the zip file |
| Files.createDirectories(testClassPath.getParent()); |
| Files.copy(testClassURL.openStream(), testClassPath); |
| } |
| return bc.installBundle(noNameBSNFile.toURI().toASCIIString()); |
| } |
| |
| public void testAddAll() { |
| |
| multistatus1.add(status2); |
| multistatus1.addAll(multistatus2); |
| Status[] array = new Status[3]; |
| array[0] = status2; |
| array[1] = status1; |
| array[2] = status1; |
| |
| assertTrue("1.0", multistatus1.getChildren().length == 3); |
| assertTrue("1.1", Arrays.equals(array, multistatus1.getChildren())); |
| |
| multistatus1.add(multistatus2); |
| multistatus1.addAll(multistatus1); |
| Status[] array2 = new Status[8]; |
| array2[0] = status2; |
| array2[1] = status1; |
| array2[2] = status1; |
| array2[3] = multistatus2; |
| array2[4] = status2; |
| array2[5] = status1; |
| array2[6] = status1; |
| array2[7] = multistatus2; |
| |
| assertTrue("2.0", multistatus1.getChildren().length == 8); |
| assertTrue("2.1", Arrays.equals(array2, multistatus1.getChildren())); |
| |
| } |
| |
| public void testIsOK() { |
| |
| assertTrue("1.0", multistatus2.isOK()); |
| |
| multistatus1.add(status2); |
| multistatus1.addAll(multistatus2); |
| assertTrue("1.1", !multistatus1.isOK()); |
| |
| } |
| |
| public void testMerge() { |
| |
| multistatus1.merge(status2); |
| multistatus1.merge(multistatus2); |
| Status[] array = new Status[3]; |
| array[0] = status2; |
| array[1] = status1; |
| array[2] = status1; |
| |
| assertTrue("1.0", multistatus1.getChildren().length == 3); |
| assertTrue("1.1", Arrays.equals(array, multistatus1.getChildren())); |
| |
| multistatus1.merge(multistatus1); |
| Status[] array2 = new Status[6]; |
| array2[0] = status2; |
| array2[1] = status1; |
| array2[2] = status1; |
| array2[3] = status2; |
| array2[4] = status1; |
| array2[5] = status1; |
| |
| assertTrue("2.0", multistatus1.getChildren().length == 6); |
| assertTrue("2.1", Arrays.equals(array2, multistatus1.getChildren())); |
| |
| multistatus2.add(multistatus1); |
| assertTrue("3.0", !multistatus2.isOK()); |
| multistatus2.merge(multistatus2.getChildren()[2]); |
| assertTrue("3.1", multistatus2.getChildren().length == 9); |
| |
| } |
| |
| } |