/*
*
* Copyright 2015 Andrey Yakovlev
*
* 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 jodtemplate.io;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import javax.xml.stream.XMLInputFactory;
import jodtemplate.Relationship;
import jodtemplate.contenttype.ContentTypes;
import jodtemplate.contenttype.OverrideElement;
import jodtemplate.io.xml.ContentTypesReader;
import jodtemplate.pptx.Presentation;
import jodtemplate.pptx.Slide;
import jodtemplate.pptx.io.PPTXImageReader;
import jodtemplate.pptx.io.PPTXReaderImpl;
import jodtemplate.pptx.io.xml.PresentationXmlRelsReader;
import jodtemplate.pptx.io.xml.SlideXmlRelsReader;
import jodtemplate.resource.Resources;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
@RunWith(MockitoJUnitRunner.class)
public class PPTXReaderImplTest {
@InjectMocks
private PPTXReaderImpl reader;
@Mock
private ContentTypesReader contentTypesReader;
@Mock
private PresentationXmlRelsReader presXmlRelsReader;
@Mock
private SlideXmlRelsReader slideXmlRelsReader;
@Mock
private PPTXImageReader imageReader;
@Mock
private Resources resources;
@Test
public void testRead() throws Exception {
final String presentationXml = "/ppt/presentation.xml";
final String presentationRelsXml = "/ppt/_rels/presentation.xml.rels";
final ContentTypes contentTypes = new ContentTypes();
doAnswer(new Answer<ContentTypes>() {
@Override
public ContentTypes answer(final InvocationOnMock invocation) throws Throwable {
//final ContentTypes contentTypes = invocation.getArgumentAt(3, ContentTypes.class);
final OverrideElement overrideElement = new OverrideElement();
overrideElement.setPartName(presentationXml);
overrideElement.setContentType(ContentTypes.PRESENTATION_TYPE);
contentTypes.addOverrideElement(overrideElement);
return contentTypes;
}
}).when(contentTypesReader).read(eq("/[Content_Types].xml"), eq(resources),
any(XMLInputFactory.class), any(ContentTypes.class));
final Presentation presentation = new Presentation(presentationXml);
final Slide slide = new Slide();
doAnswer(new Answer<Presentation>() {
@Override
public Presentation answer(final InvocationOnMock invocation) throws Throwable {
//final Presentation presentation = invocation.getArgumentAt(3, Presentation.class);
slide.setRelationship(new Relationship("rId1", "slides/slide1.xml", Relationship.SLIDE_TYPE));
presentation.addSlide(slide);
return presentation;
}
}).when(presXmlRelsReader).read(eq(presentationRelsXml), eq(resources),
any(XMLInputFactory.class), any(Presentation.class));
doReturn(slide).when(slideXmlRelsReader).read(eq("/ppt/slides/slide1.xml"), eq(resources),
any(XMLInputFactory.class), eq(slide));
doNothing().when(imageReader).read(resources, presentation);
final Presentation result = reader.read(resources);
assertEquals(presentation, result);
verify(contentTypesReader, times(1)).read(eq("/[Content_Types].xml"), eq(resources),
any(XMLInputFactory.class), any(ContentTypes.class));
verify(presXmlRelsReader, times(1)).read(eq(presentationRelsXml), eq(resources),
any(XMLInputFactory.class), any(Presentation.class));
verify(slideXmlRelsReader, times(1)).read(eq("/ppt/slides/_rels/slide1.xml.rels"), eq(resources),
any(XMLInputFactory.class), eq(slide));
verify(imageReader, times(1)).read(eq(resources), eq(presentation));
}
}