/*
* Copyright 2009 NCHOVY
*
* 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.
*/
package org.krakenapps.xmlrpc;
import static org.junit.Assert.*;
import java.util.Date;
import java.util.Map;
import org.junit.Test;
import org.krakenapps.xmlrpc.DateUtil;
import org.krakenapps.xmlrpc.XmlRpcParameterParser;
import org.krakenapps.xmlrpc.XmlUtil;
import org.w3c.dom.Document;
public class XmlRpcParameterParserTest {
@Test
public void testPrettyStringNode() {
assertEquals("kraken", parseParamNode("<param>\n<value>\n\t <string>kraken</string>\n</value>\n </param>"));
}
@Test
public void testParseStringNode() {
assertEquals("kraken", parseParamNode("<param><value><string>kraken</string></value></param>"));
}
@Test
public void testParseI4Node() {
assertEquals(-1, parseParamNode("<param><value><i4>-1</i4></value></param>"));
}
@Test
public void testParseIntNode() {
assertEquals(42, parseParamNode("<param><value><int>42</int></value></param>"));
}
@Test
public void testParseBooleanNode() {
assertEquals(true, parseParamNode("<param><value><boolean>1</boolean></value></param>"));
}
@Test
public void testParseDoubleNode() {
assertEquals(3.141592, parseParamNode("<param><value><double>3.141592</double></value></param>"));
}
@Test
public void testParseBase64Node() {
final String ENCODED_TEXT = "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=";
final String ORIGINAL_TEXT = "This is a base64 encoded text";
byte[] value = (byte[]) parseParamNode("<param><value><base64>" + ENCODED_TEXT + "</base64></value></param>");
assertEquals(ORIGINAL_TEXT, new String(value));
}
@Test
public void testParseDateNode() {
Date actual = (Date) parseParamNode("<param><value><dateTime.iso8601>19980717T14:08:55</dateTime.iso8601></value></param>");
Date expected = DateUtil.create(1998, 7, 17, 14, 8, 55);
assertEquals(expected, actual);
}
@SuppressWarnings("unchecked")
@Test
public void testParseStructNode() {
Map<String, Object> map = (Map<String, Object>) parseParamNode("<param><value><struct>"
+ "<member><name>num</name><value><i4>1234</i4></value></member>"
+ "<member><name>str</name><value><string>abcd</string></value></member>" + "</struct></value></param>");
assertEquals(1234, map.get("num"));
assertEquals("abcd", map.get("str"));
}
@Test
public void testParseArrayNode() {
Object[] array = (Object[]) parseParamNode("<param><value><array><data>" + "<value><i4>12</i4></value>"
+ "<value><string>Egypt</string></value>" + "<value><boolean>0</boolean></value>"
+ "<value><i4>-31</i4></value>" + "</data></array></value></param>");
assertEquals(4, array.length);
assertEquals(12, array[0]);
assertEquals("Egypt", array[1]);
assertEquals(false, array[2]);
assertEquals(-31, array[3]);
}
private Object parseParamNode(String xml) {
Document document = XmlUtil.parse(xml);
return XmlRpcParameterParser.parse(document.getLastChild());
}
}