blob: 796567450cb30418b13cb711d3fcc3d498accbdd [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.simple;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import org.junit.Assert;
import org.junit.Test;
import org.odftoolkit.odfdom.dom.OdfStylesDom;
import org.odftoolkit.odfdom.dom.attribute.presentation.PresentationClassAttribute;
import org.odftoolkit.odfdom.dom.element.draw.DrawFillImageElement;
import org.odftoolkit.odfdom.dom.element.draw.DrawGradientElement;
import org.odftoolkit.odfdom.dom.element.draw.DrawHatchElement;
import org.odftoolkit.odfdom.dom.element.draw.DrawMarkerElement;
import org.odftoolkit.odfdom.dom.element.style.StyleMasterPageElement;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.incubator.doc.draw.OdfDrawFrame;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeMasterStyles;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeStyles;
import org.odftoolkit.odfdom.incubator.doc.style.OdfStyle;
import org.odftoolkit.odfdom.pkg.OdfElement;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.simple.presentation.Slide;
import org.odftoolkit.simple.utils.ResourceUtilities;
import org.w3c.dom.NodeList;
/**
*
* @author cl93746
*/
public class PresentationTest {
Document odfdoc;
public PresentationTest() {
try {
odfdoc = Document.loadDocument(ResourceUtilities.getAbsolutePath("presentation.odp"));
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testPresentation() {
try {
PresentationDocument odpdoc = (PresentationDocument) odfdoc;
Slide page = odpdoc.getSlideByName("slide-name-1");
Assert.assertTrue((page != null) && page.getSlideName().equals("slide-name-1"));
Assert.assertEquals(page, odpdoc.getSlideByIndex(0));
page = odpdoc.getSlideByName("slide-name-2");
Assert.assertTrue((page != null) && page.getSlideName().equals("slide-name-2"));
Assert.assertEquals(page, odpdoc.getSlideByIndex(1));
page = odpdoc.getSlideByName("slide-name-3");
Assert.assertTrue((page != null) && page.getSlideName().equals("slide-name-3"));
Assert.assertEquals(page, odpdoc.getSlideByIndex(2));
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testMasterStyles() {
try {
OdfOfficeMasterStyles officeMasterStyles = odfdoc.getOfficeMasterStyles();
Assert.assertNotNull(officeMasterStyles);
// check if iterator has all two master pages
testIterator(StyleMasterPageElement.class, officeMasterStyles.getMasterPages(), 2);
// test "master-name-1"
StyleMasterPageElement master = officeMasterStyles.getMasterPage("master-name-1");
Assert.assertNotNull(master);
Assert.assertEquals(master.getStyleNameAttribute(), "master-name-1");
// test "master-name-2"
master = officeMasterStyles.getMasterPage("master-name-2");
Assert.assertNotNull(master);
Assert.assertEquals(master.getStyleNameAttribute(), "master-name-2");
// test handout master
Assert.assertNotNull(officeMasterStyles.getHandoutMaster());
// test layerset
Assert.assertNotNull(officeMasterStyles.getLayerSet());
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testStyles() {
try {
OdfOfficeStyles officeStyles = odfdoc.getDocumentStyles();
Assert.assertNotNull(officeStyles);
Assert.assertNotNull(officeStyles.getGradient("Linear_20_blue_2f_white"));
testIterator(DrawGradientElement.class, officeStyles.getGradients().iterator(), 1);
Assert.assertNotNull(officeStyles.getMarker("Arrow"));
testIterator(DrawMarkerElement.class, officeStyles.getMarker().iterator(), 1);
Assert.assertNotNull(officeStyles.getHatch("Black_20_0_20_Degrees"));
testIterator(DrawHatchElement.class, officeStyles.getHatches().iterator(), 1);
Assert.assertNotNull(officeStyles.getFillImage("Aqua"));
testIterator(DrawFillImageElement.class, officeStyles.getFillImages().iterator(), 1);
// check for some styles
Assert.assertNotNull(officeStyles.getDefaultStyle(OdfStyleFamily.Graphic));
Assert.assertNotNull(officeStyles.getStyle("standard", OdfStyleFamily.Graphic));
Assert.assertNotNull(officeStyles.getStyle("master-name-1-outline1", OdfStyleFamily.Presentation));
Iterator<OdfStyle> style_iter = officeStyles.getStylesForFamily(OdfStyleFamily.Presentation).iterator();
Assert.assertNotNull(style_iter);
Assert.assertTrue(style_iter.hasNext());
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
private <T extends OdfElement> void testIterator(Class<T> clazz, Iterator<T> iter, int elements) {
Assert.assertNotNull(iter);
while (elements > 0) {
Assert.assertTrue(iter.hasNext());
Assert.assertTrue(clazz.isInstance(iter.next()));
elements--;
}
Assert.assertFalse(iter.hasNext());
}
@Test
public void testPresentationClassAttribute() {
try {
GraphicsDocument doc = GraphicsDocument.newGraphicsDocument();
OdfFileDom dom = doc.getContentDom();
OdfDrawFrame f = new OdfDrawFrame(dom);
f.setPresentationClassAttribute(PresentationClassAttribute.Value.GRAPHIC.toString());
Logger.getLogger(DocumentCreationTest.class.getName()).info(f.getPresentationClassAttribute());
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testStyleUsageCount() {
try {
OdfOfficeAutomaticStyles s = odfdoc.getStylesDom().getAutomaticStyles();
OdfStyle pr1 = s.getStyle("pr1", OdfStyleFamily.Presentation);
int styleUserCount = pr1.getStyleUserCount();
OdfStylesDom stylesDom = odfdoc.getStylesDom();
XPath xpath = stylesDom.getXPath();
NodeList elementsWithStyle = (NodeList) xpath.evaluate("//draw:frame[@presentation:style-name='pr1']",
stylesDom, XPathConstants.NODESET);
int elementsWithStyleCount = elementsWithStyle.getLength();
Assert.assertTrue(styleUserCount == elementsWithStyleCount);
// //#bug51,the bug will be induced by using set attribute method
// OdfDrawFrame frame = (OdfDrawFrame) elementsWithStyle.item(0);
// frame.setPresentationStyleNameAttribute("pr2");
// styleUserCount = pr1.getStyleUserCount();
// elementsWithStyle = (NodeList) xpath.evaluate("//draw:frame[@presentation:style-name='pr1']",
// odfdoc.getStylesDom(), XPathConstants.NODESET);
// elementsWithStyleCount = elementsWithStyle.getLength();
// Assert.assertTrue("Last part of bug51 still to be fixed..!!", styleUserCount == elementsWithStyleCount);
} catch (Exception e) {
Logger.getLogger(PresentationTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
}