1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.scripting;
17
18 import static com.googlecode.catchexception.apis.BDDCatchException.*;
19 import static org.assertj.core.api.Assertions.assertThat;
20 import static org.assertj.core.api.BDDAssertions.then;
21
22 import org.apache.ibatis.executor.parameter.ParameterHandler;
23 import org.apache.ibatis.mapping.BoundSql;
24 import org.apache.ibatis.mapping.MappedStatement;
25 import org.apache.ibatis.mapping.SqlSource;
26 import org.apache.ibatis.parsing.XNode;
27 import org.apache.ibatis.scripting.defaults.RawLanguageDriver;
28 import org.apache.ibatis.session.Configuration;
29 import org.junit.jupiter.api.Test;
30
31
32
33
34 class LanguageDriverRegistryTest {
35
36 private LanguageDriverRegistry registry = new LanguageDriverRegistry();
37
38 @Test
39 void registerByType() {
40 registry.register(RawLanguageDriver.class);
41 LanguageDriver driver = registry.getDriver(RawLanguageDriver.class);
42
43 assertThat(driver).isInstanceOf(RawLanguageDriver.class);
44 }
45
46 @Test
47 void registerByTypeSameType() {
48 registry.register(RawLanguageDriver.class);
49 LanguageDriver driver = registry.getDriver(RawLanguageDriver.class);
50
51 registry.register(RawLanguageDriver.class);
52
53 assertThat(driver).isSameAs(registry.getDriver(RawLanguageDriver.class));
54 }
55
56 @Test
57 void registerByTypeNull() {
58 when(() -> registry.register((Class<? extends LanguageDriver>) null));
59 then(caughtException()).isInstanceOf(IllegalArgumentException.class)
60 .hasMessage("null is not a valid Language Driver");
61 }
62
63 @Test
64 void registerByTypeDoesNotCreateNewInstance() {
65 when(() -> registry.register(PrivateLanguageDriver.class));
66 then(caughtException()).isInstanceOf(ScriptingException.class)
67 .hasMessage("Failed to load language driver for org.apache.ibatis.scripting.LanguageDriverRegistryTest$PrivateLanguageDriver");
68 }
69
70 @Test
71 void registerByInstance() {
72 registry.register(new PrivateLanguageDriver());
73 LanguageDriver driver = registry.getDriver(PrivateLanguageDriver.class);
74
75 assertThat(driver).isInstanceOf(PrivateLanguageDriver.class);
76 }
77
78 @Test
79 void registerByInstanceSameType() {
80 registry.register(new PrivateLanguageDriver());
81 LanguageDriver driver = registry.getDriver(PrivateLanguageDriver.class);
82
83 registry.register(new PrivateLanguageDriver());
84
85 assertThat(driver).isSameAs(registry.getDriver(PrivateLanguageDriver.class));
86 }
87
88 @Test
89 void registerByInstanceNull() {
90 when(() -> registry.register((LanguageDriver) null));
91 then(caughtException()).isInstanceOf(IllegalArgumentException.class)
92 .hasMessage("null is not a valid Language Driver");
93 }
94
95 @Test
96 void setDefaultDriverClass() {
97 registry.setDefaultDriverClass(RawLanguageDriver.class);
98 assertThat(registry.getDefaultDriverClass() == RawLanguageDriver.class).isTrue();
99 assertThat(registry.getDefaultDriver()).isInstanceOf(RawLanguageDriver.class);
100 }
101
102 static private class PrivateLanguageDriver implements LanguageDriver {
103
104 @Override
105 public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
106 return null;
107 }
108
109 @Override
110 public SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType) {
111 return null;
112 }
113
114 @Override
115 public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
116 return null;
117 }
118 }
119
120 }