diff options
-rw-r--r-- | project2/ice/iceRows.cpp | 20 | ||||
-rw-r--r-- | project2/ice/iceViewSerializer.cpp | 10 | ||||
-rw-r--r-- | project2/ice/slice2Daemon.cpp | 4 | ||||
-rw-r--r-- | project2/ice/slice2Rows.cpp | 2 | ||||
-rw-r--r-- | project2/ice/unittests/expected/clientPresenter.log | 8 | ||||
-rw-r--r-- | project2/ice/unittests/lib/testrows.xml | 6 | ||||
-rw-r--r-- | project2/ice/unittests/testClient.cpp | 7 | ||||
-rw-r--r-- | project2/ice/unittests/testClient.xml | 2 | ||||
-rw-r--r-- | project2/ice/unittests/testDaemon.cpp | 6 | ||||
-rw-r--r-- | project2/ice/unittests/unittest.ice | 2 | ||||
-rw-r--r-- | project2/ice/unittests/views/UnitTest/SimpleInterface/SingleRow.xml | 5 |
11 files changed, 60 insertions, 12 deletions
diff --git a/project2/ice/iceRows.cpp b/project2/ice/iceRows.cpp index 77519cd..be079dd 100644 --- a/project2/ice/iceRows.cpp +++ b/project2/ice/iceRows.cpp @@ -68,19 +68,25 @@ RowProcSerializer::Serialize(ModelPartPtr mp) case mpt_Null: return; case mpt_Simple: - case mpt_Complex: case mpt_Dictionary: throw std::runtime_error("Not a sequence of things"); + case mpt_Complex: + { + IceRowState irs(mp); + irs.IterateOver(mp, rpc); + break; + } case mpt_Sequence: - IceRowState * irs = NULL; - mp->OnEachChild(boost::bind(&RowProcSerializer::SerializeRow, this, boost::ref(irs), _2)); - if (irs) { - delete irs; + { + IceRowState * irs = NULL; + mp->OnEachChild(boost::bind(&RowProcSerializer::SerializeRow, this, boost::ref(irs), _2)); + if (irs) { + delete irs; + } + break; } - break; } } - } void diff --git a/project2/ice/iceViewSerializer.cpp b/project2/ice/iceViewSerializer.cpp index b690224..7651fc1 100644 --- a/project2/ice/iceViewSerializer.cpp +++ b/project2/ice/iceViewSerializer.cpp @@ -50,10 +50,16 @@ IceViewSerializer::addNamedValue(const Glib::ustring & name, const VariableType void IceViewSerializer::addNewRow(const Glib::ustring & name) const { - rowmpp = mpp->GetChild(name); - if (rowmpp) { + if (mpp->GetType() == Slicer::mpt_Complex) { + rowmpp = mpp; rowmpp->Create(); } + else { + rowmpp = mpp->GetChild(name); + if (rowmpp) { + rowmpp->Create(); + } + } } void diff --git a/project2/ice/slice2Daemon.cpp b/project2/ice/slice2Daemon.cpp index 3e66339..4cd879f 100644 --- a/project2/ice/slice2Daemon.cpp +++ b/project2/ice/slice2Daemon.cpp @@ -43,8 +43,8 @@ Slice2Daemon::visitOperation(const Slice::OperationPtr & o) fprintf(code, "const ::Ice::Current &) {\n"); visitParameterMap(o); if (o->returnType()) { - fprintf(code, "\t\t\t\t%s rtn;\n", o->returnType()->typeId().c_str()); - fprintf(code, "\t\t\t\tSlicer::ModelPartPtr mpp = new Slicer::ModelPartForSequence< %s >(rtn);\n", o->returnType()->typeId().c_str()); + fprintf(code, "\t\t\t\t%s rtn;\n", returnTypeToString(o->returnType(), o->returnIsOptional()).c_str()); + fprintf(code, "\t\t\t\tSlicer::ModelPartPtr mpp = Slicer::ModelPartFor(rtn);\n"); fprintf(code, "\t\t\t\texecuteView(\"%s/%s/%s\", mpp, params);\n", module.c_str(), interface.c_str(), o->name().c_str()); fprintf(code, "\t\t\t\treturn rtn;\n"); } diff --git a/project2/ice/slice2Rows.cpp b/project2/ice/slice2Rows.cpp index 3534aff..cea2d6b 100644 --- a/project2/ice/slice2Rows.cpp +++ b/project2/ice/slice2Rows.cpp @@ -47,7 +47,7 @@ Slice2Rows::visitOperation(const Slice::OperationPtr & o) fprintf(code, "\t\t\t\t\t\tauto result = "); CallOperation(o); fprintf(code, ";\n"); - fprintf(code, "\t\t\t\t\t\tSlicer::ModelPartPtr mp = new Slicer::ModelPartForSequence<decltype(result)>(&result);\n"); + fprintf(code, "\t\t\t\t\t\tSlicer::ModelPartPtr mp = Slicer::ModelPartFor(result);\n"); fprintf(code, "\t\t\t\t\t\ttoRpc->Serialize(mp);\n"); fprintf(code, "\t\t\t\t\t}\n\n"); ParameterVariables(o); diff --git a/project2/ice/unittests/expected/clientPresenter.log b/project2/ice/unittests/expected/clientPresenter.log index cda61fc..cebd0bf 100644 --- a/project2/ice/unittests/expected/clientPresenter.log +++ b/project2/ice/unittests/expected/clientPresenter.log @@ -1,4 +1,12 @@ init +addNewRowSet: row +addNewArray: rec(1) +addNewRow: rec +addNamedValue: a=3 +addNamedValue: b=single +finishRow +finishArray: (1) +finishRowSet addNewRowSet: somerows addNewArray: rec(1) addNewRow: rec diff --git a/project2/ice/unittests/lib/testrows.xml b/project2/ice/unittests/lib/testrows.xml index 876e311..75578d6 100644 --- a/project2/ice/unittests/lib/testrows.xml +++ b/project2/ice/unittests/lib/testrows.xml @@ -2,6 +2,12 @@ <p2:xpathrows xmlns:p2="http://project2.randomdan.homeip.net" name="filelist"> <url><root source="config" name="dataroot"/>/unittest-data.xml</url> <filterviews> + <single root="/root/record[3]"> + <fields> + <a xpath="a"/> + <b xpath="b"/> + </fields> + </single> <default root="/root/record"> <fields> <a xpath="a"/> diff --git a/project2/ice/unittests/testClient.cpp b/project2/ice/unittests/testClient.cpp index e5d45b7..4040b60 100644 --- a/project2/ice/unittests/testClient.cpp +++ b/project2/ice/unittests/testClient.cpp @@ -24,6 +24,11 @@ class Dummy : public UnitTest::SimpleInterface { { } + UnitTest::SimplePtr SingleRow(const Ice::Current&) + { + return new UnitTest::Simple { 3, "single" }; + } + UnitTest::Simples SomeRows(const Ice::Current&) { UnitTest::Simples rtn { @@ -66,6 +71,7 @@ commonTests() BOOST_TEST_CHECKPOINT("Verify loaded"); BOOST_REQUIRE(ElementLoader::getFor("UnitTest-SimpleInterface-SomeTask")); BOOST_REQUIRE(ElementLoader::getFor("UnitTest-SimpleInterface-SomeTaskParams")); + BOOST_REQUIRE(ElementLoader::getFor("UnitTest-SimpleInterface-SingleRow")); BOOST_REQUIRE(ElementLoader::getFor("UnitTest-SimpleInterface-SomeRows")); BOOST_REQUIRE(ElementLoader::getFor("UnitTest-SimpleInterface-SomeRowsParams")); @@ -96,6 +102,7 @@ unloadTests() BOOST_TEST_CHECKPOINT("Verify unloaded"); BOOST_REQUIRE_THROW(ElementLoader::getFor("UnitTest-SimpleInterface-SomeTask"), NotSupported); BOOST_REQUIRE_THROW(ElementLoader::getFor("UnitTest-SimpleInterface-SomeTaskParams"), NotSupported); + BOOST_REQUIRE_THROW(ElementLoader::getFor("UnitTest-SimpleInterface-SingleRow"), NotSupported); BOOST_REQUIRE_THROW(ElementLoader::getFor("UnitTest-SimpleInterface-SomeRows"), NotSupported); BOOST_REQUIRE_THROW(ElementLoader::getFor("UnitTest-SimpleInterface-SomeRowsParams"), NotSupported); } diff --git a/project2/ice/unittests/testClient.xml b/project2/ice/unittests/testClient.xml index 4ae33b1..c8fb208 100644 --- a/project2/ice/unittests/testClient.xml +++ b/project2/ice/unittests/testClient.xml @@ -3,8 +3,10 @@ xmlns:p2="http://project2.randomdan.homeip.net"> <p2:UnitTest-SimpleInterface-SomeTask datasource="unittest-ice-datasource" objectId="testObject" /> <p2:UnitTest-SimpleInterface-SomeTaskParams datasource="unittest-ice-datasource" objectId="testObject" a="1" b="first" /> + <p2:UnitTest-SimpleInterface-SingleRow name="row" datasource="unittest-ice-datasource" objectId="testObject" /> <p2:UnitTest-SimpleInterface-SomeRows name="rows" datasource="unittest-ice-datasource" objectId="testObject" /> <p2:UnitTest-SimpleInterface-SomeRowsParams name="rowsParams" datasource="unittest-ice-datasource" objectId="testObject" a="2" b="second" /> + <p2:view source="row" recordname="rec" rootname="row" /> <p2:view source="rows" recordname="rec" rootname="somerows" /> <p2:view source="rowsParams" recordname="rec" rootname="somerowsparams" /> </test> diff --git a/project2/ice/unittests/testDaemon.cpp b/project2/ice/unittests/testDaemon.cpp index 9e86a03..fe0b0f5 100644 --- a/project2/ice/unittests/testDaemon.cpp +++ b/project2/ice/unittests/testDaemon.cpp @@ -74,6 +74,12 @@ commonTests() BOOST_REQUIRE(si); si->ice_ping(); + BOOST_TEST_CHECKPOINT("Call view (single)"); + auto single = si->SingleRow(); + BOOST_REQUIRE(single); + BOOST_REQUIRE_EQUAL(1, single->a); + BOOST_REQUIRE_EQUAL("third", single->b); + BOOST_TEST_CHECKPOINT("Call view (no parameters)"); auto rows = si->SomeRows(); BOOST_REQUIRE_EQUAL(4, rows.size()); diff --git a/project2/ice/unittests/unittest.ice b/project2/ice/unittests/unittest.ice index 60e44bb..f7305d3 100644 --- a/project2/ice/unittests/unittest.ice +++ b/project2/ice/unittests/unittest.ice @@ -10,6 +10,8 @@ module UnitTest { interface SimpleInterface { ["project2:rows"] + Simple SingleRow(); + ["project2:rows"] Simples SomeRows(); ["project2:rows"] Simples SomeRowsParams(int a, string b); diff --git a/project2/ice/unittests/views/UnitTest/SimpleInterface/SingleRow.xml b/project2/ice/unittests/views/UnitTest/SimpleInterface/SingleRow.xml new file mode 100644 index 0000000..2b54b96 --- /dev/null +++ b/project2/ice/unittests/views/UnitTest/SimpleInterface/SingleRow.xml @@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<block xmlns:p2="http://project2.randomdan.homeip.net" xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="../../../lib/testrows.xml"/> + <p2:flatview source="filelist" recordname="element" filter="single"/> +</block> |