/*******************************************************************************
* Copyright (c) 2013, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package dtool.ddoc;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertEquals;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class DDocMacrosTest {
@Test
public void testBasic() throws Exception { testBasic$(); }
public void testBasic$() throws Exception {
runBasicTest("sample", "sample");
runBasicTest("$(B sampleB)", boldResult("sampleB"));
runBasicTest("$(NON_EXISTANT my)", "$(NON_EXISTANT my)");
runBadSyntaxTests("$(B sampleB", "$(B sampleB");
runBadSyntaxTests("$(B ", "$(B ");
runBadSyntaxTests("$(", "$(");
}
public void runBasicTest(String SAMPLE_SOURCE, String SAMPLE_EXPECTED) {
runMacroTest(SAMPLE_SOURCE, SAMPLE_EXPECTED);
runMacroTest(SAMPLE_SOURCE + " abc $(B mybold) def",
SAMPLE_EXPECTED + " abc " + boldResult("mybold") + " def");
//Nested
runMacroTest(SAMPLE_SOURCE + "abc $(B $(I my) bold) def",
SAMPLE_EXPECTED + "abc " + boldResult(italicResult("my") + " bold") + " def");
runMacroTest("abc $(B $(I " + SAMPLE_SOURCE + ") bold) def",
"abc " + boldResult(italicResult(SAMPLE_EXPECTED) + " bold") + " def");
//Nested + Recursive
Map<String, String> macroDefsA = new HashMap<>(DdocMacros.getDefaultMacros());
macroDefsA.put("X", "<u>" +SAMPLE_SOURCE+ " $(I $0) </u>");
runMacroTest("abc $(B $(X my) bold) xyz", macroDefsA,
"abc " + boldResult("<u>" +SAMPLE_EXPECTED+ " "+italicResult("my")+" </u>" + " bold") + " xyz");
// Recursive - cycle
macroDefsA.put("CYCLE", "<u>xxx $(CYCLE blah) </u>");
runMacroTest(SAMPLE_SOURCE + "abc $(CYCLE my) xyz", macroDefsA,
SAMPLE_EXPECTED + "abc " + "<u>xxx "+DdocMacros.cycleErrorString("CYCLE")+" </u>" + " xyz");
// Not found:
runMacroTest(SAMPLE_SOURCE + "abc $(NON_EXISTANT my) xyz", macroDefsA,
SAMPLE_EXPECTED + "abc " + "$(NON_EXISTANT my)" + " xyz");
// macro odd syntax:
runMacroTest(SAMPLE_SOURCE + "abc) (my) ) ", SAMPLE_EXPECTED + "abc) (my) ) ");
runBadSyntaxTests(SAMPLE_SOURCE, SAMPLE_EXPECTED);
// TODO: we need test for arguments, parens nesting, string nesting, etc.
// It's likely there are bugs with that functionality
}
public void runBadSyntaxTests(String SAMPLE_PREFIX_SOURCE, String SAMPLE_EXPECTED) {
runMacroTest(SAMPLE_PREFIX_SOURCE + "$(", SAMPLE_EXPECTED + "$(");
runMacroTest(SAMPLE_PREFIX_SOURCE + "$(X", SAMPLE_EXPECTED + "$(X");
runMacroTest(SAMPLE_PREFIX_SOURCE + "$(X ", SAMPLE_EXPECTED + "$(X ");
runMacroTest(SAMPLE_PREFIX_SOURCE + "$(X def $(", SAMPLE_EXPECTED + "$(X def $(");
}
public static String boldResult(String string) {
return "<b>" + string + "</b>";
}
public static String italicResult(String string) {
return "<i>" + string + "</i>";
}
public void runMacroTest(String source, String expectedResult) {
runMacroTest(source, DdocMacros.getDefaultMacros(), expectedResult);
}
public void runMacroTest(String source, Map<String, String> macroDefinitions, String expectedResult) {
String result = DdocMacros.replaceMacros(source, macroDefinitions);
assertEquals(result, expectedResult);
}
}