/* * Copyright (c) 2014 Farata Systems http://www.faratasystems.com * * Licensed under The MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ package clear.cdb.support.test; import junit.framework.AssertionFailedError; import javax.tools.Diagnostic; import javax.tools.JavaFileObject; import java.util.List; /** * Set of assert methods used on the {@link Diagnostic}s emitted by the Java {@link Compiler}. * * @author Michael Pellaton */ public final class DiagnosticsAssert { /** * Avoid instantiation. */ private DiagnosticsAssert() { throw new AssertionError("Not instantiable."); } /** * Asserts that the list of {@link Diagnostic}s passed is null or empty (meaning the compiler has not emitted any * messages). * * @param diagnostics the diagnostics to assert */ public static void assertNoCompilerMessage(List<Diagnostic<? extends JavaFileObject>> diagnostics) { if (diagnostics != null && !diagnostics.isEmpty()) { throw new AssertionFailedError(); } } /** * Asserts that the diagnostics passed contain exactly the single expected message on the expected line. * * @param expectedKind the expected message * @param expectedLineNumber the expected line number * @param diagnostics the diagnostics to assert */ public static void assertContainsSingleMessage(Diagnostic.Kind expectedKind, long expectedLineNumber, List<Diagnostic<? extends JavaFileObject>> diagnostics) { if (diagnostics.size() != 1) { throw new AssertionFailedError("Number of diagnostic messages expected <1> but was <" + diagnostics.size() + ">"); } Diagnostic<? extends JavaFileObject> diagnostic = diagnostics.get(0); if (!(expectedKind == diagnostic.getKind() && expectedLineNumber == diagnostic.getLineNumber())) { throw new AssertionFailedError("Diagnostic message expected <" + expectedKind + ", on line " + expectedLineNumber + "> but was <" + diagnostic.getKind() + " on line " + diagnostic.getLineNumber() + ">"); } } public static void assertNoCompilerErrors(List<Diagnostic<? extends JavaFileObject>> diagnostics) { for (Diagnostic d : diagnostics) if (d.getKind().equals(Diagnostic.Kind.ERROR)) throw new AssertionFailedError("Diagnostic message expected without errors but was ERROR: " + d.toString()); } }