/*******************************************************************************
* 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.wink.webdav.model;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.namespace.QName;
import org.custommonkey.xmlunit.Diff;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Element;
public class WebDAVPropfindTest extends AbstractWebDAVModelTest {
private static final String NS = "http://ns.example.com/boxschema/";
private static final QName[] PROPERTIES =
new QName[] {new QName(NS, "author"),
new QName(NS, "DingALing"), new QName(NS, "Random"), new QName(NS, "bigbox")};
@Test
public void test1() throws Exception {
// test read
String input = loadStreamToString(getClass().getResourceAsStream("propfind1.xml"));
Propfind propfind = read(input);
Prop prop = propfind.getProp();
Assert.assertEquals(PROPERTIES.length, prop.getAny().size());
for (QName qname : PROPERTIES) {
Element element = prop.getAnyByName(qname);
Assert.assertNotNull(element);
Assert.assertEquals(qname.getNamespaceURI(), element.getNamespaceURI());
Assert.assertEquals(qname.getLocalPart(), element.getLocalName());
}
Assert.assertFalse(propfind.isAllprop());
Assert.assertFalse(propfind.isPropname());
// test write
Diff diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
// test runtime creation
propfind = new Propfind();
prop = new Prop();
propfind.setProp(prop);
prop.setProperty(PROPERTIES[0]);
prop.setProperty(PROPERTIES[1]);
prop.setProperty(PROPERTIES[2]);
prop.setProperty(PROPERTIES[3]);
diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
}
@Test
public void test2() throws Exception {
// test read
String input = loadStreamToString(getClass().getResourceAsStream("propfind2.xml"));
Propfind propfind = read(input);
Assert.assertNull(propfind.getProp());
Assert.assertFalse(propfind.isAllprop());
Assert.assertTrue(propfind.isPropname());
// test write
Diff diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
// test runtime creation
propfind = new Propfind();
propfind.setPropname(new Propname());
diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
}
@Test
public void test3() throws Exception {
// test read
String input = loadStreamToString(getClass().getResourceAsStream("propfind3.xml"));
Propfind propfind = read(input);
Assert.assertNull(propfind.getProp());
Assert.assertTrue(propfind.isAllprop());
Assert.assertFalse(propfind.isPropname());
// test write
Diff diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
// test runtime creation
propfind = new Propfind();
propfind.setAllprop(new Allprop());
diff = new Diff(input, write(propfind));
Assert.assertTrue(diff.toString(), diff.similar());
}
private Propfind read(String input) throws Exception {
Propfind propfind = Propfind.unmarshal(new StringReader(input));
return propfind;
}
private String write(Propfind propfind) throws Exception {
StringWriter writer = new StringWriter();
Propfind.marshal(propfind, writer);
return writer.toString();
}
}