diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp index ee68357..18ab404 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/Controller.cpp @@ -1705,8 +1705,9 @@ void ControlState(common::HardwareStateManager& manager, ::std::vectorcontentSize); void* titleIdBuffer = xmlHeap.GetAddr(); @@ -191,7 +199,6 @@ void PreinstallImporter::SplitTextAndSetupList(nn::ProgramId* list, size_t* num, const char* token = ","; char* cutout; - *num = 0; cutout = std::strtok(text, token); if(!cutout) { diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/PreinstallImporter.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/PreinstallImporter.h index d075f0a..8ebba31 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/PreinstallImporter.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/PreinstallImporter.h @@ -45,6 +45,8 @@ private: nn::Result GetHtmlBodyAndParseXmlData(BgsCommunicator& comm, nn::ProgramId* list, size_t* num); //! @brief 受信したXMLデータを解析してタイトルIDリストを設定します + //! @return プリインストールアプリが存在しない場合、(Level=Status, Summary=NotFound, Module=Application, Description=NotFound)
+ //! のResultを返します nn::Result ParseXmlData(void* buf, nn::ProgramId* list, size_t* num); //! @brief SimpleXmlパーサの解析をTitleIdノードまで進めます diff --git a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/PreinstallImporter/test_PreinstallImporter.cpp b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/PreinstallImporter/test_PreinstallImporter.cpp index 522c00f..c637104 100644 --- a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/PreinstallImporter/test_PreinstallImporter.cpp +++ b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/PreinstallImporter/test_PreinstallImporter.cpp @@ -103,13 +103,22 @@ void PreinstallImporterTest::ListUp() size_t num; nn::ProgramId list[256]; - NN_TEST_ASSERT_RESULT_SUCCESS( - importer.ListTitles(list, &num, 17179924184, reinterpret_cast(const_cast("EJA20305940")))); + nn::Result result; + result = importer.ListTitles(list, &num, 17179924184, reinterpret_cast(const_cast("EJA20305940"))); - NN_LOG("Preinstalled num = %d\n", num); - for(u32 i = 0; i < num; i++) + if(result == nn::MakePermanentResult(nn::Result::SUMMARY_NOT_FOUND, + nn::Result::MODULE_APPLICATION, nn::Result::DESCRIPTION_NOT_FOUND)) { - NN_LOG("%016llx\n", list[i]); + NN_LOG("No PreInstalled Application found\n"); + NN_TEST_ASSERT(num == 0); + } + else + { + NN_LOG("Preinstalled num = %d\n", num); + for (u32 i = 0; i < num; i++) + { + NN_LOG("%016llx\n", list[i]); + } } } diff --git a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/SimpleXmlParser/test_SimpleXmlParser.cpp b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/SimpleXmlParser/test_SimpleXmlParser.cpp index 4c3d146..efd0b54 100644 --- a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/SimpleXmlParser/test_SimpleXmlParser.cpp +++ b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/SimpleXmlParser/test_SimpleXmlParser.cpp @@ -39,9 +39,11 @@ class SimpleXmlParserTest : public Suite { public: SimpleXmlParserTest() { TEST_ADD(SimpleXmlParserTest::Find); + TEST_ADD(SimpleXmlParserTest::NotFound); } private: void Find(); + void NotFound(); }; namespace @@ -84,6 +86,25 @@ const char* SimpleXmlParserGetter::GetContent(const nn::xml::simple::SimpleXmlPa char SimpleXmlParserGetter::m_Buf[SimpleXmlParserGetter::BUF_SIZE]; +nn::Result SetNodetoPreinstalledInfo(nn::xml::simple::SimpleXmlParser& parser, std::string& xmlData, const nn::xml::simple::SimpleXmlParser::Node** pNode) +{ + parser.parse(reinterpret_cast(const_cast(xmlData.c_str())), xmlData.size()); + + NN_TEST_ASSERT(!parser.isError()); + const nn::xml::simple::SimpleXmlParser::Node* pRootNode = parser.getRootNode(); + const nn::xml::simple::SimpleXmlParser::Node* pTargetNode = pRootNode->firstChild; + // 欲しい情報がある場所まで階層を掘り下げる + const nn::xml::simple::SimpleXmlParser::Node* pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode( + pTargetNode, "Body"); + pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, + "GetPreInstalledInfoResponse"); + pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, + "GetPreInstalledInfoResponse"); + *pNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, "PreinstalledInfo"); + + return nn::ResultSuccess(); +} + } //------------------------------------------------------------------ @@ -117,20 +138,9 @@ const char testText[] = "\ nn::fnd::IAllocator* pAllocator = nn::init::GetAllocator(); nn::xml::simple::SimpleXmlParser simpleXmlParser(pAllocator); - simpleXmlParser.parse(reinterpret_cast(const_cast(testText)), sizeof(testText) - 1); - - - NN_TEST_ASSERT(!simpleXmlParser.isError()); - const nn::xml::simple::SimpleXmlParser::Node* pRootNode = simpleXmlParser.getRootNode(); - const nn::xml::simple::SimpleXmlParser::Node* pTargetNode = pRootNode->firstChild; - // 欲しい情報がある場所まで階層を掘り下げる - const nn::xml::simple::SimpleXmlParser::Node* pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode( - pTargetNode, "Body"); - pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, - "GetPreInstalledInfoResponse"); - pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, - "GetPreInstalledInfoResponse"); - pPriorityNode = nn::xml::simple::SimpleXmlParser::FindNextNode(pPriorityNode->firstChild, "PreinstalledInfo"); + const nn::xml::simple::SimpleXmlParser::Node* pPriorityNode; + std::string xmlData(testText); + SetNodetoPreinstalledInfo(simpleXmlParser, xmlData, &pPriorityNode); { const nn::xml::simple::SimpleXmlParser::Node* pTaskIdNode = nn::xml::simple::SimpleXmlParser::FindNextNode( @@ -158,6 +168,42 @@ const char testText[] = "\ } +void SimpleXmlParserTest::NotFound() +{ +const char testText[] = \ +"\ +\ +\ +\ +\ +\ +1327551124393\ +0\ +1\ +\ +17179924184\ +EJA20305940\ +JPN\ +1327545997000\ +\ +\ +\ +\ +"; + + nn::fnd::IAllocator* pAllocator = nn::init::GetAllocator(); + nn::xml::simple::SimpleXmlParser simpleXmlParser(pAllocator); + const nn::xml::simple::SimpleXmlParser::Node* pPriorityNode; + std::string xmlData(testText); + SetNodetoPreinstalledInfo(simpleXmlParser, xmlData, &pPriorityNode); + + { + const nn::xml::simple::SimpleXmlParser::Node* pTaskIdNode = nn::xml::simple::SimpleXmlParser::FindNextNode( + pPriorityNode->firstChild, "TitleIds"); + NN_TEST_ASSERT(!pTaskIdNode); + } +} + NN_TEST_DEFINE_MAIN(SimpleXmlParserTest) /*---------------------------------------------------------------------------*