blob: 7c3601bbe9add74b4372de301e87dc5c92a25d0b [file] [log] [blame]
/*
* 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.apache.jackrabbit.vault.packaging.integration;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.packaging.ExportOptions;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.junit.Test;
import org.xml.sax.InputSource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* {@code TestEmptyPackage}...
*/
public class TestSpecialDoubleProperties extends IntegrationTestBase {
@Test
public void exportDoubles() throws RepositoryException, IOException, PackageException {
Node tmp = admin.getRootNode().addNode("tmp", "nt:unstructured");
Node content = tmp.addNode("jcr:content", "nt:unstructured");
content.setProperty("double_nan", Double.NaN);
content.setProperty("double_pos_inf", Double.POSITIVE_INFINITY);
content.setProperty("double_neg_inf", Double.NEGATIVE_INFINITY);
admin.save();
ExportOptions opts = new ExportOptions();
DefaultMetaInf inf = new DefaultMetaInf();
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
PathFilterSet set1 = new PathFilterSet("/tmp");
filter.add(set1);
inf.setFilter(filter);
Properties props = new Properties();
props.setProperty(VaultPackage.NAME_GROUP, "apache/test");
props.setProperty(VaultPackage.NAME_NAME, "test-package");
inf.setProperties(props);
opts.setMetaInf(inf);
File tmpFile = File.createTempFile("vaulttest", ".zip");
VaultPackage pkg = packMgr.assemble(admin, opts, tmpFile);
Archive.Entry e = pkg.getArchive().getEntry("jcr_root/tmp/.content.xml");
InputSource is = pkg.getArchive().getInputSource(e);
try (Reader r = new InputStreamReader(is.getByteStream(), "utf-8")) {
String contentXml = IOUtils.toString(r);
assertEquals("Serialized content",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<jcr:root xmlns:jcr=\"http://www.jcp.org/jcr/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"\n" +
" jcr:primaryType=\"nt:unstructured\">\n" +
" <jcr:content\n" +
" jcr:primaryType=\"nt:unstructured\"\n" +
" double_nan=\"{Double}NaN\"\n" +
" double_neg_inf=\"{Double}-Infinity\"\n" +
" double_pos_inf=\"{Double}Infinity\"/>\n" +
"</jcr:root>\n",
contentXml);
}
pkg.close();
tmpFile.delete();
}
@Test
public void importDoubles() throws RepositoryException, IOException, PackageException {
JcrPackage pack = packMgr.upload(getStream("testpackages/double_properties.zip"), false);
assertNotNull(pack);
pack.install(getDefaultOptions());
Node tmp = admin.getNode("/tmp/jcr:content");
assertEquals(Double.NaN, tmp.getProperty("double_nan").getDouble(), 0.0);
assertEquals(Double.POSITIVE_INFINITY, tmp.getProperty("double_pos_inf").getDouble(), 0.0);
assertEquals(Double.NEGATIVE_INFINITY, tmp.getProperty("double_neg_inf").getDouble(), 0.0);
}
}