blob: 7f2f74efd7ea7e5b76c1a5200906baa9a3fd77fb [file] [log] [blame]
/*
* Copyright (C) 2008 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.cts;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactoryConfigurationError;
/**
* Test the test plan builder.
*
*/
public class TestPlanBuilderTests extends CtsTestBase {
public static boolean DEBUG = false;
private String mTestPackageBinaryName = "CtsTestPackage";
/** {@inheritDoc} */
@Override
public void tearDown() {
HostConfig.getInstance().removeTestPacakges();
deleteTestPackage(mTestPackageBinaryName);
super.tearDown();
}
/**
* Test getting test suite name list contained within a test package.
*/
public void testGetTestSuiteNames() throws IOException, NoSuchAlgorithmException {
final String appPackageName = "com.google.android.cts";
final String fullName = mTestPackageBinaryName + ".CtsTest";
final String caseName = "CtsTestHello";
final String testName = "testHello";
final String descriptionConfigStr = "<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"com.google\">\n"
+ " <TestCase name=\"CtsTestHello\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testHello\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " <TestSuite name=\"TestSuiteName\">\n"
+ " <TestCase name=\"TestCaseName\" priority=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"testName1\"" + " type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
HostConfig.getInstance().removeTestPacakges();
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
Collection<TestPackage> testPackages = HostConfig.getInstance().getTestPackages();
assertEquals(1, testPackages.size());
TestPackage testPackage = testPackages.iterator().next();
String suiteFullName = "com.google";
TestSuite suite = testPackage.getTestSuiteByName(suiteFullName);
assertEquals(suiteFullName, suite.getFullName());
String caseFullName = "com.google.CtsTestHello";
TestCase cazz = testPackage.getTestCaseByName(caseFullName);
assertEquals(caseFullName, cazz.getFullName());
List<String> testNames = testPackage.getAllTestNames(caseFullName);
String testFullName = "com.google.CtsTestHello#testHello";
assertEquals(1, testNames.size());
assertEquals(testFullName, testNames.get(0));
suiteFullName = "com.google.TestSuiteName";
suite = testPackage.getTestSuiteByName(suiteFullName);
assertEquals(suiteFullName, suite.getFullName());
caseFullName = "com.google.TestSuiteName.TestCaseName";
cazz = testPackage.getTestCaseByName(caseFullName);
assertEquals(caseFullName, cazz.getFullName());
testNames = testPackage.getAllTestNames(caseFullName);
testFullName = "com.google.TestSuiteName.TestCaseName#testName1";
assertEquals(1, testNames.size());
assertEquals(testFullName, testNames.get(0));
}
/**
* Test building test plan.
*/
public void testPlanBuilder() throws IOException,
ParserConfigurationException,
TransformerFactoryConfigurationError, TransformerException, NoSuchAlgorithmException {
if (DEBUG) {
final String appPackageName = "com.google";
final String suiteName1 = "com.google.SuiteName1";
final String caseName1 = "CtsTestHello";
final String testName1 = "testHello";
final String cName2 = "CtsTestHello2";
final String testName2 = "testHello2";
final String testName3 = "testHello3";
final String testName4 = "testHello4";
final String testName5 = "testHello5";
final String nestedSuiteName1 = "com.google";
final String nestedSuiteName2 = "CtsTest.SuiteName2";
final String descriptionConfigStr =
"<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " <TestSuite name=\"" + nestedSuiteName1+ "\"" + ">\n"
+ " <TestSuite name=\"" + nestedSuiteName2+ "\"" + ">\n"
+ " <TestCase name=\"" + cName2 + "\"" + " priority=\"mandatory\">\n"
+ " <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName4 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName5 +"\" type=\"automatic\" />\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig.getInstance().loadTestPackages();
ArrayList<String> packageNames = new ArrayList<String>();
packageNames.add(appPackageName);
PlanBuilder planBuilder = new PlanBuilder(packageNames);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
planBuilder.setInputStream(in);
HashMap<String, ArrayList<String>> results = planBuilder.doSelect();
String planName = "plan_test";
if (results != null) {
Log.i("result=" + results.toString());
ArrayList<String> excludedList = results.get(appPackageName);
if (excludedList != null) {
for(String str : excludedList) {
Log.i(str);
}
} else {
Log.i("Nothing is excluded at all!");
}
String planPath =
HostConfig.getInstance().getPlanRepository().getPlanPath(planName);
TestSessionBuilder.getInstance().serialize(planName, packageNames, results);
Log.i("planPath=" + planPath);
} else {
Log.i("Selected nothing for the plan of "
+ planName + ". The plan is not created!");
}
}
}
/**
* Test get excluded list.
*/
public void testGetExcludedList() throws IOException,
TransformerFactoryConfigurationError, NoSuchAlgorithmException {
final String appPackageName = "com.google";
final String suiteName1 = "com.google.SuiteName1";
final String caseName1 = "CtsTestHello";
final String testName1 = "testHello";
final String cName2 = "CtsTestHello2";
final String testName2 = "testHello2";
final String testName3 = "testHello3";
final String testName4 = "testHello4";
final String testName5 = "testHello5";
final String nestedSuiteName1 = "com.google";
final String nestedSuiteName2 = "CtsTest.SuiteName2";
final String descriptionConfigStr =
"<TestPackage name=\"" + mTestPackageBinaryName + "\""
+ " appPackageName=\"" + appPackageName + "\""
+ " version=\"1.0\" AndroidFramework=\"Android 1.0\""
+ " runner=\"android.test.InstrumentationTestRunner\" >\n"
+ " <Description>something extracted from java doc</Description>\n"
+ " <TestSuite name=\"" + suiteName1 + "\"" + ">\n"
+ " <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " <TestSuite name=\"" + nestedSuiteName1+ "\"" + ">\n"
+ " <TestSuite name=\"" + nestedSuiteName2+ "\"" + ">\n"
+ " <TestCase name=\"" + cName2 + "\"" + " priority=\"mandatory\">\n"
+ " <Test name=\"" + testName2 +"\" type=\"automatic\" />\n"
+ " <Test name=\"" + testName3 +"\" type=\"automatic\" />\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ " <TestCase name=\"" + caseName1 + "\"" + " category=\"mandatory\">\n"
+ " <Description>" + "something extracted from java doc"
+ " </Description>\n"
+ " <!-- Test Methods -->\n"
+ " <Test name=\"" + testName1 + "\" type=\"automatic\"" + "/>\n"
+ " </TestCase>\n"
+ " </TestSuite>\n"
+ "</TestPackage>\n";
createTestPackage(descriptionConfigStr, mTestPackageBinaryName);
HostConfig hf = HostConfig.getInstance();
hf.loadTestPackages();
TestPackage pkg = hf.getTestPackage(appPackageName);
assertNotNull(pkg);
String caseOneName = suiteName1 + "." + caseName1;
String caseTwoName = nestedSuiteName1 + "." + nestedSuiteName2 + "." + cName2;
Collection<Test> tests = pkg.getTests();
assertEquals(4, tests.size());
Iterator<Test> iterator = tests.iterator();
Test test1 = iterator.next();
Test test2 = iterator.next();
Test test3 = iterator.next();
Test test4 = iterator.next();
ArrayList<String> excludedList = null;
//scenario 1: all tests are not executed and get excluded list with notExecuted
excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
assertNotNull(excludedList);
assertEquals(0, excludedList.size());
//scenario 2: all tests are not executed and get excluded list with timeout
excludedList = pkg.getExcludedList(CtsTestResult.STR_TIMEOUT);
assertNull(excludedList);
//scenario 3: all tests are not executed and get excluded list with nothing
excludedList = pkg.getExcludedList(null);
assertNotNull(excludedList);
assertEquals(0, excludedList.size());
//scenario 4: not all all tests are executed and get excluded list with notExecuted
test2.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
assertNotNull(excludedList);
assertEquals(1, excludedList.size());
assertEquals(test2.getFullName(), excludedList.get(0));
test2.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
//scenario 5: excluded a whole suite
test1.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
assertNotNull(excludedList);
assertEquals(1, excludedList.size());
assertEquals(suiteName1, excludedList.get(0));
test1.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
//scenario 6: excluded the test case directly under the embedded test suite
String caseName = nestedSuiteName1 + "." + caseName1;
test4.setResult(new CtsTestResult(CtsTestResult.CODE_PASS, null, null));
excludedList = pkg.getExcludedList(CtsTestResult.STR_NOT_EXECUTED);
assertNotNull(excludedList);
assertEquals(1, excludedList.size());
assertEquals(caseName, excludedList.get(0));
test4.setResult(new CtsTestResult(CtsTestResult.CODE_NOT_EXECUTED, null, null));
}
}