[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/trunk r12156: add support for parsing the
From: |
Rob Savoye |
Subject: |
[Gnash-commit] /srv/bzr/gnash/trunk r12156: add support for parsing the arguments for an Invoke call, plus a test case for it. |
Date: |
Thu, 15 Apr 2010 10:07:35 -0600 |
User-agent: |
Bazaar (2.0.3) |
------------------------------------------------------------
revno: 12156
committer: Rob Savoye <address@hidden>
branch nick: trunk
timestamp: Thu 2010-04-15 10:07:35 -0600
message:
add support for parsing the arguments for an Invoke call, plus a test case
for it.
modified:
plugin/npapi/external.cpp
plugin/npapi/external.h
plugin/npapi/test.cpp
=== modified file 'plugin/npapi/external.cpp'
--- a/plugin/npapi/external.cpp 2010-04-15 03:46:50 +0000
+++ b/plugin/npapi/external.cpp 2010-04-15 16:07:35 +0000
@@ -46,6 +46,16 @@
std::vector<std::string> args)
{
std::stringstream ss;
+ std::vector<std::string>::iterator it;
+
+ ss << "<invoke name=\"" << method << "\" returntype=\"xml\">";
+ ss << "<arguments>";
+ for (it=args.begin(); it != args.end(); ++it) {
+ ss << *it;
+ }
+
+ ss << "</arguments>";
+ ss << "<invoke>";
return ss.str();
}
@@ -322,6 +332,37 @@
return props;
}
+std::vector<NPVariant *>
+ExternalInterface::parseArguments(const std::string &xml)
+{
+ std::vector<NPVariant *> args;
+
+ std::string::size_type start = 0;
+ std::string::size_type end;
+
+ std::string name;
+ std::string data = xml;
+ std::string tag = "<arguments>";
+ start = data.find(tag);
+ if (start != std::string::npos) {
+ data.erase(0, tag.size());
+ }
+ while (!data.empty()) {
+ // Extract the data
+ start = data.find("<", 1); // start past the opening <
+ end = data.find(">", start) + 1;
+ std::string sub = data.substr(0, end);
+ if (data == "</arguments>") {
+ break;
+ }
+ NPVariant *value = parseXML(sub);
+ args.push_back(value);
+ data.erase(0, end);
+ }
+
+ return args;
+}
+
// local Variables:
// mode: C++
// indent-tabs-mode: nil
=== modified file 'plugin/npapi/external.h'
--- a/plugin/npapi/external.h 2010-04-15 03:46:50 +0000
+++ b/plugin/npapi/external.h 2010-04-15 16:07:35 +0000
@@ -55,6 +55,7 @@
NPVariant *parseXML(const std::string &xml);
std::map<std::string, NPVariant *> parseProperties(const std::string &xml);
+ std::vector<NPVariant *> parseArguments(const std::string &xml);
std::string convertNPVariant (NPVariant *npv);
};
=== modified file 'plugin/npapi/test.cpp'
--- a/plugin/npapi/test.cpp 2010-04-15 03:46:50 +0000
+++ b/plugin/npapi/test.cpp 2010-04-15 16:07:35 +0000
@@ -236,7 +236,35 @@
} else {
runtest.fail("ExternalInterface::parseXML(object)");
}
-
+
+ std::vector<std::string> iargs;
+ str = ei.makeString("barfoo");
+ iargs.push_back(str);
+ str = ei.makeNumber(135.78);
+ iargs.push_back(str);
+
+ str = ei.makeInvoke("barfoo", iargs);
+ xml = "<invoke name=\"barfoo\"
returntype=\"xml\"><arguments><string>barfoo</string><number>135.78</number></arguments><invoke>";
+// std::cout << str << std::endl;
+ regcomp (®ex_pat, xml.c_str(), REG_NOSUB|REG_NEWLINE);
+ if (regexec (®ex_pat, reinterpret_cast<const char*>(str.c_str()), 0,
(regmatch_t *)0, 0) == 0) {
+ runtest.pass("ExternalInterface::makeInvoke()");
+ } else {
+ runtest.fail("ExternalInterface::makeInvoke()");
+ }
+
+ xml =
"<arguments><string>barfoo</string><number>135.78</number><number>89</number></arguments>";
+ std::vector<NPVariant *> arguments = ei.parseArguments(xml);
+ np = arguments[0];
+ str = NPVARIANT_TO_STRING(np[0]).UTF8Characters;
+ double dub = NPVARIANT_TO_DOUBLE(*arguments[1]);
+ int val = NPVARIANT_TO_INT32(*arguments[2]);
+ if ((arguments.size() == 3) && (str == "barfoo")
+ && (dub == 135.78) && (val = 89)) {
+ runtest.pass("ExternalInterface::parseArguments()");
+ } else {
+ runtest.fail("ExternalInterface::parseArguments()");
+ }
}
void* NPN_MemAlloc(uint32_t size)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r12156: add support for parsing the arguments for an Invoke call, plus a test case for it.,
Rob Savoye <=