| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | #include "XmlRpcRequestParserController.h"#include <cppunit/extensions/HelperMacros.h>namespace aria2 {namespace rpc {class XmlRpcRequestParserControllerTest:public CppUnit::TestFixture {  CPPUNIT_TEST_SUITE(XmlRpcRequestParserControllerTest);  CPPUNIT_TEST(testPopStructFrame);  CPPUNIT_TEST(testPopStructFrame_noName);  CPPUNIT_TEST(testPopStructFrame_noValue);  CPPUNIT_TEST(testPopArrayFrame);  CPPUNIT_TEST(testPopArrayFrame_noValue);  CPPUNIT_TEST(testPopArrayFrame_compound);  CPPUNIT_TEST_SUITE_END();public:  void setUp() {}  void tearDown() {}  void testPopStructFrame();  void testPopStructFrame_noName();  void testPopStructFrame_noValue();  void testPopArrayFrame();  void testPopArrayFrame_noValue();  void testPopArrayFrame_compound();};CPPUNIT_TEST_SUITE_REGISTRATION(XmlRpcRequestParserControllerTest);void XmlRpcRequestParserControllerTest::testPopStructFrame(){  XmlRpcRequestParserController controller;  controller.setCurrentFrameValue(Dict::g());  controller.pushFrame();  controller.setCurrentFrameValue(String::g("Hello, aria2"));  controller.setCurrentFrameName("greeting");  controller.popStructFrame();  const Dict* structValue = downcast<Dict>(controller.getCurrentFrameValue());  CPPUNIT_ASSERT_EQUAL((size_t)1, structValue->size());  CPPUNIT_ASSERT_EQUAL(std::string("Hello, aria2"),                       downcast<String>(structValue->get("greeting"))->s());}void XmlRpcRequestParserControllerTest::testPopStructFrame_noName(){  XmlRpcRequestParserController controller;  controller.setCurrentFrameValue(Dict::g());  controller.pushFrame();  controller.setCurrentFrameValue(String::g("Hello, aria2"));  controller.popStructFrame();  const Dict* structValue = downcast<Dict>(controller.getCurrentFrameValue());  CPPUNIT_ASSERT(structValue->empty());}void XmlRpcRequestParserControllerTest::testPopStructFrame_noValue(){  XmlRpcRequestParserController controller;  controller.setCurrentFrameValue(Dict::g());  controller.pushFrame();  controller.setCurrentFrameName("greeting");  controller.popStructFrame();  const Dict* structValue = downcast<Dict>(controller.getCurrentFrameValue());  CPPUNIT_ASSERT(structValue->empty());}void XmlRpcRequestParserControllerTest::testPopArrayFrame(){  XmlRpcRequestParserController controller;  controller.setCurrentFrameValue(List::g());  controller.pushFrame();  controller.setCurrentFrameValue(Integer::g(100));  controller.popArrayFrame();  const List* array = downcast<List>(controller.getCurrentFrameValue());  CPPUNIT_ASSERT_EQUAL((size_t)1, array->size());  CPPUNIT_ASSERT_EQUAL((Integer::ValueType)100, downcast<Integer>(array->get(0))->i());}void XmlRpcRequestParserControllerTest::testPopArrayFrame_noValue(){  XmlRpcRequestParserController controller;  controller.setCurrentFrameValue(List::g());  controller.pushFrame();  controller.popArrayFrame();  const List* array = downcast<List>(controller.getCurrentFrameValue());  CPPUNIT_ASSERT(array->empty());}void XmlRpcRequestParserControllerTest::testPopArrayFrame_compound(){  XmlRpcRequestParserController controller;  // We are making following structs. [] = array, {key:value .. } = dict  // [ { "uris":["http://example.org/aria2","http://aria2.sf.net/"],  //     "options":{ "timeout":120 } },  //   [ "jp","us" ] ]  controller.setCurrentFrameValue(List::g());  controller.pushFrame();  controller.setCurrentFrameValue(Dict::g());  controller.pushFrame();  controller.setCurrentFrameName("uris");  controller.setCurrentFrameValue(List::g());  controller.pushFrame();  controller.setCurrentFrameValue(String::g("http://example.org/aria2"));  controller.popArrayFrame();  controller.pushFrame();  controller.setCurrentFrameValue(String::g("http://aria2.sf.net/"));  controller.popArrayFrame();  controller.popStructFrame();  controller.pushFrame();  controller.setCurrentFrameName("options");  controller.setCurrentFrameValue(Dict::g());  controller.pushFrame();  controller.setCurrentFrameName("timeout");  controller.setCurrentFrameValue(Integer::g(120));  controller.popStructFrame();  controller.popStructFrame();  controller.popArrayFrame();  controller.pushFrame();  controller.setCurrentFrameValue(List::g());  controller.pushFrame();  controller.setCurrentFrameValue(String::g("jp"));  controller.popArrayFrame();  controller.pushFrame();  controller.setCurrentFrameValue(String::g("us"));  controller.popArrayFrame();  controller.popArrayFrame();  const List* result = downcast<List>(controller.getCurrentFrameValue());  const Dict* dict = downcast<Dict>(result->get(0));  const List* uris = downcast<List>(dict->get("uris"));  const Dict* options = downcast<Dict>(dict->get("options"));  const List* countryList = downcast<List>(result->get(1));  CPPUNIT_ASSERT_EQUAL(std::string("http://aria2.sf.net/"),                       downcast<String>(uris->get(1))->s());  CPPUNIT_ASSERT_EQUAL((Integer::ValueType)120,                       downcast<Integer>(options->get("timeout"))->i());  CPPUNIT_ASSERT_EQUAL(std::string("jp"), downcast<String>(countryList->get(0))->s());}} // namespace rpc} // namespace aria2
 |