/*
* Copyright 2016 Christoph Böhme
*
* 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.culturegraph.mf.commons;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the static methods in {@link StringUtil}.
*
* @author Christoph Böhme
* @author Markus Michael Geipel
*
*/
public final class StringUtilTest {
private static final String STRING_WITH_4_CHARS = "1234";
private static final String STRING_WITH_10_CHARS = "1234567890";
private static final String ALOHA_HAWAII = "Aloha Hawaii";
private static final String ALOHAHAWAII = "AlohaHawaii";
private static final String XHULAXHULAX = "XHulaXHulaX";
private final Map<String, String> vars = new HashMap<String, String>();
@Before
public void initvars() {
vars.put("a", "Aloha");
vars.put("b", "Hawaii");
vars.put("bb", "Hula");
}
@Test
public void copyToBufferShouldResizeBufferIfNecessary() {
final char[] buffer = new char[2];
final String str = STRING_WITH_10_CHARS;
final char[] newBuffer = StringUtil.copyToBuffer(str, buffer);
assertTrue(newBuffer.length >= str.length());
}
@Test
public void copyToBufferShouldReturnBufferContainingTheStringData() {
final int bufferLen = STRING_WITH_4_CHARS.length();
char[] buffer = new char[bufferLen];
final String str = STRING_WITH_4_CHARS;
buffer = StringUtil.copyToBuffer(str, buffer);
assertEquals(STRING_WITH_4_CHARS, String.valueOf(buffer, 0, bufferLen));
}
@Test
public void testFormat() {
assertEquals(ALOHA_HAWAII, StringUtil.format("${a} ${b}", vars));
assertEquals(ALOHAHAWAII, StringUtil.format("${a}${b}", vars));
assertEquals("Aloha${b", StringUtil.format("${a}${b", vars));
assertEquals("XAloha${b", StringUtil.format("X${a}${b", vars));
assertEquals("XX", StringUtil.format("X${ab}X", vars));
assertEquals(XHULAXHULAX, StringUtil.format("X${bb}X${bb}X", vars));
assertEquals("{a}Hawaii", StringUtil.format("{a}${b}", vars));
assertEquals("Hula$Hula", StringUtil.format("${bb}$${bb}", vars));
}
@Test
public void testCustomVarIndicators() {
final String varStart = "VAR_START";
final String varEnd = "VAR_END";
assertEquals(ALOHA_HAWAII,
StringUtil.format("VAR_STARTaVAR_END VAR_STARTbVAR_END", varStart, varEnd, vars));
assertEquals(ALOHAHAWAII, StringUtil.format("VAR_STARTaVAR_ENDVAR_STARTbVAR_END", varStart, varEnd, vars));
assertEquals("AlohaVAR_STARTb", StringUtil.format("VAR_STARTaVAR_ENDVAR_STARTb", varStart, varEnd, vars));
assertEquals("XAlohaVAR_STARTb", StringUtil.format("XVAR_STARTaVAR_ENDVAR_STARTb", varStart, varEnd, vars));
assertEquals("XX", StringUtil.format("XVAR_STARTabVAR_ENDX", varStart, varEnd, vars));
assertEquals(XHULAXHULAX,
StringUtil.format("XVAR_STARTbbVAR_ENDXVAR_STARTbbVAR_ENDX", varStart, varEnd, vars));
assertEquals("{aVAR_ENDHawaii", StringUtil.format("{aVAR_ENDVAR_STARTbVAR_END", varStart, varEnd, vars));
}
@Test(expected=IllegalArgumentException.class)
public void testMissingVars() {
StringUtil.format("${a}${x}", false, vars);
}
}