Add dumpTree api to AccessibleNode 80/318580/2
authorYoungsun Suh <youngsun.suh@samsung.com>
Tue, 21 Jan 2025 01:39:01 +0000 (10:39 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Tue, 21 Jan 2025 01:47:27 +0000 (10:47 +0900)
Change-Id: Ibca686636e01156240614728a0796e2ce2566079

libaurum/inc/Accessibility/AccessibleNode.h
libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h
libaurum/inc/Impl/Accessibility/AtspiWrapper.h
libaurum/inc/Impl/Accessibility/MockAccessibleNode.h
libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc
libaurum/src/Impl/Accessibility/AtspiWrapper.cc
libaurum/src/Impl/Accessibility/MockAccessibleNode.cc
libaurum/src/c_bindings/AurumCBindings.cc

index 6874b092ad80de12220cdb27d5bc1388198abf17..87e30dfe31f0dfe29773b36b4c7978260655a87a 100644 (file)
@@ -141,6 +141,13 @@ public:
      */
     virtual std::vector<std::shared_ptr<AccessibleNode>> getMatchesInMatches(const std::shared_ptr<UiSelector> firstSelector, const std::shared_ptr<UiSelector> secondSelector, const bool ealryReturn) const = 0;
 
+    /**
+     * @brief dump current tree in json string
+     *
+     * @return string
+     */
+    virtual std::string dumpTree() const = 0;
+
     /**
      * @copydoc UiObject::next()
      */
index 0834e2e2c9ad79370597e614829bc1391eb3a2df..790d543ece694a10607b6636b54e7a768e32bbfa 100644 (file)
@@ -80,6 +80,11 @@ public:
      */
     std::vector<std::shared_ptr<AccessibleNode>> getMatchesInMatches(const std::shared_ptr<UiSelector> firstSelector, const std::shared_ptr<UiSelector> secondSelector, const bool ealryReturn) const override;
 
+    /**
+     * @copydoc AccessibleNode::dumpTree()
+     */
+    std::string dumpTree() const override;
+
     /**
      * @copydoc UiObject::next()
      */
index 8a54e26c65ab1da3d61bf7c10d269ad8fbd65cb2..eb2a23d453ca0e7de7ca5d21df927d3c69236ce8 100644 (file)
@@ -81,6 +81,7 @@ public:
     static AtspiAccessible *Atspi_accessible_get_neighbor(AtspiAccessible *root, AtspiAccessible *start, AtspiNeighborSearchDirection direction, GError **error);
     static void Atspi_accessible_set_include_hidden(AtspiAccessible *obj, gboolean enabled, GError **error);
     static gboolean Atspi_accessible_get_include_hidden(AtspiAccessible *obj, GError **error);
+    static gchar *Atspi_accessible_dump_tree(AtspiAccessible *obj, AtspiDumpDetailLevelType detail_level, GError **error);
 
 private:
     static std::recursive_mutex mMutex;
index bd73f29743e9b79cae56685e4434f1b6e6592a34..aaba614d68c681d82e4186688443af981b2fb607 100644 (file)
@@ -79,6 +79,11 @@ public:
      */
     std::vector<std::shared_ptr<AccessibleNode>> getMatchesInMatches(const std::shared_ptr<UiSelector> firstSelector, const std::shared_ptr<UiSelector> secondSelector, const bool ealryReturn) const override;
 
+    /**
+     * @copydoc AccessibleNode::dumpTree()
+     */
+    std::string dumpTree() const override;
+
     /**
      * @copydoc UiObject::next()
      */
index ceea20cfe4c569080f46ccdeca0617675c5862e3..ed571b35baf399e959dbf4949fc655a358e9da31 100644 (file)
@@ -692,6 +692,22 @@ std::vector<std::shared_ptr<AccessibleNode>> AtspiAccessibleNode::getMatchesInMa
     return ret;
 }
 
+std::string AtspiAccessibleNode::dumpTree() const
+{
+    if (!isValid()) {
+        return {};
+    }
+
+    gchar *c_result = AtspiWrapper::Atspi_accessible_dump_tree(mNode, ATSPI_DUMP_FULL_SHOWING_ONLY, NULL);
+    if (c_result) {
+        std::string result{c_result};
+        g_free(c_result);
+        return result;
+    }
+
+    return {};
+}
+
 std::shared_ptr<AccessibleNode> AtspiAccessibleNode::next() const
 {
     if (!isValid()) {
index 4b3955bcf20ac9241a93fcb21396d9f145a1a34d..47525659a3384c5e7828b8814b87aa2d784f5e90 100644 (file)
@@ -296,3 +296,9 @@ gboolean AtspiWrapper::Atspi_accessible_get_include_hidden(AtspiAccessible *obj,
     std::unique_lock<std::recursive_mutex> lock(mMutex);
     return atspi_accessible_get_include_hidden(obj, error);
 }
+
+gchar *AtspiWrapper::Atspi_accessible_dump_tree(AtspiAccessible *obj, AtspiDumpDetailLevelType detail_level, GError **error)
+{
+    std::unique_lock<std::recursive_mutex> lock(mMutex);
+    return atspi_accessible_dump_tree(obj, detail_level, error);
+}
index 4cc25b495b9b3e0690b3a0720a49574b766f6698..448c2e898968b38d776df2abc5b01660799c8075 100644 (file)
@@ -125,6 +125,10 @@ std::vector<std::shared_ptr<AccessibleNode>> MockAccessibleNode::getMatchesInMat
     return ret;
 }
 
+std::string MockAccessibleNode::dumpTree() const
+{
+    return {"{}"};
+}
 
 void* MockAccessibleNode::getRawHandler(void) const
 {
index 9aa581fe1c285d05af2981cd326f29a923ea78f7..1a7e2d29dc4f71d8950be251c68a041424eb465c 100644 (file)
@@ -41,9 +41,8 @@ const char* dump_screen()
     dumpResult += " : [";
 
     for (const auto& root: windowRoots) {
-        // TODO: implement dump logic
-        // root->dump();
-        dumpResult += "{},";
+        dumpResult += root->dumpTree();
+        dumpResult += ",";
     }
 
     // remove last comma if exists.