Package org.odftoolkit.odfdom.incubator.meta

Source Code of org.odftoolkit.odfdom.incubator.meta.OfficeMetaTest

/************************************************************************
*
*  Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you 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 org.odftoolkit.odfdom.incubator.meta;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.odftoolkit.Junit.AlphabeticalOrderedRunner;
import org.odftoolkit.odfdom.doc.OdfDocument;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.doc.OdfTextDocument;
import org.odftoolkit.odfdom.dom.attribute.meta.MetaValueTypeAttribute.Value;
import org.odftoolkit.odfdom.dom.example.LoadMultipleTimes;
import org.odftoolkit.odfdom.type.Duration;
import org.odftoolkit.odfdom.utils.ResourceUtilities;

@RunWith(AlphabeticalOrderedRunner.class)
public class OfficeMetaTest {

  private static final Logger LOG = Logger.getLogger(OfficeMetaTest.class.getName());
  private String filename = "metaTest.odt";
  private String filenameOut = "metaTest_OfficeMetaTest.odt";
  private OdfTextDocument doc;
  private OdfFileDom metadom;
  private OdfOfficeMeta fMetadata;
  private static final String generator = "ODFDOM/SNAPSHOT-TEST";
  private String dctitle = "dctitle";
  private String dcdescription = "dcdescription";
  private String subject = "dcsubject";
  private List<String> keywords = new ArrayList<String>();
  private String initialCreator = "creator";
  private String dccreator = "Mr. fictionalTestUser";
  private String printedBy = "persia p";
  private String language = "EN_us";
  private Integer editingCycles = new Integer(4);
  private Duration editingDuration = Duration.valueOf("P49DT11H8M9S");
  private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
 
  @Before 
  public void setUp() throws Exception {
    // Former developer was writing into the original file, triggering a race discussion of regression tests working on all documents.
    // Sometimes the file was changed (if this test ran earlier), sometimes not. Fixed by doing the test result in a new ODT output file
    File newMetaFile = ResourceUtilities.newTestOutputFile(filenameOut);
    if(!newMetaFile.exists()){
      doc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(filename));
    }else{
      doc = (OdfTextDocument) OdfTextDocument.loadDocument(newMetaFile);
    }
   
    metadom = doc.getMetaDom();
    fMetadata = new OdfOfficeMeta(metadom);
  }

  @After
  public void tearDown() throws Exception {
    doc.save(ResourceUtilities.newTestOutputFile(filenameOut));
    doc.close();
    doc = null;
    metadom = null;
  }

  @Test
  @Ignore // Add Test when the version number changes and the templates should be adapted
  public void updateTemplates() {
    // Adapt all files with latest XML changes automatically
    loadSaveDirFiles("target/classes/"); // all template files to be bundled within the JAR
    // The following is only necessary, when the templates in the source repository should be adapted, e.g. before a release
    loadSaveDirFiles("src/main/resources/");
  }

  /** The reference templates of the JAR will be loaded and saved. */
  private void loadSaveDirFiles(String targetDirectory) {
    try {
      LOG.log(Level.INFO, "Loading/saving resources from the directory: ''{0}''!", targetDirectory);
      File resDir = new File(targetDirectory);
      File[] resFiles = resDir.listFiles();
      boolean validTest = true;
      for (File odfFile : resFiles) {
        if (!odfFile.isDirectory() ) { //&& odfFile.getName().startsWith("Odf")
          OdfDocument odfDoc = OdfDocument.loadDocument(odfFile);
          String version = System.getProperty("odfdom.version");
          OdfOfficeMeta meta = odfDoc.getOfficeMetadata();
          meta.setAutomaticUpdate(false);
          meta.setCreator(null);
          meta.setCreationDate(null);
          meta.setDate(null);
          meta.setDescription(null);
          meta.setEditingCycles(null);
          meta.setEditingDuration(null);
          meta.setLanguage(null);
          meta.setPrintDate(null);
          meta.setPrintedBy(null);
          meta.setSubject(null);
          meta.setTitle(null);
          meta.removeUserDefinedDataByName("Info 1");
          meta.removeUserDefinedDataByName("Info 2");
          meta.removeUserDefinedDataByName("Info 3");
          meta.removeUserDefinedDataByName("Info 4");
          String timeStamp = mSimpleDateFormat.format(Calendar.getInstance().getTime());
          if (version != null) {
            if (version.endsWith("SNAPSHOT")) {
              version = version + "(" + timeStamp + ")";
            }
            meta.setGenerator("ODFDOM/" + version);
          } else {
            meta.setGenerator("ODFDOM/SNAPSHOT(" + timeStamp + ")");
            validTest = false;
          }
          LOG.log(Level.INFO, "Updating the resource {0}", odfFile.getPath());
          odfDoc.save(odfFile.getPath());
        }
      }
      Assert.assertTrue("No meta:generator could be set as the System property 'odfdom.version' set by the Maven pom.xml was not found!", validTest);

      //ToDO: Add validation test afterwards..
    } catch (Exception ex) {
      Logger.getLogger(LoadMultipleTimes.class.getName()).log(Level.SEVERE, null, ex);
    }
  }

  @Test
  public void test1SetGenerator() {
    fMetadata.setGenerator(generator);
  }

  @Test
  public void test2GetGenerator() {
    Assert.assertEquals(generator, fMetadata.getGenerator());
  }

  @Test
  public void test1SetDcTitle() {
    fMetadata.setTitle(dctitle);
  }

  @Test
  public void test2GetDcTitle() {
    Assert.assertEquals(dctitle, fMetadata.getTitle());
  }

  @Test
  public void test1SetDcDescription() {
    fMetadata.setDescription(dcdescription);
  }

  @Test
  public void test2GetDcDescription() {
    fMetadata.setDescription(dcdescription);
    Assert.assertEquals(dcdescription, fMetadata.getDescription());
  }

  @Test
  public void test1SetSubject() {
    fMetadata.setSubject(subject);
  }

  @Test
  public void test2GetSubject() {
    Assert.assertEquals(subject, fMetadata.getSubject());
  }

  @Test
  public void testSetAndGetKeywords() throws Exception {
    keywords.add("lenovo2");
    keywords.add("computer3");
    keywords.add("think center");
    fMetadata.setKeywords(keywords);
    tearDown();
    setUp();
    Assert.assertEquals(keywords, fMetadata.getKeywords());
  }

  @Test
  public void test1SetInitialCreator() {
    fMetadata.setInitialCreator(initialCreator);
  }

  @Test
  public void test2GetInitialCreator() {
    Assert.assertEquals(initialCreator, fMetadata.getInitialCreator());
  }

  @Test
  public void test1SetDcCreator() {
    fMetadata.setCreator(dccreator);
  }

  @Test
  public void test2GetDcCreator() {
    fMetadata.setCreator(dccreator);
    Assert.assertEquals(dccreator, fMetadata.getCreator());
  }

  @Test
  public void test1SetPrintedBy() {
    fMetadata.setPrintedBy(printedBy);
  }

  @Test
  public void test2GetPrintedBy() {
    Assert.assertEquals(printedBy, fMetadata.getPrintedBy());
  }

  @Test
  public void testSetAndGetCreationDate() throws Exception {
    Calendar creationDate = Calendar.getInstance();
    fMetadata.setCreationDate(creationDate);
    tearDown();
    setUp();
    // //the millisecond lost while changing calendar to string
    // creationDate.clear(Calendar.MILLISECOND);
    // fMetadata.getCreationDate().clear(Calendar.MILLISECOND);
    //Assert.assertEquals(0,creationDate.compareTo(fMetadata.getCreationDate
    // ()));
    String expected = mSimpleDateFormat.format(creationDate.getTime());
    String actual = mSimpleDateFormat.format(fMetadata.getCreationDate().getTime());
    Assert.assertEquals(expected, actual);
  }

  @Test
  public void testSetDcDate() throws Exception {
    Calendar dcDate = Calendar.getInstance();
    fMetadata.setDate(dcDate);
    tearDown();
    setUp();
    // dcDate.clear(Calendar.MILLISECOND);
    // fMetadata.getDate().clear(Calendar.MILLISECOND);
    // Assert.assertEquals(0,dcDate.compareTo(fMetadata.getDate()));
    String expected = mSimpleDateFormat.format(dcDate.getTime());
    String actual = mSimpleDateFormat.format(fMetadata.getDate().getTime());
    Assert.assertEquals(expected, actual);
  }

  @Test
  public void testSetPrintDate() throws Exception {
    Calendar printDate = Calendar.getInstance();
    fMetadata.setPrintDate(printDate);
    tearDown();
    setUp();
    // printDate.clear(Calendar.MILLISECOND);
    // fMetadata.getPrintDate().clear(Calendar.MILLISECOND);
    // Assert.assertEquals(0,printDate.compareTo(fMetadata.getPrintDate()));
    String expected = mSimpleDateFormat.format(printDate.getTime());
    String actual = mSimpleDateFormat.format(fMetadata.getPrintDate().getTime());
    Assert.assertEquals(expected, actual);
  }

  @Test
  public void test1SetLanguage() {
    fMetadata.setLanguage(language);
  }

  @Test
  public void test2GetLanguage() {
    Assert.assertEquals(language, fMetadata.getLanguage());
  }

  @Test
  public void test1SetEditingCycles() {
    fMetadata.setEditingCycles(editingCycles);
  }

  @Test
  public void test2GetEditingCycles() {
    Assert.assertNotNull(fMetadata.getEditingCycles());
  }

  @Test
  public void test1SetEditingDuration() {
    fMetadata.setEditingDuration(editingDuration);
  }

  @Test
  public void test2GetEditingDuration() {
    Assert.assertNotNull(fMetadata.getEditingDuration());
  }

  @Test
  public void testEmptyKeyword() throws Exception {
    List<String> emptyKeyword = new ArrayList<String>();
    fMetadata.setKeywords(emptyKeyword);
    tearDown();
    setUp();
    Assert.assertNull(fMetadata.getKeywords());
  }

  @Test
  public void testAddKeyword() throws Exception {
    String newKeyword = "hello";
    fMetadata.addKeyword(newKeyword);
    tearDown();
    setUp();
    Assert.assertEquals(true, fMetadata.getKeywords().contains(newKeyword));
  }

  @Test
  public void testSetAndGetUserdefinedData() throws Exception {
    // remove if there is userdefined data
    List<String> names;
    names = fMetadata.getUserDefinedDataNames();
    if (names == null) {
      names = new ArrayList<String>();
    } else {
      for (String name : names) {
        fMetadata.removeUserDefinedDataByName(name);
      }
      names.clear();
    }
    names.add("weather");
    names.add("mood");
    names.add("late");
    // test set
    fMetadata.setUserDefinedData(names.get(0), Value.STRING.toString(),
        "windy");
    fMetadata.setUserDefinedData(names.get(1), Value.STRING.toString(),
        "happy");
    fMetadata.setUserDefinedData(names.get(2), Value.BOOLEAN.toString(),
        "false");
    tearDown();

    setUp();
    // test get
    Assert.assertEquals(names, fMetadata.getUserDefinedDataNames());
    Assert.assertEquals(Value.STRING.toString(), fMetadata.getUserDefinedDataType(names.get(0)));
    Assert.assertEquals("windy", fMetadata.getUserDefinedDataValue(names.get(0)));

    fMetadata.setUserDefinedDataValue(names.get(1), "false");
    fMetadata.setUserDefinedDataType(names.get(1), Value.BOOLEAN.toString());
    fMetadata.setUserDefinedData(names.get(2), Value.STRING.toString(),
        "no");
    tearDown();

    setUp();
    // update
    Assert.assertEquals("false", fMetadata.getUserDefinedDataValue(names.get(1)));
    Assert.assertEquals(Value.BOOLEAN.toString(), fMetadata.getUserDefinedDataType(names.get(1)));
    Assert.assertEquals("no", fMetadata.getUserDefinedDataValue(names.get(2)));
    Assert.assertEquals(Value.STRING.toString(), fMetadata.getUserDefinedDataType(names.get(2)));
    tearDown();

    setUp();
    // remove
    fMetadata.removeUserDefinedDataByName(names.get(0));
    tearDown();
    setUp();
    Assert.assertEquals(2, fMetadata.getUserDefinedDataNames().size());

  }

  @Test
  public void testReadEmptyDocumentMeta() throws Exception {

    // create a new empty document
    doc = OdfTextDocument.newTextDocument();
    doc.save(ResourceUtilities.newTestOutputFile("EmptyDocForMetaTest.odt"));

    // read empty document meta
    doc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath("EmptyDocForMetaTest.odt"));
    metadom = doc.getMetaDom();
    fMetadata = new OdfOfficeMeta(metadom);
    //Assert.assertTrue(fMetadata.getGenerator().startsWith(generator));
    //ToDO: http://odftoolkit.org/bugzilla/show_bug.cgi?id=171
    // Assert.assertEquals(fMetadata.getGenerator(), generator);
    Assert.assertNull(fMetadata.getTitle());
    Assert.assertNull(fMetadata.getDescription());
    Assert.assertNull(fMetadata.getSubject());
    Assert.assertNull(fMetadata.getKeywords());
    Assert.assertNull(fMetadata.getPrintedBy());
    Assert.assertNull(fMetadata.getPrintDate());
    Assert.assertNotNull(fMetadata.getUserDefinedDataNames());
  }

  @Test
  public void testReadDocumentMeta() throws Exception {
    // create a new empty document
    OdfTextDocument textDoc = OdfTextDocument.newTextDocument(); // activiating metadata updates
    textDoc.save(ResourceUtilities.newTestOutputFile("DocForMetaTest.odt"));
    textDoc.close();
    // read empty document meta
    textDoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath("DocForMetaTest.odt"));
    OdfOfficeMeta meta = textDoc.getOfficeMetadata();
    Assert.assertNotNull(meta.getGenerator());
    Assert.assertNotNull(meta.getCreationDate());
    Assert.assertNotNull(meta.getCreator());
    Assert.assertNotNull(meta.getDate());
    Assert.assertTrue(meta.getEditingCycles() > 0);
    Assert.assertNotNull(meta.getEditingDuration());
    Assert.assertNull(meta.getLanguage());
    textDoc.close();
  }
}
TOP

Related Classes of org.odftoolkit.odfdom.incubator.meta.OfficeMetaTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.