#include #include "uscxml/config.h" #include "uscxml/Common.h" #include #include #include #include #include #include using namespace Arabica::DOM; class CapturingEventListener : public Events::EventListener { public: void handleEvent(Events::Event& event) { std::cout << "Handling captured event " << event.getType() << std::endl; } }; class BubblingEventListener : public Events::EventListener { public: void handleEvent(Events::Event& event) { std::cout << "Handling bubbling event " << event.getType() << std::endl; } }; int main(int argc, char** argv) { if (argc != 2) { std::cerr << "Expected path to test-arabica-events.xml" << std::endl; exit(EXIT_FAILURE); } Arabica::SAX::InputSource inputSource(argv[1]); Arabica::SAX2DOM::Parser domParser; Arabica::SAX::CatchErrorHandler errorHandler; domParser.setErrorHandler(errorHandler); if(!domParser.parse(inputSource)) { return -1; } Document doc = domParser.getDocument(); Element elem = doc.getDocumentElement(); CapturingEventListener cel; BubblingEventListener bel; Events::EventTarget eventTarget(elem); eventTarget.addEventListener("DOMNodeInserted", cel, true); eventTarget.addEventListener("DOMNodeInserted", bel, false); eventTarget.addEventListener("DOMNodeRemoved", cel, true); eventTarget.addEventListener("DOMNodeRemoved", bel, false); eventTarget.addEventListener("DOMAttrModified", cel, true); eventTarget.addEventListener("DOMAttrModified", bel, false); Arabica::XPath::XPath xpath; Arabica::XPath::NodeSet divs = xpath.evaluate("//div", doc).asNodeSet(); for (size_t i = 0; i < divs.size(); i++) { Element divElem = Element(divs[i]); divElem.setAttribute("foo", "true"); divElem.setAttribute("foo", "false"); Element fooElem = divElem.getOwnerDocument().createElement("foo"); divElem.appendChild(fooElem); divElem.removeChild(fooElem); } }