/* * Copyright (C) 2014 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.archives; import com.android.annotations.NonNull; import com.android.sdklib.repository.FullRevision; import com.android.sdklib.repository.NoPreviewRevision; import junit.framework.TestCase; public class ArchFilterTest extends TestCase { public void testGetCurrent() { ArchFilter f1 = makeCurrent("Windows 7", "amd64", "1.7.0_51"); assertEquals(HostOs.WINDOWS, f1.getHostOS()); assertEquals(BitSize._64, f1.getHostBits()); assertEquals(BitSize._64, f1.getJvmBits()); assertEquals(new FullRevision(1, 7, 0), f1.getMinJvmVersion()); ArchFilter f2 = makeCurrent("Mac OS X", "x86_64", "1.7.0_51"); assertEquals(HostOs.MACOSX, f2.getHostOS()); assertEquals(BitSize._64, f2.getHostBits()); assertEquals(BitSize._64, f2.getJvmBits()); assertEquals(new FullRevision(1, 7, 0), f2.getMinJvmVersion()); ArchFilter f3 = makeCurrent("Linux", "x86", "1.6.42_43"); assertEquals(HostOs.LINUX, f3.getHostOS()); assertEquals(BitSize._32, f3.getHostBits()); assertEquals(BitSize._32, f3.getJvmBits()); assertEquals(new FullRevision(1, 6, 42), f3.getMinJvmVersion()); } public void testIsCompatibleWith() { ArchFilter f1 = makeCurrent("Windows 7", "amd64", "1.7.0_51"); assertTrue(new ArchFilter(null, null, null, null).isCompatibleWith(f1)); assertTrue (new ArchFilter(HostOs.WINDOWS, null, null, null).isCompatibleWith(f1)); assertFalse(new ArchFilter(HostOs.MACOSX , null, null, null).isCompatibleWith(f1)); assertFalse(new ArchFilter(HostOs.LINUX , null, null, null).isCompatibleWith(f1)); assertTrue (new ArchFilter(null, BitSize._64, null, null).isCompatibleWith(f1)); assertFalse(new ArchFilter(null, BitSize._32, null, null).isCompatibleWith(f1)); assertTrue (new ArchFilter(null, null, BitSize._64, null).isCompatibleWith(f1)); assertFalse(new ArchFilter(null, null, BitSize._32, null).isCompatibleWith(f1)); assertTrue (new ArchFilter(null, null, null, new NoPreviewRevision(1, 6, 42)).isCompatibleWith(f1)); assertTrue (new ArchFilter(null, null, null, new NoPreviewRevision(1, 7, 0)).isCompatibleWith(f1)); assertFalse(new ArchFilter(null, null, null, new NoPreviewRevision(1, 7, 1)).isCompatibleWith(f1)); assertFalse(new ArchFilter(null, null, null, new NoPreviewRevision(1, 8, 0)).isCompatibleWith(f1)); assertFalse(new ArchFilter(null, null, null, new NoPreviewRevision(2, 0, 0)).isCompatibleWith(f1)); } // ---- helpers --- /** * {@link ArchFilter#getCurrent()} uses java system properties to find the * current architecture attributes. This method temporarily overrides * System properties, calls {@link ArchFilter#getCurrent()} and then reset * the properties. * * @param osName The override value for the System "os.name" property. * @param osArch The override value for the System "os.arch" property. * @param javaVersion The override value for the System "java.version" property. * @return A new {@link ArchFilter} */ @NonNull private ArchFilter makeCurrent(@NonNull String osName, @NonNull String osArch, @NonNull String javaVersion) { String oldOsName = System.getProperty("os.name"); String oldOsArch = System.getProperty("os.arch"); String oldJavaVers = System.getProperty("java.version"); try { System.setProperty("os.name", osName); System.setProperty("os.arch", osArch); System.setProperty("java.version", javaVersion); return ArchFilter.getCurrent(); } finally { System.setProperty("os.name", oldOsName); System.setProperty("os.arch", oldOsArch); System.setProperty("java.version", oldJavaVers); } } }