org.rapidoid.test.RapidoidIntegrationTest Maven / Gradle / Ivy
/*-
* #%L
* rapidoid-commons
* %%
* Copyright (C) 2014 - 2018 Nikolche Mihajlovski and contributors
* %%
* 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.
* #L%
*/
package org.rapidoid.test;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.rapidoid.RapidoidModule;
import org.rapidoid.RapidoidModules;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.IntegrationTest;
import org.rapidoid.annotation.Since;
import org.rapidoid.beany.Metadata;
import org.rapidoid.log.Log;
import org.rapidoid.util.Msc;
@Authors("Nikolche Mihajlovski")
@Since("5.1.6")
public abstract class RapidoidIntegrationTest extends RapidoidTest {
@Before
public final void beforeRapidoidTest() {
Log.info("--------------------------------------------------------------------------------");
Log.info("@" + Msc.processId() + " TEST " + getClass().getCanonicalName());
Log.info("--------------------------------------------------------------------------------");
clearErrors();
isTrue(Msc.isInsideTest());
before(this);
start(this);
}
@After
public final void afterRapidoidTest() {
after(this);
if (hasError()) {
Assert.fail("Assertion error(s) occurred, probably were caught or were thrown on non-main thread!");
}
}
public static void before(Object test) {
Msc.logSection("INITIALIZE");
for (RapidoidModule mod : RapidoidModules.getAllAvailable()) {
Log.debug("Initializing module before the test", "module", mod.name(), "order", mod.order());
mod.beforeTest(test);
}
Log.debug("All modules are initialized");
}
public static void start(Object test) {
runMainClass(test);
for (RapidoidModule mod : RapidoidModules.getAllAvailable()) {
Log.debug("Initializing the test", "module", mod.name(), "order", mod.order());
mod.initTest(test);
}
Msc.logSection("START TEST");
}
private static void runMainClass(Object test) {
IntegrationTest testInfo = Metadata.getAnnotationRecursive(test.getClass(), IntegrationTest.class);
if (testInfo != null) {
Msc.logSection("RUN MAIN");
Class> main = testInfo.main();
String[] args = testInfo.args();
Msc.invokeMain(main, args);
}
}
public static void after(Object test) {
Msc.logSection("END TEST");
for (RapidoidModule mod : RapidoidModules.getAllAvailable()) {
mod.afterTest(test);
}
Msc.logSection("FINISHED");
}
}