blob: ec9e2a7640ea90804d50b23f9d3c1ded7c797d0f [file] [log] [blame]
/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* 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. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* 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.odftoolkit.odfdom.doc.text;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.doc.OdfTextDocument;
import org.odftoolkit.odfdom.dom.element.text.TextListLevelStyleElementBase;
import org.odftoolkit.odfdom.dom.style.props.OdfListLevelProperties;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextHeading;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextListLevelStyleBullet;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextListLevelStyleNumber;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextListStyle;
import org.w3c.dom.Node;
/**
*
* @author J David Eisenberg
*/
public class OdfListStyleTest {
private static final Logger LOG = Logger.getLogger(OdfListStyleTest.class.getName());
OdfTextDocument doc;
OdfFileDom dom;
OdfOfficeAutomaticStyles documentStyles;
String[] listSpecTest = {
"*,>,##",
"I./1:/a)",
"1.!\u273f!(a)",
};
String[] delim = { ",", "/", "!" };
boolean[] show = { false, true, false };
String[][] levelType = { // B=bullet, N = numeric
{"B","B","B"},
{"N","N","N"},
{"N","B","N"}
};
String[][] formatChar = { // 1,I,a,A for numeric, char for bullet
{"*", ">", "#" },
{"I", "1", "a" },
{"1", "\u273f", "a"}
};
String[][] prefixSuffix = { // separated by slashes
{"/", "/", "/" },
{"/.", "/:", "/)"},
{"/.", "/", "(/)" }
};
public OdfListStyleTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
try
{
doc = OdfTextDocument.newTextDocument();
dom = doc.getContentDom();
}
catch (Exception e)
{
LOG.log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@After
public void tearDown() {
}
@Test
public void testBuildFromFormat() {
int i;
LOG.info("createListStyle");
OdfTextListStyle instance = null;
for (i = 0; i < listSpecTest.length; i++)
{
LOG.info("List Format: " + listSpecTest[i]);
instance = new OdfTextListStyle(dom, "list" + i,
listSpecTest[i], delim[i], "1cm", show[i]);
Assert.assertNotNull(instance.getFirstChild());
checkNodes(instance, i);
}
}
/**
* Test of addContent method, of class OdfListStyle.
*/
@Test
public void testAddContent() {
LOG.info("addContent");
String content = "heading content";
OdfTextHeading instance = new OdfTextHeading(dom);
Node node;
Assert.assertNotNull(instance);
instance.addContent(content);
node = instance.getFirstChild();
Assert.assertNotNull(node);
Assert.assertEquals(Node.TEXT_NODE, node.getNodeType());
Assert.assertEquals(content, node.getTextContent());
}
private void checkNodes(Node node, int position)
{
OdfTextListStyle theStyle;
OdfTextListLevelStyleBullet bullet;
OdfTextListLevelStyleNumber number;
TextListLevelStyleElementBase base;
int i = 0;
theStyle = (OdfTextListStyle) node;
Assert.assertTrue("Style name " +
theStyle.getStyleNameAttribute() + " incorrect",
theStyle.getStyleNameAttribute().equals("list" + position));
node = node.getFirstChild();
while (node != null)
{
Assert.assertTrue("More nodes than specifiers",
i < levelType[position].length);
String[] surround;
if (prefixSuffix[position][i].equals("/"))
{
surround = new String[2];
surround[0] = "";
surround[1] = "";
}
else
{
surround = prefixSuffix[position][i].split("/");
}
if (levelType[position][i].equals("B"))
{
Assert.assertTrue("Class is not bullet",
node instanceof OdfTextListLevelStyleBullet);
bullet = (OdfTextListLevelStyleBullet) node;
base = bullet;
Assert.assertEquals("Prefix incorrect",
surround[0], bullet.getStyleNumPrefixAttribute());
Assert.assertEquals("Suffix incorrect", surround[1],
bullet.getStyleNumSuffixAttribute());
}
else
{
Assert.assertTrue("Class is not number",
node instanceof OdfTextListLevelStyleNumber);
number = (OdfTextListLevelStyleNumber) node;
Assert.assertEquals(formatChar[position][i],
number.getStyleNumFormatAttribute());
base = number;
Assert.assertEquals("Prefix incorrect",
surround[0], number.getStyleNumPrefixAttribute());
Assert.assertEquals("Suffix incorrect", surround[1],
number.getStyleNumSuffixAttribute());
}
Assert.assertEquals("Level incorrect",
i+1, base.getTextLevelAttribute().intValue());
checkNumber(
"SpaceBefore",
base.getProperty(OdfListLevelProperties.SpaceBefore),
i+1);
checkNumber(
"MinLabelWidth",
base.getProperty(OdfListLevelProperties.MinLabelWidth),
1.0);
node = node.getNextSibling();
i++;
}
}
private void checkNumber(String message, String cssLength, double expected)
{
String cssAmount = cssLength.replaceFirst("cm","");
double amount = Double.valueOf(cssAmount);
Assert.assertEquals(message + " incorrect", expected, amount, 0.01);
}
}