TestUtil.java revision 4ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29
14ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williamspackage com.xtremelabs.robolectric.util;
24ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
34ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williamsimport java.io.File;
44ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williamsimport java.util.Collection;
54ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
64ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williamsimport static org.junit.Assert.assertTrue;
74ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
84ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williamspublic abstract class TestUtil {
94ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static File testDirLocation;
104ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
114ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static void assertEquals(Collection<?> expected, Collection<?> actual) {
124ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        org.junit.Assert.assertEquals(stringify(expected), stringify(actual));
134ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
144ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
154ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static String stringify(Collection<?> collection) {
164ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        StringBuilder buf = new StringBuilder();
174ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        for (Object o : collection) {
184ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            if (buf.length() > 0) buf.append("\n");
194ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            buf.append(o);
204ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        }
214ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        return buf.toString();
224ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
234ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
244ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static <T> void assertInstanceOf(Class<? extends T> expectedClass, T object) {
254ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        Class actualClass = object.getClass();
264ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        assertTrue(expectedClass + " should be assignable from " + actualClass,
274ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams                expectedClass.isAssignableFrom(actualClass));
284ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
294ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
304ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static File file(String... pathParts) {
314ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        return file(new File("."), pathParts);
324ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
334ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
344ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static File file(File f, String... pathParts) {
354ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        for (String pathPart : pathParts) {
364ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            f = new File(f, pathPart);
374ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        }
384ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        return f;
394ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
404ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
414ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static File resourcesBaseDir() {
424ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        if (testDirLocation == null) {
434ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            File testDir = file("src", "test", "resources");
444ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            if (testDir.isDirectory()) return testDirLocation = testDir;
454ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
464ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            File roboTestDir = file("robolectric", "src", "test", "resources");
474ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            if (roboTestDir.isDirectory()) return testDirLocation = roboTestDir;
484ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
494ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            throw new RuntimeException("can't find your TestAndroidManifest.xml in "
504ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams                    + testDir.getAbsolutePath() + " or " + roboTestDir.getAbsolutePath());
514ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        } else {
524ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams            return testDirLocation;
534ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        }
544ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
554ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams
564ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    public static File resourceFile(String... pathParts) {
574ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams        return file(resourcesBaseDir(), pathParts);
584ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams    }
594ac725f9b4cebbf46805fc5e9b2f0eaf3fdd9b29Christian Williams}
60