ddf.catalog.transformer.input.pptx.PptxInputTransformerTest.java Source code

Java tutorial

Introduction

Here is the source code for ddf.catalog.transformer.input.pptx.PptxInputTransformerTest.java

Source

/**
 * Copyright (c) Codice Foundation
 * <p/>
 * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 * <p/>
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details. A copy of the GNU Lesser General Public License
 * is distributed along with this program and can be found at
 * <http://www.gnu.org/licenses/lgpl.html>.
 */
package ddf.catalog.transformer.input.pptx;

import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.apache.poi.openxml4j.util.Nullable;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.junit.Test;

import ddf.catalog.data.Metacard;
import ddf.catalog.data.MetacardType;
import ddf.catalog.transform.CatalogTransformerException;
import ddf.catalog.transform.InputTransformer;
import ddf.catalog.transformer.input.tika.TikaInputTransformer;

public class PptxInputTransformerTest {

    private final InputTransformer inputTransformer = new TikaInputTransformer(null, mock(MetacardType.class));

    private InputStream getResource(String resourceName) {
        return PptxInputTransformerTest.class.getResourceAsStream(resourceName);
    }

    @Test(expected = CatalogTransformerException.class)
    public void testBadCopy() throws IOException, CatalogTransformerException {
        IOException ioe = new IOException();
        try {
            PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
            InputStream is = mock(InputStream.class);
            when(is.read(any())).thenThrow(ioe);
            t.transform(is);
        } catch (CatalogTransformerException e) {
            assertThat(e.getCause(), is(ioe));
            throw e;
        }
    }

    @Test(expected = CatalogTransformerException.class)
    public void testTransformNullInput() throws IOException, CatalogTransformerException {
        PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
        t.transform(null);
    }

    @Test(expected = CatalogTransformerException.class)
    public void testPasswordProtected() throws IOException, CatalogTransformerException {
        PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
        try (InputStream is = getResource("/password-powerpoint.pptx")) {
            t.transform(is);
        }
    }

    @Test
    public void testOle2() throws IOException, CatalogTransformerException {
        PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
        try (InputStream is = getResource("/empty.ppt")) {
            Metacard mc = t.transform(is);
            assertThat(mc.getThumbnail(), is(nullValue()));
        }
    }

    @Test
    public void testThumbnailWithEmptySlideShow()
            throws IOException, CatalogTransformerException, InterruptedException {

        try (XMLSlideShow ss = new XMLSlideShow()) {
            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
                ss.write(os);

                try (ByteArrayInputStream inStr = new ByteArrayInputStream(os.toByteArray())) {
                    PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
                    Metacard m = t.transform(inStr);
                    assertThat(m.getThumbnail(), is(nullValue()));
                }
            }

        }
    }

    @Test
    public void testWithTitle() throws IOException, CatalogTransformerException, InterruptedException {

        try (XMLSlideShow ss = new XMLSlideShow()) {
            ss.createSlide();
            ss.getProperties().getCoreProperties().setTitle("TheTitle");
            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
                ss.write(os);

                try (ByteArrayInputStream inStr = new ByteArrayInputStream(os.toByteArray())) {
                    PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
                    Metacard m = t.transform(inStr);
                    assertThat(m.getTitle(), is("TheTitle"));
                }
            }

        }
    }

    @Test
    public void testTitleAsMetadataTitle() throws IOException, CatalogTransformerException, InterruptedException {

        try (XMLSlideShow ss = new XMLSlideShow()) {
            ss.createSlide();
            ss.getProperties().getCoreProperties().setTitle("TheTitle");
            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
                ss.write(os);

                try (ByteArrayInputStream inStr = new ByteArrayInputStream(os.toByteArray())) {
                    PptxInputTransformer t = new PptxInputTransformer(inputTransformer, false);
                    Metacard m = t.transform(inStr);
                    assertThat(m.getTitle(), nullValue());
                }
            }
        }
    }

    private Date createOneSecondPrecisionDate() {
        return new Date(TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(new Date().getTime())));
    }

    @Test
    public void testCreatedDate() throws IOException, CatalogTransformerException, InterruptedException {

        try (XMLSlideShow ss = new XMLSlideShow()) {
            ss.createSlide();
            Date d = createOneSecondPrecisionDate();

            ss.getProperties().getCoreProperties().setCreated(new Nullable<>(d));
            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
                ss.write(os);

                try (ByteArrayInputStream inStr = new ByteArrayInputStream(os.toByteArray())) {
                    PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
                    Metacard m = t.transform(inStr);
                    assertThat(m.getCreatedDate().getTime(), is(d.getTime()));
                }
            }

        }
    }

    @Test
    public void testModifiedDate() throws IOException, CatalogTransformerException, InterruptedException {

        try (XMLSlideShow ss = new XMLSlideShow()) {
            ss.createSlide();
            Date d = createOneSecondPrecisionDate();

            ss.getProperties().getCoreProperties().setModified(new Nullable<>(d));
            try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
                ss.write(os);

                try (ByteArrayInputStream inStr = new ByteArrayInputStream(os.toByteArray())) {
                    PptxInputTransformer t = new PptxInputTransformer(inputTransformer, true);
                    Metacard m = t.transform(inStr);
                    assertThat(m.getModifiedDate().getTime(), is(d.getTime()));
                }
            }

        }
    }

}