Index: ui/accessibility/ax_tree_unittest.cc |
diff --git a/ui/accessibility/ax_tree_unittest.cc b/ui/accessibility/ax_tree_unittest.cc |
index a0b7705ee04148c94311d489180ede1f7ebcc16d..b108d3823cbfe8f1df9ab6d6e34323fea6740240 100644 |
--- a/ui/accessibility/ax_tree_unittest.cc |
+++ b/ui/accessibility/ax_tree_unittest.cc |
@@ -16,7 +16,13 @@ namespace { |
class FakeAXTreeDelegate : public AXTreeDelegate { |
public: |
- FakeAXTreeDelegate() : root_changed_(false) {} |
+ FakeAXTreeDelegate() |
+ : tree_data_changed_(false), |
+ root_changed_(false) {} |
+ |
+ void OnTreeDataChanged(AXTree* tree) override { |
+ tree_data_changed_ = true; |
+ } |
void OnNodeWillBeDeleted(AXTree* tree, AXNode* node) override { |
deleted_ids_.push_back(node->id()); |
@@ -55,6 +61,7 @@ class FakeAXTreeDelegate : public AXTreeDelegate { |
} |
} |
+ bool tree_data_changed() const { return tree_data_changed_; } |
bool root_changed() const { return root_changed_; } |
const std::vector<int32>& deleted_ids() { return deleted_ids_; } |
const std::vector<int32>& subtree_deleted_ids() { |
@@ -72,6 +79,7 @@ class FakeAXTreeDelegate : public AXTreeDelegate { |
} |
private: |
+ bool tree_data_changed_; |
bool root_changed_; |
std::vector<int32> deleted_ids_; |
std::vector<int32> subtree_deleted_ids_; |
@@ -105,17 +113,19 @@ TEST(AXTreeTest, SerializeSimpleAXTree) { |
checkbox.state = 0; |
checkbox.location = gfx::Rect(20, 50, 200, 30); |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.push_back(root); |
initial_state.nodes.push_back(button); |
initial_state.nodes.push_back(checkbox); |
+ initial_state.has_tree_data = true; |
+ initial_state.tree_data.title = "Title"; |
AXSerializableTree src_tree(initial_state); |
- scoped_ptr<AXTreeSource<const AXNode*, AXNodeData> > tree_source( |
+ scoped_ptr<AXTreeSource<const AXNode*, AXNodeData, AXTreeData> > tree_source( |
src_tree.CreateTreeSource()); |
- AXTreeSerializer<const AXNode*, AXNodeData> serializer( |
+ AXTreeSerializer<const AXNode*, AXNodeData, AXTreeData> serializer( |
tree_source.get()); |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
serializer.SerializeChanges(src_tree.root(), &update); |
AXTree dst_tree; |
@@ -137,6 +147,7 @@ TEST(AXTreeTest, SerializeSimpleAXTree) { |
EXPECT_EQ(checkbox.role, checkbox_node->data().role); |
EXPECT_EQ( |
+ "AXTree title=Title\n" |
"id=1 rootWebArea FOCUSABLE FOCUSED (0, 0)-(800, 600) child_ids=2,3\n" |
" id=2 button (20, 20)-(200, 30)\n" |
" id=3 checkBox (20, 50)-(200, 30)\n", |
@@ -167,7 +178,7 @@ TEST(AXTreeTest, SerializeAXTreeUpdate) { |
button.role = AX_ROLE_BUTTON; |
button.state = 0; |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.nodes.push_back(list); |
update.nodes.push_back(list_item_2); |
update.nodes.push_back(list_item_3); |
@@ -186,13 +197,13 @@ TEST(AXTreeTest, DeleteUnknownSubtreeFails) { |
root.id = 1; |
root.role = AX_ROLE_ROOT_WEB_AREA; |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.push_back(root); |
AXTree tree(initial_state); |
// This should fail because we're asking it to delete |
// a subtree rooted at id=2, which doesn't exist. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.node_id_to_clear = 2; |
update.nodes.resize(1); |
update.nodes[0].id = 1; |
@@ -202,7 +213,7 @@ TEST(AXTreeTest, DeleteUnknownSubtreeFails) { |
} |
TEST(AXTreeTest, LeaveOrphanedDeletedSubtreeFails) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(3); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -214,7 +225,7 @@ TEST(AXTreeTest, LeaveOrphanedDeletedSubtreeFails) { |
// This should fail because we delete a subtree rooted at id=2 |
// but never update it. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.node_id_to_clear = 2; |
update.nodes.resize(1); |
update.nodes[0].id = 3; |
@@ -223,7 +234,7 @@ TEST(AXTreeTest, LeaveOrphanedDeletedSubtreeFails) { |
} |
TEST(AXTreeTest, LeaveOrphanedNewChildFails) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(1); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -231,7 +242,7 @@ TEST(AXTreeTest, LeaveOrphanedNewChildFails) { |
// This should fail because we add a new child to the root node |
// but never update it. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.nodes.resize(1); |
update.nodes[0].id = 1; |
update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -241,14 +252,14 @@ TEST(AXTreeTest, LeaveOrphanedNewChildFails) { |
} |
TEST(AXTreeTest, DuplicateChildIdFails) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(1); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
AXTree tree(initial_state); |
// This should fail because a child id appears twice. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.nodes.resize(2); |
update.nodes[0].id = 1; |
update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -260,7 +271,7 @@ TEST(AXTreeTest, DuplicateChildIdFails) { |
} |
TEST(AXTreeTest, InvalidReparentingFails) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(3); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -273,7 +284,7 @@ TEST(AXTreeTest, InvalidReparentingFails) { |
// This should fail because node 3 is reparented from node 2 to node 1 |
// without deleting node 1's subtree first. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.nodes.resize(3); |
update.nodes[0].id = 1; |
update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -286,14 +297,14 @@ TEST(AXTreeTest, InvalidReparentingFails) { |
} |
TEST(AXTreeTest, TwoRootsFails) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(1); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
AXTree tree(initial_state); |
// This should fail because there are two new roots. |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.nodes.resize(2); |
update.nodes[0].id = 2; |
update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -304,7 +315,7 @@ TEST(AXTreeTest, TwoRootsFails) { |
} |
TEST(AXTreeTest, TreeDelegateIsCalled) { |
- AXTreeUpdate<AXNodeData> initial_state; |
+ AXTreeUpdate initial_state; |
initial_state.nodes.resize(2); |
initial_state.nodes[0].id = 1; |
initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
@@ -312,7 +323,7 @@ TEST(AXTreeTest, TreeDelegateIsCalled) { |
initial_state.nodes[1].id = 2; |
AXTree tree(initial_state); |
- AXTreeUpdate<AXNodeData> update; |
+ AXTreeUpdate update; |
update.node_id_to_clear = 1; |
update.nodes.resize(2); |
update.nodes[0].id = 3; |
@@ -347,4 +358,41 @@ TEST(AXTreeTest, TreeDelegateIsCalled) { |
tree.SetDelegate(NULL); |
} |
+TEST(AXTreeTest, TreeDelegateIsCalledForTreeDataChanges) { |
+ AXTreeUpdate initial_state; |
+ initial_state.nodes.resize(1); |
+ initial_state.nodes[0].id = 1; |
+ initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA; |
+ initial_state.has_tree_data = true; |
+ initial_state.tree_data.title = "Initial"; |
+ AXTree tree(initial_state); |
+ |
+ FakeAXTreeDelegate fake_delegate; |
+ tree.SetDelegate(&fake_delegate); |
+ |
+ // An empty update shouldn't change tree data. |
+ AXTreeUpdate empty_update; |
+ EXPECT_TRUE(tree.Unserialize(empty_update)); |
+ EXPECT_FALSE(fake_delegate.tree_data_changed()); |
+ EXPECT_EQ("Initial", tree.data().title); |
+ |
+ // An update with tree data shouldn't change tree data if |
+ // |has_tree_data| isn't set. |
+ AXTreeUpdate ignored_tree_data_update; |
+ ignored_tree_data_update.tree_data.title = "Ignore Me"; |
+ EXPECT_TRUE(tree.Unserialize(ignored_tree_data_update)); |
+ EXPECT_FALSE(fake_delegate.tree_data_changed()); |
+ EXPECT_EQ("Initial", tree.data().title); |
+ |
+ // An update with |has_tree_data| set should update the tree data. |
+ AXTreeUpdate tree_data_update; |
+ tree_data_update.has_tree_data = true; |
+ tree_data_update.tree_data.title = "New Title"; |
+ EXPECT_TRUE(tree.Unserialize(tree_data_update)); |
+ EXPECT_TRUE(fake_delegate.tree_data_changed()); |
+ EXPECT_EQ("New Title", tree.data().title); |
+ |
+ tree.SetDelegate(NULL); |
+} |
+ |
} // namespace ui |