void _do_test(AtkObject *obj) { const char *type_name = g_type_name(G_TYPE_FROM_INSTANCE(obj)); g_assert(ATK_IS_OBJECT(obj)); g_assert_cmpstr(type_name, ==, "EailFlipselector"); g_assert(atk_object_get_n_accessible_children(obj) == ITEMS_COUNT); /* * AtkSelection tests */ g_assert(ATK_IS_SELECTION(obj)); /* atk_selection_add_selection test */ g_assert(atk_selection_add_selection(ATK_SELECTION(obj), ITEM_SEL_EINA)); g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_EINA)); /* atk_selection_clear_selection test */ g_assert(atk_selection_clear_selection(ATK_SELECTION(obj)) == FALSE); /* eail_flipselector_ref_selection test */ g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_EINA)); /* atk_selection_get_selection_count test */ g_assert(atk_selection_get_selection_count(ATK_SELECTION(obj)) == MAX_SELECTIONS); /* atk_selection_is_child_selected test */ g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_EINA)); /* atk_selection_remove_selection test */ g_assert(atk_selection_remove_selection(ATK_SELECTION(obj), ITEM_SEL_EINA)); g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_ELM)); /* atk_selection_select_all_selection test */ g_assert(atk_selection_select_all_selection(ATK_SELECTION(obj)) == FALSE); /* * AtkAction tests */ g_assert(ATK_IS_ACTION(obj)); /* atk_action_get_n_actions test */ g_assert(atk_action_get_n_actions(ATK_ACTION(obj)) == ACTIONS_COUNT); /* test existing actions */ g_assert(atk_selection_add_selection(ATK_SELECTION(obj), ITEM_SEL_EINA)); eailu_test_action_activate(ATK_ACTION(obj), "next"); g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_EDJE)); eailu_test_action_activate(ATK_ACTION(obj), "prev"); g_assert(atk_selection_is_child_selected(ATK_SELECTION(obj), ITEM_SEL_EINA)); /* test for non-existing action */ g_assert((eailu_get_action_number(ATK_ACTION(obj), "typo")) == -1); /* test set/get action description */ eailu_test_action_description_all(ATK_ACTION(obj)); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::allAttributes() { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(attributesOfElement(this).utf8().data()); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::stringAttributeValue(JSStringRef attribute) { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); String atkAttributeName = coreAttributeToAtkAttribute(attribute); // Try object attributes first. String attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, atkAttributeName); // Try text attributes if the requested one was not found and we have an AtkText object. if (attributeValue.isEmpty() && ATK_IS_TEXT(m_element.get())) attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), TextAttributeType, atkAttributeName); // Additional check to make sure that the exposure of the state ATK_STATE_INVALID_ENTRY // is consistent with the exposure of aria-invalid as a text attribute, if present. if (atkAttributeName == attributesMap[InvalidNameIndex][AtkDomain]) { bool isInvalidState = checkElementState(m_element.get(), ATK_STATE_INVALID_ENTRY); if (attributeValue.isEmpty()) return JSStringCreateWithUTF8CString(isInvalidState ? "true" : "false"); // If the text attribute was there, check that it's consistent with // what the state says or force the test to fail otherwise. bool isAriaInvalid = attributeValue != "false"; if (isInvalidState != isAriaInvalid) return JSStringCreateWithCharacters(0, 0); } return JSStringCreateWithUTF8CString(attributeValue.utf8().data()); }
double AccessibilityUIElement::intValue() const { if (!ATK_IS_OBJECT(m_element.get())) return 0; if (ATK_IS_VALUE(m_element.get())) { GValue value = G_VALUE_INIT; atk_value_get_current_value(ATK_VALUE(m_element.get()), &value); if (!G_VALUE_HOLDS_FLOAT(&value)) return 0; return g_value_get_float(&value); } // Consider headings as an special case when returning the "int value" of // an AccessibilityUIElement, so we can reuse some tests to check the level // both for HTML headings and objects with the aria-level attribute. if (atk_object_get_role(ATK_OBJECT(m_element.get())) == ATK_ROLE_HEADING) { String headingLevel = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, "level"); bool ok; double headingLevelValue = headingLevel.toDouble(&ok); if (ok) return headingLevelValue; } return 0; }
int AccessibilityUIElement::childrenCount() { if (!ATK_IS_OBJECT(m_element.get())) return 0; return atk_object_get_n_accessible_children(ATK_OBJECT(m_element.get())); }
bool AccessibilityUIElement::hasPopup() const { if (!m_element || !ATK_IS_OBJECT(m_element)) return false; return equalIgnoringCase(getAttributeSetValueForId(ATK_OBJECT(m_element), "aria-haspopup"), "true"); }
static DBusMessage * impl_GetChildren (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; gint i; gint count; DBusMessage *reply; DBusMessageIter iter, iter_array; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); count = atk_object_get_n_accessible_children (object); reply = dbus_message_new_method_return (message); if (!reply) goto oom; dbus_message_iter_init_append (reply, &iter); if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(so)", &iter_array)) goto oom; for (i = 0; i < count; i++) { AtkObject *child = atk_object_ref_accessible_child (object, i); spi_object_append_reference (&iter_array, child); if (child) g_object_unref (child); } if (!dbus_message_iter_close_container (&iter, &iter_array)) goto oom; return reply; oom: // TODO: handle out-of-memory return reply; }
static DBusMessage * impl_GetState (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; DBusMessage *reply = NULL; DBusMessageIter iter, iter_array; dbus_uint32_t states[2]; guint count; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); spi_atk_state_to_dbus_array (object, states); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "u", &iter_array); for (count = 0; count < 2; count++) { dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_UINT32, &states[count]); } dbus_message_iter_close_container (&iter, &iter_array); return reply; }
PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::parentElement() { if (!ATK_IS_OBJECT(m_element.get())) return nullptr; AtkObject* parent = atk_object_get_parent(ATK_OBJECT(m_element.get())); return parent ? AccessibilityUIElement::create(parent) : nullptr; }
AccessibilityUIElement AccessibilityUIElement::parentElement() { if (!ATK_IS_OBJECT(m_element)) return 0; AtkObject* parent = atk_object_get_parent(ATK_OBJECT(m_element)); return parent ? AccessibilityUIElement(parent) : 0; }
JSStringRef AccessibilityUIElement::allAttributes() { if (!m_element) return JSStringCreateWithCharacters(0, 0); ASSERT(ATK_IS_OBJECT(m_element)); return JSStringCreateWithUTF8CString(attributeSetToString(atk_object_get_attributes(ATK_OBJECT(m_element)))); }
static bool checkElementState(PlatformUIElement element, AtkStateType stateType) { if (!ATK_IS_OBJECT(element)) return false; GRefPtr<AtkStateSet> stateSet = adoptGRef(atk_object_ref_state_set(ATK_OBJECT(element))); return atk_state_set_contains_state(stateSet.get(), stateType); }
bool AccessibilityUIElement::hasPopup() const { if (!ATK_IS_OBJECT(m_element.get())) return false; String hasPopupValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, "haspopup"); return equalIgnoringCase(hasPopupValue, "true"); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::allAttributes() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); GOwnPtr<gchar> attributeData(attributeSetToString(atk_object_get_attributes(ATK_OBJECT(m_element.get())))); return JSStringCreateWithUTF8CString(attributeData.get()); }
PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::elementAtPoint(int x, int y) { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return 0; GRefPtr<AtkObject> objectAtPoint = adoptGRef(atk_component_ref_accessible_at_point(ATK_COMPONENT(m_element.get()), x, y, ATK_XY_WINDOW)); return objectAtPoint ? AccessibilityUIElement::create(objectAtPoint.get()) : 0; }
double AccessibilityUIElement::height() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return 0.0f; int width, height; atk_component_get_size(ATK_COMPONENT(m_element.get()), &width, &height); return height; }
double AccessibilityUIElement::y() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return 0.0f; int x, y; atk_component_get_position(ATK_COMPONENT(m_element.get()), &x, &y, ATK_XY_SCREEN); return y; }
static AtkObject * get_atkobject_from_servant (PortableServer_Servant servant) { SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant)); g_return_val_if_fail (object, NULL); g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL); return ATK_OBJECT(object->gobj); }
static dbus_bool_t impl_get_Locale (DBusMessageIter * iter, void *user_data) { AtkObject *object = (AtkObject *) user_data; g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE); return droute_return_v_string (iter, atk_object_get_object_locale (object)); }
void AccessibilityUIElement::getChildrenWithRange(Vector<RefPtr<AccessibilityUIElement> >& children, unsigned location, unsigned length) { if (!ATK_IS_OBJECT(m_element.get())) return; unsigned end = location + length; for (unsigned i = location; i < end; i++) { GRefPtr<AtkObject> child = adoptGRef(atk_object_ref_accessible_child(ATK_OBJECT(m_element.get()), i)); children.append(AccessibilityUIElement::create(child.get())); } }
void AccessibilityUIElement::getChildrenWithRange(Vector<AccessibilityUIElement>& elementVector, unsigned start, unsigned end) { if (!ATK_IS_OBJECT(m_element)) return; for (unsigned i = start; i < end; i++) { AtkObject* child = atk_object_ref_accessible_child(ATK_OBJECT(m_element), i); elementVector.append(AccessibilityUIElement(child)); } }
bool AccessibilityUIElement::isFocusable() const { if (!ATK_IS_OBJECT(m_element)) return false; GRefPtr<AtkStateSet> stateSet = adoptGRef(atk_object_ref_state_set(ATK_OBJECT(m_element))); gboolean isFocusable = atk_state_set_contains_state(stateSet.get(), ATK_STATE_FOCUSABLE); return isFocusable; }
bool AccessibilityUIElement::isSelected() const { if (!ATK_IS_OBJECT(m_element)) return false; PlatformRefPtr<AtkStateSet> stateSet = adoptPlatformRef(atk_object_ref_state_set(ATK_OBJECT(m_element))); gboolean isSelected = atk_state_set_contains_state(stateSet.get(), ATK_STATE_SELECTED); return isSelected; }
bool AccessibilityUIElement::isChecked() const { if (!ATK_IS_OBJECT(m_element)) return false; GRefPtr<AtkStateSet> stateSet = adoptGRef(atk_object_ref_state_set(ATK_OBJECT(m_element))); gboolean isChecked = atk_state_set_contains_state(stateSet.get(), ATK_STATE_CHECKED); return isChecked; }
JSRetainPtr<JSStringRef> AccessibilityUIElement::attributesOfChildren() { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); Vector<RefPtr<AccessibilityUIElement> > children; getChildren(children); return createStringWithAttributes(children); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::title() { if (!ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); const gchar* name = atk_object_get_name(ATK_OBJECT(m_element.get())); GOwnPtr<gchar> axTitle(g_strdup_printf("AXTitle: %s", name ? name : "")); return JSStringCreateWithUTF8CString(axTitle.get()); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::documentURI() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); AtkRole role = atk_object_get_role(ATK_OBJECT(m_element.get())); if (role != ATK_ROLE_DOCUMENT_FRAME) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(atk_document_get_attribute_value(ATK_DOCUMENT(m_element.get()), "URI")); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::language() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return JSStringCreateWithCharacters(0, 0); const gchar* locale = atk_object_get_object_locale(ATK_OBJECT(m_element.get())); if (!locale) return JSStringCreateWithCharacters(0, 0); return JSStringCreateWithUTF8CString(g_strdup_printf("AXLanguage: %s", locale)); }
void AccessibilityUIElement::press() { if (!m_element || !ATK_IS_OBJECT(m_element.get())) return; if (!ATK_IS_ACTION(m_element.get())) return; // Only one action per object is supported so far. atk_action_do_action(ATK_ACTION(m_element.get()), 0); }
void AccessibilityUIElement::getChildren(Vector<RefPtr<AccessibilityUIElement> >& children) { if (!ATK_IS_OBJECT(m_element.get())) return; int count = childrenCount(); for (int i = 0; i < count; i++) { GRefPtr<AtkObject> child = adoptGRef(atk_object_ref_accessible_child(ATK_OBJECT(m_element.get()), i)); children.append(AccessibilityUIElement::create(child.get())); } }