/**
* Copyright 2009-2017 the original author or authors.
*
* 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.
*/
package org.apache.ibatis.scripting;
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.parsing.XNode;
import org.apache.ibatis.scripting.defaults.RawLanguageDriver;
import org.apache.ibatis.session.Configuration;
import org.junit.Test;
import static com.googlecode.catchexception.apis.BDDCatchException.*;
import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Kazuki Shimizu
*/
public class LanguageDriverRegistryTest {
private LanguageDriverRegistry registry = new LanguageDriverRegistry();
@Test
public void registerByType() {
registry.register(RawLanguageDriver.class);
LanguageDriver driver = registry.getDriver(RawLanguageDriver.class);
assertThat(driver).isInstanceOf(RawLanguageDriver.class);
}
@Test
public void registerByTypeSameType() {
registry.register(RawLanguageDriver.class);
LanguageDriver driver = registry.getDriver(RawLanguageDriver.class);
registry.register(RawLanguageDriver.class);
assertThat(driver).isSameAs(registry.getDriver(RawLanguageDriver.class));
}
@Test
public void registerByTypeNull() {
when(registry).register((Class<?>) null);
then(caughtException()).isInstanceOf(IllegalArgumentException.class)
.hasMessage("null is not a valid Language Driver");
}
@Test
public void registerByTypeDoesNotCreateNewInstance() {
when(registry).register(PrivateLanguageDriver.class);
then(caughtException()).isInstanceOf(ScriptingException.class)
.hasMessage("Failed to load language driver for org.apache.ibatis.scripting.LanguageDriverRegistryTest$PrivateLanguageDriver");
}
@Test
public void registerByInstance() {
registry.register(new PrivateLanguageDriver());
LanguageDriver driver = registry.getDriver(PrivateLanguageDriver.class);
assertThat(driver).isInstanceOf(PrivateLanguageDriver.class);
}
@Test
public void registerByInstanceSameType() {
registry.register(new PrivateLanguageDriver());
LanguageDriver driver = registry.getDriver(PrivateLanguageDriver.class);
registry.register(new PrivateLanguageDriver());
assertThat(driver).isSameAs(registry.getDriver(PrivateLanguageDriver.class));
}
@Test
public void registerByInstanceNull() {
when(registry).register((LanguageDriver) null);
then(caughtException()).isInstanceOf(IllegalArgumentException.class)
.hasMessage("null is not a valid Language Driver");
}
@Test
public void setDefaultDriverClass() {
registry.setDefaultDriverClass(RawLanguageDriver.class);
assertThat(registry.getDefaultDriverClass() == RawLanguageDriver.class).isTrue();
assertThat(registry.getDefaultDriver()).isInstanceOf(RawLanguageDriver.class);
}
static private class PrivateLanguageDriver implements LanguageDriver {
@Override
public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
return null;
}
@Override
public SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType) {
return null;
}
@Override
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
return null;
}
}
}