/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.util.internal;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/**
* 测试<code>IndentableStringBuilder</code>。
*
* @author Michael Zhou
*/
public class IndentableStringBuilderTests extends AbstractNormalizableStringBuilderTests<IndentableStringBuilder> {
@Before
public void init() {
buf = new IndentableStringBuilder();
}
@Test
public void indent_simple() {
buf.append("aaa").start();
buf.append("bbb");
buf.end();
assertEquals("aaa {\n" + " bbb\n" + "}", buf.toString());
}
@Test
public void indent_simple2() {
buf.append("aaa").start(4);
buf.append("bbb");
buf.end();
buf.start();
buf.append("ccc");
buf.end();
assertEquals("aaa {\n" + " bbb\n" + "}\n" + "{\n" + " ccc\n" + "}", buf.toString());
}
@Test
public void indent_multilines() {
buf.append("a\n");
buf.append("aa\n");
buf.append("aaa").start();
buf.append("b\n");
buf.append("bb\n");
buf.append("bbb\n"); // 最后一个\n会被忽略
buf.end();
assertEquals("a\n" + "aa\n" + "aaa {\n" + " b\n" + " bb\n" + " bbb\n" + "}", buf.toString());
}
@Test
public void indent_multiple_indention() {
buf.append("aaa").start();
{
buf.start("[", "]");
{
buf.start("[[", "]]");
buf.end();
}
buf.end();
buf.start("[", "]");
{
buf.start("[[", "]]");
{
buf.append("bbb");
}
buf.end();
buf.append("ccc");
}
buf.end();
buf.start("[[[", "]]]");
{
buf.append("ddd");
buf.start("", "");
{
buf.append("eee\n");
buf.startHangingIndent();
{
buf.append("fff\nhhh\niii"); // 悬挂缩进:默认缩进2
}
buf.end();
buf.startHangingIndent();
{
buf.append("jjj"); // 悬挂缩进 (由于没有换行,所以实际不缩进)
}
buf.end();
buf.append("value = ").startHangingIndent();
{
buf.append("lll\n"); // 悬挂缩进:缩进到当前列(即value = 之后)
buf.append("mmm");
}
buf.end();
buf.append("kkk");
}
buf.end();
buf.append("ggg");
}
buf.end();
}
buf.end();
assertEquals("aaa {\n" + " [\n" + " [[\n" + " bbb\n" + " ]]\n" + " ccc\n" + " ]\n" + " [[[\n"
+ " ddd\n" + " eee\n" + " fff\n" + " hhh\n" + " iii\n" + " jjj\n"
+ " value = lll\n" + " mmm\n" + " kkk\n" + " ggg\n" + " ]]]\n" + "}",
buf.toString());
}
@Test
public void indent_hanging() {
buf.startHangingIndent();
buf.append("aaa");
buf.end();
assertEquals("aaa", buf.toString());
}
@Test
public void indent_hanging_2() {
buf.startHangingIndent(4);
buf.append("aaa\n");
buf.append("bbb");
buf.end();
buf.start();
buf.append("ccc");
buf.end();
assertEquals("aaa\n bbb\n{\n ccc\n}", buf.toString());
}
@Test
public void indent_hanging_3() {
buf.startHangingIndent();
buf.append("aaa\n");
buf.append("bbb\n");
buf.end();
assertEquals("aaa\n bbb\n", buf.toString());
}
@Test
public void indent_hanging_4() {
buf.startHangingIndent();
buf.append("\n");
buf.end();
assertEquals("\n", buf.toString());
}
@Test
public void indent_hanging_5() {
buf.start();
buf.startHangingIndent();
buf.append("a");
buf.end();
buf.startHangingIndent();
buf.append("b");
buf.end();
buf.startHangingIndent();
buf.append("c");
buf.end();
buf.end();
assertEquals("{\n" + " a\n" + " b\n" + " c\n" + "}", buf.toString());
}
@Test
public void indent_hanging_after_start() {
buf.start();
{
buf.append("a = ").startHangingIndent();
{
buf.append("values").start();
{
buf.append("value 1\n");
buf.append("value 2\n");
}
buf.end();
}
buf.end();
}
buf.end();
assertEquals("{\n" + " a = values {\n" + " value 1\n" + " value 2\n" + " }\n" + "}",
buf.toString());
}
}