blob: 38f8cd40a7614f913bd6bb5a81505ed27c3235ab [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.juneau.dto.atom;
import static org.apache.juneau.dto.atom.AtomBuilder.*;
import static org.apache.juneau.testutils.TestUtils.*;
import static org.junit.Assert.*;
import java.net.*;
import org.apache.juneau.xml.*;
import org.junit.*;
public class AtomTest {
public Feed createFeed() throws Exception {
return
feed("tag:foo.org", "Title", "2016-12-31T05:02:03Z")
.subtitle(text("html").text("Subtitle"))
.links(
link("alternate", "text/html", "http://foo.org/").hreflang("en"),
link("self", "application/atom+xml", "http://foo.org/feed.atom")
)
.generator(
generator("Example Toolkit").uri("http://www.foo.org/").version("1.0")
)
.entries(
entry("tag:foo.org", "Title", "2016-12-31T05:02:03Z")
.links(
link("alternate", "text/html", "http://foo.org/2005/04/02/atom"),
link("enclosure", "audio/mpeg", "http://foo.org/audio/foobar.mp3").length(1337)
)
.published("2016-12-31T05:02:03Z")
.authors(
person("John Smith").uri(new URI("http://foo.org/")).email("foo@foo.org")
)
.contributors(
person("John Smith"),
person("Jane Smith")
)
.content(
content("xhtml")
.lang("en")
.base("http://foo.org/")
.text("<div><p><i>[Sample content]</i></p></div>")
)
);
}
@Test
public void testNormal() throws Exception {
XmlSerializer s;
XmlParser p = XmlParser.DEFAULT;
String r;
Feed f = createFeed(), f2;
String expected =
"<feed>\n"
+" <entry>\n"
+" <author>\n"
+" <email>foo@foo.org</email>\n"
+" <name>John Smith</name>\n"
+" <uri>http://foo.org/</uri>\n"
+" </author>\n"
+" <content base='http://foo.org/' lang='en' type='xhtml'><div><p><i>[Sample content]</i></p></div></content>\n"
+" <contributor>\n"
+" <name>John Smith</name>\n"
+" </contributor>\n"
+" <contributor>\n"
+" <name>Jane Smith</name>\n"
+" </contributor>\n"
+" <id>tag:foo.org</id>\n"
+" <link href='http://foo.org/2005/04/02/atom' rel='alternate' type='text/html'/>\n"
+" <link href='http://foo.org/audio/foobar.mp3' length='1337' rel='enclosure' type='audio/mpeg'/>\n"
+" <published>2016-12-31T05:02:03Z</published>\n"
+" <title>Title</title>\n"
+" <updated>2016-12-31T05:02:03Z</updated>\n"
+" </entry>\n"
+" <generator uri='http://www.foo.org/' version='1.0'>Example Toolkit</generator>\n"
+" <id>tag:foo.org</id>\n"
+" <link href='http://foo.org/' hreflang='en' rel='alternate' type='text/html'/>\n"
+" <link href='http://foo.org/feed.atom' rel='self' type='application/atom+xml'/>\n"
+" <subtitle type='html'>Subtitle</subtitle>\n"
+" <title>Title</title>\n"
+" <updated>2016-12-31T05:02:03Z</updated>\n"
+"</feed>\n";
s = XmlSerializer.create().sq().ws().enableNamespaces(false).sortProperties().build();
r = s.serialize(f);
assertEquals(expected, r);
f2 = p.parse(r, Feed.class);
assertEqualObjects(f, f2);
}
@Test
public void testWithNamespaces() throws Exception {
XmlSerializer s;
XmlParser p = XmlParser.DEFAULT;
String r;
Feed f = createFeed(), f2;
String expected =
"<atom:feed xmlns='http://www.apache.org/2013/Juneau' xmlns:atom='http://www.w3.org/2005/Atom/' xmlns:xml='http://www.w3.org/XML/1998/namespace'>\n"
+" <atom:entry>\n"
+" <atom:author>\n"
+" <atom:email>foo@foo.org</atom:email>\n"
+" <atom:name>John Smith</atom:name>\n"
+" <atom:uri>http://foo.org/</atom:uri>\n"
+" </atom:author>\n"
+" <atom:content xml:base='http://foo.org/' xml:lang='en' type='xhtml'><div><p><i>[Sample content]</i></p></div></atom:content>\n"
+" <atom:contributor>\n"
+" <atom:name>John Smith</atom:name>\n"
+" </atom:contributor>\n"
+" <atom:contributor>\n"
+" <atom:name>Jane Smith</atom:name>\n"
+" </atom:contributor>\n"
+" <atom:id>tag:foo.org</atom:id>\n"
+" <atom:link href='http://foo.org/2005/04/02/atom' rel='alternate' type='text/html'/>\n"
+" <atom:link href='http://foo.org/audio/foobar.mp3' length='1337' rel='enclosure' type='audio/mpeg'/>\n"
+" <atom:published>2016-12-31T05:02:03Z</atom:published>\n"
+" <atom:title>Title</atom:title>\n"
+" <atom:updated>2016-12-31T05:02:03Z</atom:updated>\n"
+" </atom:entry>\n"
+" <atom:generator uri='http://www.foo.org/' version='1.0'>Example Toolkit</atom:generator>\n"
+" <atom:id>tag:foo.org</atom:id>\n"
+" <atom:link href='http://foo.org/' hreflang='en' rel='alternate' type='text/html'/>\n"
+" <atom:link href='http://foo.org/feed.atom' rel='self' type='application/atom+xml'/>\n"
+" <atom:subtitle type='html'>Subtitle</atom:subtitle>\n"
+" <atom:title>Title</atom:title>\n"
+" <atom:updated>2016-12-31T05:02:03Z</atom:updated>\n"
+"</atom:feed>\n";
s = XmlSerializer.create().sq().ws().enableNamespaces(true).addNamespaceUrisToRoot().sortProperties().build();
r = s.serialize(f);
assertEquals(expected, r);
f2 = p.parse(r, Feed.class);
assertEqualObjects(f, f2);
}
@Test
public void testWithNamespacesWithAtomAsDefault() throws Exception {
XmlSerializer s;
XmlParser p = XmlParser.DEFAULT;
String r;
Feed f = createFeed(), f2;
String expected =
"<feed xmlns='http://www.w3.org/2005/Atom/' xmlns:xml='http://www.w3.org/XML/1998/namespace'>\n"
+" <entry>\n"
+" <author>\n"
+" <email>foo@foo.org</email>\n"
+" <name>John Smith</name>\n"
+" <uri>http://foo.org/</uri>\n"
+" </author>\n"
+" <content xml:base='http://foo.org/' xml:lang='en' type='xhtml'><div><p><i>[Sample content]</i></p></div></content>\n"
+" <contributor>\n"
+" <name>John Smith</name>\n"
+" </contributor>\n"
+" <contributor>\n"
+" <name>Jane Smith</name>\n"
+" </contributor>\n"
+" <id>tag:foo.org</id>\n"
+" <link href='http://foo.org/2005/04/02/atom' rel='alternate' type='text/html'/>\n"
+" <link href='http://foo.org/audio/foobar.mp3' length='1337' rel='enclosure' type='audio/mpeg'/>\n"
+" <published>2016-12-31T05:02:03Z</published>\n"
+" <title>Title</title>\n"
+" <updated>2016-12-31T05:02:03Z</updated>\n"
+" </entry>\n"
+" <generator uri='http://www.foo.org/' version='1.0'>Example Toolkit</generator>\n"
+" <id>tag:foo.org</id>\n"
+" <link href='http://foo.org/' hreflang='en' rel='alternate' type='text/html'/>\n"
+" <link href='http://foo.org/feed.atom' rel='self' type='application/atom+xml'/>\n"
+" <subtitle type='html'>Subtitle</subtitle>\n"
+" <title>Title</title>\n"
+" <updated>2016-12-31T05:02:03Z</updated>\n"
+"</feed>\n";
s = XmlSerializer.create().sq().ws().defaultNamespace("atom").enableNamespaces(true).addNamespaceUrisToRoot().sortProperties().build();
r = s.serialize(f);
assertEquals(expected, r);
f2 = p.parse(r, Feed.class);
assertEqualObjects(f, f2);
}
@Test
public void testToString() throws Exception {
XmlParser p = XmlParser.DEFAULT;
String r;
Feed f = createFeed(), f2;
r = f.toString();
f2 = p.parse(r, Feed.class);
assertEqualObjects(f, f2);
}
}