EvenMoreAsserts.java revision 59f6477e10203617f504857f7e9aee2fda393f4f
159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee/*
259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * Copyright (C) 2011 The Android Open Source Project
359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee *
459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License");
559f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * you may not use this file except in compliance with the License.
659f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * You may obtain a copy of the License at
759f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee *
859f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee *      http://www.apache.org/licenses/LICENSE-2.0
959f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee *
1059f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * Unless required by applicable law or agreed to in writing, software
1159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS,
1259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * See the License for the specific language governing permissions and
1459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * limitations under the License.
1559f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee */
1659f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
1759f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjeepackage com.android.providers.contacts;
1859f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
1959f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjeeimport junit.framework.Assert;
2059f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
2159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee/**
2259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee * Contains additional assertion methods not found in Junit or MoreAsserts.
2359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee */
2459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjeepublic final class EvenMoreAsserts {
2559f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    // Non instantiable.
2659f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    private EvenMoreAsserts() { }
2759f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
2859f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    public static <T extends Exception> void assertThrows(Class<T> exception, Runnable r) {
2959f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        assertThrows(null, exception, r);
3059f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    }
3159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
3259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    public static <T extends Exception> void assertThrows(String message, Class<T> exception,
3359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee            Runnable r) {
3459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        try {
3559f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee            r.run();
3659f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee           // Cannot invoke Assert.fail() here because it will be caught by the try/catch below
3759f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee           // and, if we are expecting an AssertionError or AssertionFailedError (depending on
3859f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee           // the platform), we might incorrectly identify that as a success.
3959f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        } catch (Exception e) {
4059f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee            if (!exception.isInstance(e)) {
4159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee                Assert.fail(appendUserMessage("Exception " + exception + " expected but " +
4259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee                        e.getClass() +" thrown: " + e, message));
4359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee            }
4459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee            return;
4559f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        }
4659f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        Assert.fail(appendUserMessage(
4759f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee                "Exception " + exception + " expected but no exception was thrown.",
4859f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee                message));
4959f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    }
5059f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee
5159f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    private static String appendUserMessage(String errorMsg, String userMsg) {
5259f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee        return userMsg == null ? errorMsg : errorMsg + userMsg;
5359f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee    }
5459f6477e10203617f504857f7e9aee2fda393f4fDebashish Chatterjee}
55