Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb469fe3 authored by Brett Chabot's avatar Brett Chabot
Browse files

Add test runner log when test case class is not loaded.

The test runner will only load TestCase classes that have a public
constructor with either no params or a single String parameter.

This is fairly subtle behavior and can be difficult to catch. This change
adds a log message when a TestCase class is not loaded, and adds some
associated unit tests.

Change-Id: I6fc63e4179c949620f5773e0ae134f99905a6fb2
parent a2c980d3
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import java.util.TreeSet;
 */
public class TestGrouping {

    private static final String LOG_TAG = "TestGrouping";

    SortedSet<Class<? extends TestCase>> testCaseClasses;

    public static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
@@ -114,7 +116,7 @@ public class TestGrouping {
        for (String packageName : packageNames) {
            List<Class<? extends TestCase>> addedClasses = testCaseClassesInPackage(packageName);
            if (addedClasses.isEmpty()) {
                Log.w("TestGrouping", "Invalid Package: '" + packageName
                Log.w(LOG_TAG, "Invalid Package: '" + packageName
                        + "' could not be found or has no tests");
            }
            testCaseClasses.addAll(addedClasses);
@@ -234,6 +236,10 @@ public class TestGrouping {
                    }
                }
            }
            Log.i(LOG_TAG, String.format(
                    "TestCase class %s is missing a public constructor with no parameters " +
                    "or a single String parameter - skipping",
                    aClass.getName()));
            return false;
        }
    }
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 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 android.test.suitebuilder;

import java.util.List;

import junit.framework.TestCase;

/**
 * Unit tests for {@link TestGrouping}
 */
public class TestGroupingTest extends TestCase {

    private TestGrouping mGrouping;

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME);
    }

    /**
     * Verifies that TestCases with no public constructor are not loaded.
     * Relies on fixture classes in android.test.suitebuilder.examples.constructor
     */
    public void testGetTests_noPublicConstructor() {
        mGrouping.addPackagesRecursive("android.test.suitebuilder.examples.constructor");
        List<TestMethod> tests = mGrouping.getTests();
        // only the PublicConstructorTest's test method should be present
        assertEquals(1, tests.size());
        assertEquals("testPublicConstructor", tests.get(0).getName());
    }
}
+35 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 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 android.test.suitebuilder.examples.constructor;

import junit.framework.TestCase;

/**
 * A {@link TestCase} which should not be loaded since it has non-public constructors with no args.
 */
public class NoPublicConstructorTest extends TestCase {

    NoPublicConstructorTest() {
    }

    public NoPublicConstructorTest(String foo, String foo2) {
    }

    public void testNotRun() {
        fail("method in NoPublicConstructorTest run unexpectedly");
    }
}
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 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 android.test.suitebuilder.examples.constructor;

import junit.framework.TestCase;

/**
 * A protected constructor test case that should not be loaded.
 */
public class ProtectedConstructorTest extends TestCase {

    protected ProtectedConstructorTest() {
    }

    public void testNotRun() {
        fail("method in ProtectedConstructorTest run unexpectedly");
    }

}
+28 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 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 android.test.suitebuilder.examples.constructor;

import junit.framework.TestCase;

/**
 * A public constructor test case that should be loaded.
 */
public class PublicConstructorTest extends TestCase {

    public void testPublicConstructor() {
    }
}