/*
* Copyright (C) 2009 Jayway AB
*
* 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.jayway.maven.plugins.android;
import org.codehaus.plexus.util.ReflectionUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Excercises the {@link AndroidSdk} class.
*
* @author hugo.josefson@jayway.com
* @author Manfred Moser <manfred@simpligility.com>
*/
public class AndroidSdkTest {
private SdkTestSupport sdkTestSupport;
@Before
public void setUp(){
sdkTestSupport = new SdkTestSupport();
}
@Test
public void givenToolAdbThenPathIsCommon() {
final String pathForTool =sdkTestSupport.getSdk_with_platform_1_5().getPathForTool("adb");
Assert.assertEquals(new File(sdkTestSupport.getEnv_ANDROID_HOME() + "/tools/adb").getAbsolutePath(), pathForTool);
}
@Test
public void givenToolAndroidThenPathIsCommon() {
final String pathForTool =sdkTestSupport.getSdk_with_platform_1_5().getPathForTool("android");
Assert.assertEquals(new File(sdkTestSupport.getEnv_ANDROID_HOME() + "/tools/android").getAbsolutePath(), pathForTool);
}
@Test
public void givenToolAaptAndPlatform1dot1ThenPathIsPlatform1dot1() {
final AndroidSdk sdk = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2");
final String pathForTool = sdk.getPathForTool("aapt");
Assert.assertEquals(new File(sdkTestSupport.getEnv_ANDROID_HOME() + "/platforms/android-2/tools/aapt"), new File(pathForTool));
}
@Test
public void givenToolAaptAndPlatform1dot5ThenPathIsPlatform1dot5() {
final AndroidSdk sdk = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "3");
final String pathForTool = sdk.getPathForTool("aapt");
Assert.assertEquals(new File(sdkTestSupport.getEnv_ANDROID_HOME() + "/platforms/android-3/tools/aapt"), new File(pathForTool));
}
@Test(expected = InvalidSdkException.class)
public void givenInvalidSdkPathThenException() throws IOException {
new AndroidSdk(File.createTempFile("maven-android-plugin", "test"), null).getLayout();
}
@Test(expected = InvalidSdkException.class)
public void givenInvalidPlatformStringThenException() throws IOException {
final AndroidSdk sdk = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "invalidplatform");
}
@Test
public void givenSdk15PathThenLayoutIs15(){
Assert.assertEquals(sdkTestSupport.getSdk_with_platform_default().getLayout(), AndroidSdk.Layout.LAYOUT_1_5);
}
@Test
public void givenPlatform1dot5ThenPlatformis1dot5() throws IllegalAccessException {
final File path = (File) ReflectionUtils.getValueIncludingSuperclasses("sdkPath",sdkTestSupport.getSdk_with_platform_1_5());
Assert.assertEquals(new File(path, "/platforms/android-3"),sdkTestSupport.getSdk_with_platform_1_5().getPlatform());
}
@Test
public void givenPlatformNullThenPlatformisSomethingValidLooking() throws IllegalAccessException, URISyntaxException {
final File path = (File) ReflectionUtils.getValueIncludingSuperclasses("sdkPath",sdkTestSupport.getSdk_with_platform_default());
final File platform = sdkTestSupport.getSdk_with_platform_default().getPlatform();
final String platformPath = platform.getAbsolutePath();
final String pathPath = path.getAbsolutePath();
final String regex = new File(pathPath + "/platforms/android-.*").toURI().toString();
Assert.assertTrue(new File(platformPath).toURI().toString().matches(regex));
}
/**
* Test all available platforms and api level versions. All have to be installed locally
* for this test to pass including the obsolete ones.
*/
@Test
public void validPlatformsAndApiLevels() {
final AndroidSdk sdk2 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2");
final AndroidSdk sdk3 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "3");
final AndroidSdk sdk4 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "4");
final AndroidSdk sdk5 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "5");
final AndroidSdk sdk6 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "6");
final AndroidSdk sdk7 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "7");
final AndroidSdk sdk8 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "8");
final AndroidSdk sdk1_1 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "1.1");
final AndroidSdk sdk1_5 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "1.5");
final AndroidSdk sdk1_6 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "1.6");
final AndroidSdk sdk2_0 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2.0");
final AndroidSdk sdk2_0_1 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2.0.1");
final AndroidSdk sdk2_1 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2.1");
final AndroidSdk sdk2_2 = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "2.2");
}
@Test(expected = InvalidSdkException.class)
public void invalidPlatformAndApiLevels() {
final AndroidSdk invalid = new AndroidSdk(new File(sdkTestSupport.getEnv_ANDROID_HOME()), "invalid");
}
}