/*
 *    Copyright 2009-2020 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.builder;

import java.io.Reader;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.session.Configuration;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public class SqlSourceBuilderTest {

  private static Configuration configuration;
  private static SqlSourceBuilder sqlSourceBuilder;
  String sqlFromXml = "SELECT * \n        FROM user\n        WHERE user_id = 1";

  @BeforeAll
  static void setUp() throws Exception {
    // create an SqlSessionFactory
    try (Reader reader = Resources
      .getResourceAsReader("org/apache/ibatis/submitted/empty_row/mybatis-config.xml")) {
      XMLConfigBuilder parser = new XMLConfigBuilder(reader, null, null);
      configuration = parser.parse();
    }

    sqlSourceBuilder = new SqlSourceBuilder(configuration);
  }

  @Test
  void testMinifySqlEnabledIsFalse() {
    SqlSource sqlSource = sqlSourceBuilder.parse(sqlFromXml, null, null);
    BoundSql boundSql = sqlSource.getBoundSql(null);
    String actual = boundSql.getSql();
    Assertions.assertEquals(sqlFromXml, actual);
  }

  @Test
  void testMinifySqlEnabledIsTrue() {
    configuration.setShrinkWhitespacesInSql(true);
    SqlSource sqlSource = sqlSourceBuilder.parse(sqlFromXml, null, null);
    BoundSql boundSql = sqlSource.getBoundSql(null);
    String actual = boundSql.getSql();
    Assertions.assertNotEquals(sqlFromXml, actual);
  }
}

@@ -682,125 +682,8 @@
 r;%0A%0A
-import java.io.Reader;%0Aimport org.apache.ibatis.builder.xml.XMLConfigBuilder;%0Aimport org.apache.ibatis.io.Resources;%0A
 impo
@@ -889,19 +889,20 @@
 i.Before
-All
+Each
 ;%0Aimport
@@ -1089,16 +1089,27 @@
 mXml = %22
+%5C%5Ct%5C%5Cn%5C%5Cn  
 SELECT *
@@ -1109,16 +1109,17 @@
 ELECT * 
+%5C
 %5Cn      
@@ -1130,18 +1130,23 @@
 OM user%5C
+%5C
 n 
+%5C%5Ct 
        W
@@ -1161,16 +1161,24 @@
 r_id = 1
+%5C%5Cn%5C%5Ct  
 %22;%0A%0A  @B
@@ -1186,330 +1186,70 @@
 fore
-All%0A  static void setUp() throws Exception %7B%0A    // create an SqlSessionFactory%0A    try (Reader reader = Resources%0A      .getResourceAsReader(%22org/apache/ibatis/submitted/empty_row/mybatis-config.xml%22)) %7B%0A      XMLConfigBuilder parser
+Each%0A  void setUp() %7B%0A    configuration
  = new 
-XML
 Config
-Builder(reader, null, null);%0A      configuration = parser.parse();%0A    %7D
+uration();
 %0A%0A  
@@ -1620,24 +1620,114 @@
 dIsTrue() %7B%0A
+    String expected = %22%5C%5Ct%5C%5Cn%5C%5Cn SELECT * %5C%5Cn FROM user%5C%5Cn %5C%5Ct WHERE user_id = 1%5C%5Cn%5C%5Ct%22;%0A%0A
     configur
@@ -1923,32 +1923,33 @@
 ndSql.getSql();%0A
+%0A
     Assertions.a
@@ -1957,28 +1957,23 @@
 sert
-Not
 Equals(
-sqlFromXml
+expected
 , ac

test case code refactoring (https://github.com/mybatis/mybatis-3/pull/1901)