/*
* (C) Copyright 2006-2016 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*/
package org.nuxeo.ecm.platform.mimetype.detectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.junit.Ignore;
import org.junit.Test;
public class TestDetector {
private static File getFileFromTestResource(String resource) {
// retrieves contextually the resource file and decode its path
// returns the corresponding File Object
return org.nuxeo.common.utils.FileUtils.getResourceFileFromContext(resource);
}
/* Test XML binary file */
@Test
public void testSnifferXLSMimetype() {
XlsMimetypeSniffer sniffer = new XlsMimetypeSniffer();
// verify that the first returned is the one supported by Nx5
String[] supportedMimetype = sniffer.getHandledTypes();
assertEquals("application/vnd.ms-excel", supportedMimetype[0]);
}
@Test
public void testSnifferXLSDirectGuess() {
File xlsFile = getFileFromTestResource("test-data/hello.xls");
XlsMimetypeSniffer sniffer = new XlsMimetypeSniffer();
// direct access
String[] returnedMimetype = sniffer.guessExcel(xlsFile);
assertTrue(returnedMimetype.length > 0);
}
@Test
public void testSnifferXLSByByteArray() throws IOException {
File xlsFile = getFileFromTestResource("test-data/hello.xls");
XlsMimetypeSniffer sniffer = new XlsMimetypeSniffer();
// by byte[]
byte[] data = FileUtils.readFileToByteArray(xlsFile);
String[] returnedByteMimetype = sniffer.process(data, 0, 0, 0L, 'd', "dummy", new HashMap());
assertTrue(returnedByteMimetype.length > 0);
}
@Test
public void testSnifferXLSWrongFile() {
XlsMimetypeSniffer sniffer = new XlsMimetypeSniffer();
// a wrong file is not detected as excel file
File otherFile = getFileFromTestResource("test-data/hello.doc");
String[] mimetype = sniffer.guessExcel(otherFile);
assertEquals(0, mimetype.length);
}
/* Test Msoffice 2003 XML Word & Excel file */
@Test
public void testSnifferMsoXMLMimetype() {
MsoXmlMimetypeSniffer sniffer = new MsoXmlMimetypeSniffer();
// verify that the first returned is the one supported by Nx5
String[] supportedMimetypes = sniffer.getHandledTypes();
assertEquals("application/vnd.ms-excel", supportedMimetypes[0]);
assertEquals("application/msword", supportedMimetypes[1]);
}
@Test
public void testSnifferMsoXMLDirectGuess() {
MsoXmlMimetypeSniffer sniffer = new MsoXmlMimetypeSniffer();
// xml excel 2003
File xmlFile = getFileFromTestResource("test-data/TestExcel2003AsXML.xml.txt");
String[] mimetype = sniffer.guessMsoXml(xmlFile);
assertTrue(mimetype.length > 0);
assertEquals("application/vnd.ms-excel", mimetype[0]);
// xml word 2003
xmlFile = getFileFromTestResource("test-data/TestWord2003AsXML.xml.txt");
mimetype = sniffer.guessMsoXml(xmlFile);
assertEquals("application/msword", mimetype[0]);
}
@Test
public void testSnifferMsoXMLByByteArray() throws IOException {
MsoXmlMimetypeSniffer sniffer = new MsoXmlMimetypeSniffer();
// by byte[]
File xmlFile = getFileFromTestResource("test-data/TestWord2003AsXML.xml.txt");
byte[] data = FileUtils.readFileToByteArray(xmlFile);
String[] returnedByteMimetype = sniffer.process(data, 0, 0, 0L, 'd', "dummy", new HashMap());
assertEquals("application/msword", returnedByteMimetype[0]);
}
@Test
public void testSnifferMsoXMLWrongFile() {
MsoXmlMimetypeSniffer sniffer = new MsoXmlMimetypeSniffer();
// a wrong file is not detected as excel file
File otherFile = getFileFromTestResource("test-data/hello.doc");
String[] returnedMimetype = sniffer.guessMsoXml(otherFile);
assertEquals(0, returnedMimetype.length);
}
/* Test OpenDocument & OOo 1.x */
@Test
public void testSnifferODFWrongFile() {
OOoMimetypeSniffer sniffer = new OOoMimetypeSniffer();
// a wrong file is not detected as odf file
File otherFile = getFileFromTestResource("test-data/hello.doc");
String[] returnedMimetype = sniffer.guessOOo(otherFile);
assertEquals(0, returnedMimetype.length);
}
@Test
public void testSnifferOOoMimetype() {
OOoMimetypeSniffer sniffer = new OOoMimetypeSniffer();
// verify that the first returned is the one supported by Nx5
String[] supportedMimetype = sniffer.getHandledTypes();
assertEquals("application/vnd.oasis.opendocument.text", supportedMimetype[2]);
assertEquals("application/vnd.oasis.opendocument.spreadsheet", supportedMimetype[0]);
assertEquals("application/vnd.oasis.opendocument.presentation", supportedMimetype[4]);
// OOo 1.x
assertEquals("application/vnd.sun.xml.writer", supportedMimetype[16]);
assertEquals("application/vnd.sun.xml.calc", supportedMimetype[19]);
assertEquals("application/vnd.sun.xml.impress", supportedMimetype[21]);
}
@Test
public void testSnifferOOoDirectGuess() {
OOoMimetypeSniffer sniffer = new OOoMimetypeSniffer();
File file = getFileFromTestResource("test-data/hello.odt");
String[] returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.oasis.opendocument.text", returnedMimetype[0]);
file = getFileFromTestResource("test-data/hello.ods");
returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.oasis.opendocument.spreadsheet", returnedMimetype[0]);
file = getFileFromTestResource("test-data/hello.odp");
returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.oasis.opendocument.presentation", returnedMimetype[0]);
// OOo1.x
file = getFileFromTestResource("test-data/hello.sxw");
returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.sun.xml.writer", returnedMimetype[0]);
file = getFileFromTestResource("test-data/hello.sxc");
returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.sun.xml.calc", returnedMimetype[0]);
file = getFileFromTestResource("test-data/hello.sxi");
returnedMimetype = sniffer.guessOOo(file);
assertTrue(returnedMimetype.length > 0);
assertEquals("application/vnd.sun.xml.impress", returnedMimetype[0]);
}
@Test
public void testSnifferOOoByByteArray() throws IOException {
OOoMimetypeSniffer sniffer = new OOoMimetypeSniffer();
// by byte[]
File file = getFileFromTestResource("test-data/hello.odt");
byte[] data = FileUtils.readFileToByteArray(file);
// FIXME: no need for these variables
int dummyInt = 0;
long dummyLong = 0;
Map dummyMap = new HashMap();
String dummyString = "dummy";
char dummyChar = dummyString.charAt(0);
String[] returnedByteMimetype = sniffer.process(data, dummyInt, dummyInt, dummyLong, dummyChar, dummyString,
dummyMap);
assertEquals("application/vnd.oasis.opendocument.text", returnedByteMimetype[0]);
}
/* Test Powerpoint binary file */
@Test
public void testSnifferPPTMimetype() {
PptMimetypeSniffer sniffer = new PptMimetypeSniffer();
// verify that the first returned is the one supported by Nx5
String[] supportedMimetype = sniffer.getHandledTypes();
assertEquals("application/vnd.ms-powerpoint", supportedMimetype[0]);
}
// TODO: fix and reactivate
@Test
@Ignore
public void testSnifferPPTDirectGuess() {
File pptFile = getFileFromTestResource("test-data/hello.ppt");
PptMimetypeSniffer sniffer = new PptMimetypeSniffer();
// direct access
String[] returnedMimetype = sniffer.guessPowerpoint(pptFile);
assertTrue(returnedMimetype.length > 0);
}
// TODO: fix and reactivate
@Test
@Ignore
public void testSnifferPPTByByteArray() throws IOException {
File pptFile = getFileFromTestResource("test-data/hello.ppt");
PptMimetypeSniffer sniffer = new PptMimetypeSniffer();
// by byte[]
byte[] data = FileUtils.readFileToByteArray(pptFile);
// FIXME: no need for these variables
int dummyInt = 0;
long dummyLong = 0;
Map dummyMap = new HashMap();
String dummyString = "dummy";
char dummyChar = dummyString.charAt(0);
String[] returnedByteMimetype = sniffer.process(data, dummyInt, dummyInt, dummyLong, dummyChar, dummyString,
dummyMap);
assertTrue(returnedByteMimetype.length > 0);
}
@Test
public void testSnifferPPTWrongFile() {
PptMimetypeSniffer sniffer = new PptMimetypeSniffer();
// a wrong file is not detected a a powerpoint file
File otherFile = getFileFromTestResource("test-data/hello.doc");
String[] mimetype = sniffer.guessPowerpoint(otherFile);
assertEquals(0, mimetype.length);
}
}