/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.sdklib.internal.repository.packages; import com.android.sdklib.SdkManager; import com.android.sdklib.internal.repository.archives.ArchFilter; import com.android.sdklib.internal.repository.archives.Archive; import com.android.sdklib.internal.repository.sources.SdkRepoSource; import com.android.sdklib.internal.repository.sources.SdkSource; import com.android.sdklib.repository.FullRevision; import com.android.sdklib.repository.PkgProps; import com.android.sdklib.repository.descriptors.IPkgDesc; import com.android.sdklib.repository.descriptors.PkgDesc; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Properties; import junit.framework.TestCase; public class PackageTest extends TestCase { protected static final String LOCAL_ARCHIVE_PATH = "/local/archive/path"; /** Local class used to test the abstract Package class */ protected static class MockPackage extends MajorRevisionPackage { public MockPackage( SdkSource source, Properties props, int revision, String license, String description, String descUrl, String archiveOsPath) { super(source, props, revision, license, description, descUrl, archiveOsPath); } @Override public File getInstallFolder(String osSdkRoot, SdkManager sdkManager) { throw new UnsupportedOperationException("abstract method not used in test"); //$NON-NLS-1$ } @Override public String getListDescription() { throw new UnsupportedOperationException("abstract method not used in test"); //$NON-NLS-1$ } @Override public String getShortDescription() { throw new UnsupportedOperationException("abstract method not used in test"); //$NON-NLS-1$ } @Override public boolean sameItemAs(Package pkg) { throw new UnsupportedOperationException("abstract method not used in test"); //$NON-NLS-1$ } @Override public String installId() { return "mock-pkg"; //$NON-NLS-1$ } @Override public IPkgDesc getPkgDesc() { return PkgDesc.Builder.newTool( new FullRevision(1, 2, 3, 4), FullRevision.NOT_SPECIFIED).create(); } } public void testCreate() throws Exception { Properties props = createExpectedProps(); Package p = new MockPackage( null, //source props, -1, //revision null, //license null, //description null, //descUrl LOCAL_ARCHIVE_PATH //archiveOsPath ); testCreatedPackage(p); } public void testSaveProperties() throws Exception { Properties expected = createExpectedProps(); Package p = new MockPackage( null, //source expected, -1, //revision null, //license null, //description null, //descUrl LOCAL_ARCHIVE_PATH //archiveOsPath ); Properties actual = new Properties(); p.saveProperties(actual); assertEquals(expected, actual); } /** * Sets the properties used by {@link #testCreate()} and * {@link #testSaveProperties()}. * This is protected and used by derived classes to perform * a similar creation test. */ protected Properties createExpectedProps() { return createDefaultProps(); } /** * Similar to {@link #createExpectedProps()} but static so that * it can be reused by test not deriving from {@link PackageTest}. */ public static Properties createDefaultProps() { Properties props = new Properties(); // Package properties props.setProperty(PkgProps.PKG_REVISION, "42"); props.setProperty(PkgProps.PKG_LICENSE, "The License"); props.setProperty(PkgProps.PKG_DESC, "Some description."); props.setProperty(PkgProps.PKG_DESC_URL, "http://description/url"); props.setProperty(PkgProps.PKG_LIST_DISPLAY, "Some description."); props.setProperty(PkgProps.PKG_RELEASE_NOTE, "Release Note"); props.setProperty(PkgProps.PKG_RELEASE_URL, "http://release/note"); props.setProperty(PkgProps.PKG_SOURCE_URL, "http://source/url"); props.setProperty(PkgProps.PKG_OBSOLETE, "true"); return props; } /** * Tests the values set via {@link #createExpectedProps()} after the * package has been created in {@link #testCreate()}. * This is protected and used by derived classes to perform * a similar creation test. */ protected void testCreatedPackage(Package p) { // Package properties assertEquals("42", p.getRevision().toShortString()); assertEquals("<License ref:null, text:The License>", p.getLicense().toString()); assertEquals("Some description.", p.getDescription()); assertEquals("http://description/url", p.getDescUrl()); assertEquals("Release Note", p.getReleaseNote()); assertEquals("http://release/note", p.getReleaseNoteUrl()); assertEquals(new SdkRepoSource("http://source/url", null /*uiName*/), p.getParentSource()); assertTrue(p.isObsolete()); assertNotNull(p.getArchives()); assertEquals(1, p.getArchives().length); Archive a = p.getArchives()[0]; assertNotNull(a); assertEquals(new ArchFilter(null), a.getArchFilter()); assertEquals(LOCAL_ARCHIVE_PATH, a.getLocalOsPath()); } // ---- public void testCompareTo() throws Exception { ArrayList<Package> list = new ArrayList<Package>(); MockPlatformPackage p1; list.add(p1 = new MockPlatformPackage(1, 2)); list.add(new MockAddonPackage(p1, 3)); list.add(new MockSystemImagePackage(p1, 4, "x86")); list.add(new MockBrokenPackage(BrokenPackage.MIN_API_LEVEL_NOT_SPECIFIED, 1)); list.add(new MockExtraPackage("vendor", "path", 5, 6)); list.add(new MockToolPackage(7, 8)); Collections.sort(list); assertEquals( "[Android SDK Tools, revision 7, " + "SDK Platform Android android-1, API 1, revision 2, " + "Intel x86 Atom System Image, Android API 1, revision 4, " + "addon, Android API 1, revision 3, " + "Broken package for API 1, " + "Vendor Path, revision 5]", Arrays.toString(list.toArray())); } public void testGetPropertyInt() { Properties p = new Properties(); assertEquals(42, Package.getPropertyInt(p, "key", 42)); p.setProperty("key", ""); assertEquals(43, Package.getPropertyInt(p, "key", 43)); p.setProperty("key", "I am not a number"); assertEquals(44, Package.getPropertyInt(p, "key", 44)); p.setProperty("key", "6"); assertEquals(6, Package.getPropertyInt(p, "key", 45)); } }