-
Notifications
You must be signed in to change notification settings - Fork 1
/
IntegrationTest.java
98 lines (78 loc) · 2.97 KB
/
IntegrationTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package nl.weeaboo.vn.impl.test.integration;
import java.io.IOException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3NativesLoader;
import nl.weeaboo.filesystem.FilePath;
import nl.weeaboo.filesystem.InMemoryFileSystem;
import nl.weeaboo.gdx.test.junit.GdxLwjgl3TestRunner;
import nl.weeaboo.gdx.test.junit.GdxUiTest;
import nl.weeaboo.vn.core.IContext;
import nl.weeaboo.vn.core.IEnvironment;
import nl.weeaboo.vn.gdx.HeadlessGdx;
import nl.weeaboo.vn.impl.Launcher;
import nl.weeaboo.vn.impl.core.Novel;
import nl.weeaboo.vn.impl.core.StaticEnvironment;
import nl.weeaboo.vn.impl.script.ThrowingScriptExceptionHandler;
import nl.weeaboo.vn.impl.script.lua.LuaScriptEnv;
import nl.weeaboo.vn.impl.script.lua.LuaScriptUtil;
import nl.weeaboo.vn.impl.script.lua.LuaTestUtil;
import nl.weeaboo.vn.impl.test.FileSystemMock;
import nl.weeaboo.vn.impl.test.integration.lua.LuaAssertLib;
import nl.weeaboo.vn.script.ScriptException;
@RunWith(GdxLwjgl3TestRunner.class)
@Category(GdxUiTest.class)
public abstract class IntegrationTest {
protected Launcher launcher;
protected Novel novel;
@BeforeClass
public static final void beforeAllIntegration() {
HeadlessGdx.init();
}
@Before
public final void beforeIntegration() throws ScriptException {
if (getClass().getAnnotation(Category.class) == null) {
throw new IllegalStateException("pitest doesn't support category inheritance, so a category annotation"
+ "must be repeated on every test class");
}
Lwjgl3NativesLoader.load();
launcher = new Launcher(FileSystemMock.newGdxFileSystem(), new InMemoryFileSystem(false));
launcher.create();
novel = launcher.getNovel();
IEnvironment env = getEnv();
env.getScriptEnv().setExceptionHandler(ThrowingScriptExceptionHandler.INSTANCE);
// Add assert lib
new LuaAssertLib().initEnv((LuaScriptEnv)env.getScriptEnv());
}
@After
public final void afterIntegration() {
launcher.dispose();
// Clear static state
StaticEnvironment.getInstance().clear();
}
@AfterClass
public static final void afterAllIntegration() {
HeadlessGdx.clear();
}
protected IEnvironment getEnv() {
return novel.getEnv();
}
protected void loadScript(String path) {
loadScript(FilePath.of(path));
}
protected void loadScript(FilePath path) {
IContext context = getEnv().getContextManager().getPrimaryContext();
try {
LuaScriptUtil.loadScript(context, getEnv().getScriptEnv().getScriptLoader(), path);
} catch (IOException | ScriptException e) {
throw new AssertionError(e);
}
}
protected void waitForAllThreads() {
LuaTestUtil.waitForAllThreads(novel);
}
}