/* * Copyright 2002-2014 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.springframework.test.context.jdbc; import java.lang.reflect.Method; import org.junit.Test; import static org.junit.Assert.*; import static org.springframework.jdbc.datasource.init.ScriptUtils.*; import static org.springframework.test.context.jdbc.SqlConfig.ErrorMode.*; import static org.springframework.test.context.jdbc.SqlConfig.TransactionMode.*; /** * Unit tests for {@link MergedSqlConfig}. * * @author Sam Brannen * @since 4.1 */ public class MergedSqlConfigTests { private void assertDefaults(MergedSqlConfig cfg) { assertNotNull(cfg); assertEquals("dataSource", "", cfg.getDataSource()); assertEquals("transactionManager", "", cfg.getTransactionManager()); assertEquals("transactionMode", INFERRED, cfg.getTransactionMode()); assertEquals("encoding", "", cfg.getEncoding()); assertEquals("separator", DEFAULT_STATEMENT_SEPARATOR, cfg.getSeparator()); assertEquals("commentPrefix", DEFAULT_COMMENT_PREFIX, cfg.getCommentPrefix()); assertEquals("blockCommentStartDelimiter", DEFAULT_BLOCK_COMMENT_START_DELIMITER, cfg.getBlockCommentStartDelimiter()); assertEquals("blockCommentEndDelimiter", DEFAULT_BLOCK_COMMENT_END_DELIMITER, cfg.getBlockCommentEndDelimiter()); assertEquals("errorMode", FAIL_ON_ERROR, cfg.getErrorMode()); } @Test public void localConfigWithDefaults() throws Exception { Method method = getClass().getMethod("localConfigMethodWithDefaults"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, getClass()); assertDefaults(cfg); } @Test public void globalConfigWithDefaults() throws Exception { Method method = GlobalConfigWithDefaultsClass.class.getMethod("globalConfigMethod"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, GlobalConfigWithDefaultsClass.class); assertDefaults(cfg); } @Test public void localConfigWithCustomValues() throws Exception { Method method = getClass().getMethod("localConfigMethodWithCustomValues"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, getClass()); assertNotNull(cfg); assertEquals("dataSource", "ds", cfg.getDataSource()); assertEquals("transactionManager", "txMgr", cfg.getTransactionManager()); assertEquals("transactionMode", ISOLATED, cfg.getTransactionMode()); assertEquals("encoding", "enigma", cfg.getEncoding()); assertEquals("separator", "\n", cfg.getSeparator()); assertEquals("commentPrefix", "`", cfg.getCommentPrefix()); assertEquals("blockCommentStartDelimiter", "<<", cfg.getBlockCommentStartDelimiter()); assertEquals("blockCommentEndDelimiter", ">>", cfg.getBlockCommentEndDelimiter()); assertEquals("errorMode", IGNORE_FAILED_DROPS, cfg.getErrorMode()); } @Test public void localConfigWithContinueOnError() throws Exception { Method method = getClass().getMethod("localConfigMethodWithContinueOnError"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, getClass()); assertNotNull(cfg); assertEquals("errorMode", CONTINUE_ON_ERROR, cfg.getErrorMode()); } @Test public void localConfigWithIgnoreFailedDrops() throws Exception { Method method = getClass().getMethod("localConfigMethodWithIgnoreFailedDrops"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, getClass()); assertNotNull(cfg); assertEquals("errorMode", IGNORE_FAILED_DROPS, cfg.getErrorMode()); } @Test public void globalConfig() throws Exception { Method method = GlobalConfigClass.class.getMethod("globalConfigMethod"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, GlobalConfigClass.class); assertNotNull(cfg); assertEquals("dataSource", "", cfg.getDataSource()); assertEquals("transactionManager", "", cfg.getTransactionManager()); assertEquals("transactionMode", INFERRED, cfg.getTransactionMode()); assertEquals("encoding", "global", cfg.getEncoding()); assertEquals("separator", "\n", cfg.getSeparator()); assertEquals("commentPrefix", DEFAULT_COMMENT_PREFIX, cfg.getCommentPrefix()); assertEquals("blockCommentStartDelimiter", DEFAULT_BLOCK_COMMENT_START_DELIMITER, cfg.getBlockCommentStartDelimiter()); assertEquals("blockCommentEndDelimiter", DEFAULT_BLOCK_COMMENT_END_DELIMITER, cfg.getBlockCommentEndDelimiter()); assertEquals("errorMode", IGNORE_FAILED_DROPS, cfg.getErrorMode()); } @Test public void globalConfigWithLocalOverrides() throws Exception { Method method = GlobalConfigClass.class.getMethod("globalConfigWithLocalOverridesMethod"); SqlConfig localSqlConfig = method.getAnnotation(Sql.class).config(); MergedSqlConfig cfg = new MergedSqlConfig(localSqlConfig, GlobalConfigClass.class); assertNotNull(cfg); assertEquals("dataSource", "", cfg.getDataSource()); assertEquals("transactionManager", "", cfg.getTransactionManager()); assertEquals("transactionMode", INFERRED, cfg.getTransactionMode()); assertEquals("encoding", "local", cfg.getEncoding()); assertEquals("separator", "@@", cfg.getSeparator()); assertEquals("commentPrefix", DEFAULT_COMMENT_PREFIX, cfg.getCommentPrefix()); assertEquals("blockCommentStartDelimiter", DEFAULT_BLOCK_COMMENT_START_DELIMITER, cfg.getBlockCommentStartDelimiter()); assertEquals("blockCommentEndDelimiter", DEFAULT_BLOCK_COMMENT_END_DELIMITER, cfg.getBlockCommentEndDelimiter()); assertEquals("errorMode", CONTINUE_ON_ERROR, cfg.getErrorMode()); } // ------------------------------------------------------------------------- @Sql public static void localConfigMethodWithDefaults() { } @Sql(config = @SqlConfig(dataSource = "ds", transactionManager = "txMgr", transactionMode = ISOLATED, encoding = "enigma", separator = "\n", commentPrefix = "`", blockCommentStartDelimiter = "<<", blockCommentEndDelimiter = ">>", errorMode = IGNORE_FAILED_DROPS)) public static void localConfigMethodWithCustomValues() { } @Sql(config = @SqlConfig(errorMode = CONTINUE_ON_ERROR)) public static void localConfigMethodWithContinueOnError() { } @Sql(config = @SqlConfig(errorMode = IGNORE_FAILED_DROPS)) public static void localConfigMethodWithIgnoreFailedDrops() { } @SqlConfig public static class GlobalConfigWithDefaultsClass { @Sql("foo.sql") public void globalConfigMethod() { } } @SqlConfig(encoding = "global", separator = "\n", errorMode = IGNORE_FAILED_DROPS) public static class GlobalConfigClass { @Sql("foo.sql") public void globalConfigMethod() { } @Sql(scripts = "foo.sql", config = @SqlConfig(encoding = "local", separator = "@@", errorMode = CONTINUE_ON_ERROR)) public void globalConfigWithLocalOverridesMethod() { } } }