--- /dev/null
+#include <memory>
+#include <functional>
+
+#include "reading_composer.hpp"
+
+/******************* generate_description_trait *******************/
+
+class DescriptionTraitFixture : public ReadingMaterialTraitFixture {
+public:
+ void RunTest(const char *string) {
+ std::unique_ptr<char, std::function<void(void*)>>
+ ret(generate_description_trait(m_composer.get()), free);
+ EXPECT_STREQ(ret.get(), string);
+ }
+};
+
+TEST_F(DescriptionTraitFixture, NoRole) {
+ GetReadingComposerObject();
+ RunTest("");
+}
+
+TEST_F(DescriptionTraitFixture, RoleUnknown) {
+ GetReadingComposerObject(ATSPI_ROLE_UNKNOWN);
+ RunTest("");
+}
+
+TEST_F(DescriptionTraitFixture, EntryOrPasswordTextFocused) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_ENTRY);
+ composer->states = (1ll << ATSPI_STATE_EDITABLE) | (1ll << ATSPI_STATE_FOCUSED);
+ RunTest("IDS_ST_BODY_EDITING_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, EntryOrPasswordTextNotFocused) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_ENTRY);
+ composer->states = (1ll << ATSPI_STATE_EDITABLE);
+ RunTest("IDS_ST_BODY_DOUBLE_TAP_TO_ENTER_TEXT_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, MenuItemNoToolbar) {
+ NewParentObject(ATSPI_ROLE_INVALID);
+ GetReadingComposerObject(ATSPI_ROLE_MENU_ITEM);
+ RunTest("");
+}
+
+TEST_F(DescriptionTraitFixture, MenuItemWithToolbarSelected) {
+ NewParentObject(ATSPI_ROLE_TOOL_BAR);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_MENU_ITEM);
+ composer->is_selected_in_parent = 1;
+ RunTest("IDS_ACCS_BODY_TAB_P1SD_OF_P2SD");
+}
+
+TEST_F(DescriptionTraitFixture, MenuItemWithToolbarNotSelected) {
+ NewParentObject(ATSPI_ROLE_TOOL_BAR);
+ GetReadingComposerObject(ATSPI_ROLE_MENU_ITEM);
+ RunTest("IDS_ACCS_BODY_TAB_P1SD_OF_P2SD , IDS_ACCS_BODY_DOUBLE_TAP_TO_SELECT_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemNoAdditionalRole) {
+ NewParentObject();
+ GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ RunTest("");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemParentIsTreeTableAndNotMultiselectable) {
+ NewParentObject(ATSPI_ROLE_TREE_TABLE);
+ GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ RunTest("IDS_BR_BODY_IMAGE_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemParentIsTreeTableAndMultiselectable) {
+ NewParentObject(ATSPI_ROLE_TREE_TABLE);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->parent_states = (1 << ATSPI_STATE_MULTISELECTABLE);
+ RunTest("IDS_BR_BODY_IMAGE_T_TTSIDS_SCR_BODY_PD_SELECTED_IN_TOTAL_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemNotExpandable) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->states = (1ll << ATSPI_STATE_EXPANDED);
+ composer->child_count = 1;
+ composer->has_checkbox_child = 1;
+ RunTest("IDS_AM_OPT_HEADER_TTS , IDS_SCR_TBOPT_TICKBOX_FOR_ENTIRE_GROUP");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemExpandableAndExpanded) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->states = (1ll << ATSPI_STATE_EXPANDABLE) | (1ll << ATSPI_STATE_EXPANDED);
+ RunTest("IDS_AM_OPT_HEADER_TTS , IDS_TPLATFORM_BODY_EXPANDABLE_LIST , IDS_ACCS_BODY_DOUBLE_TAP_TO_COLLAPSE_THE_LIST_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ListItemExpandableAndNotExpanded) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->states = (1ll << ATSPI_STATE_EXPANDABLE);
+ RunTest("IDS_AM_OPT_HEADER_TTS , IDS_TPLATFORM_BODY_EXPANDABLE_LIST , IDS_ACCS_BODY_DOUBLE_TAP_TO_EXPAND_THE_LIST_T_TTS");
+}
+
+
+TEST_F(DescriptionTraitFixture, ListItemAnimated) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->parent_states = (1ll << ATSPI_STATE_ANIMATED);
+ RunTest("IDS_BR_BODY_DOUBLE_TAP_AND_HOLD_THEN_DRAG_TO_REORDER_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, PopupMenu) {
+ NewParentObject();
+ GetReadingComposerObject(ATSPI_ROLE_POPUP_MENU);
+ RunTest("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, Dialog) {
+ GetReadingComposerObject(ATSPI_ROLE_DIALOG);
+ RunTest("");
+}
+
+TEST_F(DescriptionTraitFixture, DialogWithChildren) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_DIALOG);
+ composer->list_children_count = 1;
+ RunTest("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ComboBoxOrGlassPane) {
+ GetReadingComposerObject(ATSPI_ROLE_COMBO_BOX);
+ RunTest("IDS_ST_BODY_DOUBLE_TAP_TO_OPEN_THE_MENU_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, CheckBoxOrRadioButton) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_RADIO_BUTTON);
+ composer->states = (1ll << ATSPI_STATE_EDITABLE);
+ RunTest("IDS_ACCS_BODY_DOUBLE_TAP_TO_EDIT_T_TTS");
+}
+
+TEST_F(DescriptionTraitFixture, ProgressBar) {
+ GetReadingComposerObject(ATSPI_ROLE_PROGRESS_BAR);
+ RunTest("IDS_ACCS_TBBODY_IN_PROGRESS");
+}
+
+TEST_F(DescriptionTraitFixture, Slider) {
+ EXPECT_FUNCTION_CALL(m_get_accuracy, (_,_)).WillOnce(Return(1));
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_SLIDER);
+ composer->states = (1ll << ATSPI_STATE_ENABLED);
+ RunTest("IDS_GCTS_OPT_P1SS_PERCENT_TTS , IDS_TPLATFORM_BODY_FLICK_UP_AND_DOWN_TO_ADJUST_THE_POSITION_T_TTS");
+}
+
+/******************* generate_role_trait *******************/
+
+class RoleTraitFixture : public ReadingMaterialTraitFixture {
+public:
+ void RunTest(const char *string) {
+ std::unique_ptr<char, std::function<void(void*)>>
+ ret(generate_role_trait(m_composer.get()), free);
+ EXPECT_STREQ(ret.get(), string);
+ }
+};
+
+TEST_F(RoleTraitFixture, InvalidRoleNoRoleName) {
+ GetReadingComposerObject(ATSPI_ROLE_INVALID);
+ RunTest("");
+}
+
+TEST_F(RoleTraitFixture, InvalidRoleWithRoleName) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_ACCELERATOR_LABEL);
+ const char *random = "1lkj45zx0c9v8";
+ composer->localized_role_name = const_cast<char*>(random);
+ RunTest(random);
+}
+
+TEST_F(RoleTraitFixture, EntryOrPasswordTextNoParent) {
+ GetReadingComposerObject(ATSPI_ROLE_PASSWORD_TEXT);
+ RunTest("IDS_TPLATFORM_BODY_EDIT_FIELD_M_NOUN_T_TTS");
+}
+
+TEST_F(RoleTraitFixture, FocusedEntryOrPasswordTextWithParentButton) {
+ NewParentObject(ATSPI_ROLE_SPIN_BUTTON);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_PASSWORD_TEXT);
+ composer->states = (1ll << ATSPI_STATE_FOCUSED);
+ RunTest("");
+}
+
+TEST_F(RoleTraitFixture, ComboBox) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_COMBO_BOX);
+ composer->child_count = 2;
+ RunTest("IDS_ACCS_BODY_DROPDOWN_LIST_TTS IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS");
+}
+
+TEST_F(RoleTraitFixture, GlassPane) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_GLASS_PANE);
+ composer->child_count = 2;
+ RunTest("IDS_ACCS_BODY_DROPDOWN_LIST_TTS IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS");
+}
+
+TEST_F(RoleTraitFixture, ListItemParentNotAnimated) {
+ NewParentObject();
+ GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ RunTest("");
+}
+
+TEST_F(RoleTraitFixture, ListItemParentIsAnimated) {
+ NewParentObject();
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->parent_states = (1ll << ATSPI_STATE_ANIMATED);
+ RunTest("IDS_GALLERY_OPT_REORDER , IDS_ACCS_BODY_BUTTON_TTS");
+}
+
+TEST_F(RoleTraitFixture, PushButton) {
+ GetReadingComposerObject(ATSPI_ROLE_PUSH_BUTTON);
+ RunTest("IDS_ACCS_BODY_BUTTON_TTS");
+}
+
+TEST_F(RoleTraitFixture, ProgressBarZeroValue) {
+ GetReadingComposerObject(ATSPI_ROLE_PROGRESS_BAR);
+ RunTest("");
+}
+
+TEST_F(RoleTraitFixture, ProgressBarPositiveCurrentValue) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_PROGRESS_BAR);
+ composer->value = 1.0;
+ RunTest("IDS_GCTS_OPT_P1SS_PERCENT_TTS");
+}
+
+TEST_F(RoleTraitFixture, Slider) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_SLIDER);
+ const char *random = ";8429hasfd";
+ composer->localized_role_name = const_cast<char*>(random);
+ RunTest(random);
+}
+
+/******************* generate_state_traits *******************/
+
+class StateTraitFixture : public ReadingMaterialTraitFixture {
+public:
+ void RunTest(const char *string) {
+ std::unique_ptr<char, std::function<void(void*)>>
+ ret(generate_state_trait(m_composer.get()), free);
+ EXPECT_STREQ(ret.get(), string);
+ }
+};
+
+TEST_F(StateTraitFixture, InvalidRole) {
+ GetReadingComposerObject();
+ RunTest("");
+}
+
+TEST_F(StateTraitFixture, ListItemParentIsNotTreeTable) {
+ NewParentObject(ATSPI_ROLE_INVALID);
+ GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ RunTest("");
+}
+
+TEST_F(StateTraitFixture, ListItemParentIsTreeTableNoSelected) {
+ NewParentObject(ATSPI_ROLE_TREE_TABLE);
+ GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ RunTest("");
+}
+
+TEST_F(StateTraitFixture, ListItemParentIsTreeTableIsSelected) {
+ NewParentObject(ATSPI_ROLE_TREE_TABLE);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_LIST_ITEM);
+ composer->states = (1ll << ATSPI_STATE_SELECTED);
+ RunTest("IDS_ACCS_BODY_SELECTED_TTS");
+}
+
+TEST_F(StateTraitFixture, CheckBoxOrRadioButtonNotChecked) {
+ NewParentObject(ATSPI_ROLE_INVALID);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_CHECK_BOX);
+ composer->states = (1ll << ATSPI_STATE_EDITABLE);
+ RunTest("");
+}
+
+TEST_F(StateTraitFixture, CheckBoxOrRadioButtonChecked) {
+ NewParentObject(ATSPI_ROLE_INVALID);
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_CHECK_BOX);
+ composer->states = (1ll << ATSPI_STATE_CHECKED);
+ RunTest("IDS_ACCS_BODY_SELECTED_TTS");
+}
+
+TEST_F(StateTraitFixture, CheckBoxOrRadioButtonParentIsColorChooser) {
+ NewParentObject(ATSPI_ROLE_COLOR_CHOOSER);
+ GetReadingComposerObject(ATSPI_ROLE_CHECK_BOX);
+ RunTest("");
+}
+
+TEST_F(StateTraitFixture, CheckBoxOrRadioButtonParentIsNotColorChooser) {
+ NewParentObject();
+ GetReadingComposerObject(ATSPI_ROLE_CHECK_BOX);
+ RunTest("IDS_ACCS_OPT_NOT_SELECTED_TTS");
+}
+
+TEST_F(StateTraitFixture, ToggleButtonChecked) {
+ auto composer = GetReadingComposerObject(ATSPI_ROLE_TOGGLE_BUTTON);
+ composer->states = (1ll << ATSPI_STATE_CHECKED);
+ RunTest("IDS_MSG_BODY_ON_T_TTS");
+}
+
+TEST_F(StateTraitFixture, ToggleButtonNotChecked) {
+ GetReadingComposerObject(ATSPI_ROLE_TOGGLE_BUTTON);
+ RunTest("IDS_STORYALBUM_BODY_OFF_T_TTS");
+}
+
+TEST_F(StateTraitFixture, RadioMenuItem) {
+ GetReadingComposerObject(ATSPI_ROLE_RADIO_MENU_ITEM);
+ RunTest("IDS_ACCS_BODY_SELECTED_TTS");
+}
+
+/******************* reading_composer_data_get *******************/
+
+struct DataGetFixture : public ::testing::Test {
+ DEFINE_MOCKING(atspi_accessible_get_reading_material);
+};
+
+TEST(ApiDataGet, NullParam) {
+ EXPECT_EQ(reading_composer_data_get(nullptr), nullptr);
+}
+
+TEST_F(DataGetFixture, CallApi) {
+ AtspiAccessible *obj = (AtspiAccessible*)0xDEADBEEF;
+ ReadingComposerData *ret = (ReadingComposerData*)0xBEDDCAFE;
+ EXPECT_FUNCTION_CALL(m_atspi_accessible_get_reading_material, (obj, NULL)).WillOnce(Return(ret));
+ EXPECT_EQ(reading_composer_data_get(obj), ret);
+}
+
+/******************* reading_composer_description_get *******************/
+
+TEST(ApiDescGet, NullParam) {
+ EXPECT_EQ(reading_composer_description_get(nullptr), nullptr);
+}
+
+/******************* reading_composer_extended_description_get *******************/
+
+TEST(ApiExtendedDescGet, NullParam) {
+ EXPECT_EQ(reading_composer_extended_description_get(nullptr), nullptr);
+}
+
+/******************* reading_composer_data_free *******************/
+
+TEST(ApiDataFree, NullParam) {
+ ASSERT_EXIT((reading_composer_data_free(nullptr),exit(0)), ::testing::ExitedWithCode(0), ".*");
+}
+
}
#include <cmock/cmock.h>
+extern "C" void add_slider_description(Eina_Strbuf * buf, AtspiAccessibleReadingMaterial * rm);
+extern "C" void display_info_about_object(AtspiAccessibleReadingMaterial * rm);
+extern "C" char * generate_description_from_relation_object(AtspiAccessibleReadingMaterial * rm);
+extern "C" char * generate_description_trait(AtspiAccessibleReadingMaterial * rm);
+extern "C" char * generate_role_trait(AtspiAccessibleReadingMaterial * rm);
+extern "C" char * generate_state_trait(AtspiAccessibleReadingMaterial * rm);
+extern "C" unsigned short reading_composer_reading_attribute_get(AtspiAccessibleReadingMaterial * rm);
+extern "C" void reading_composer_reading_material_free(AtspiAccessibleReadingMaterial * rm);
+DECLARE_FUNCTION_MOCK2(mock_add_slider_description, add_slider_description, void(Eina_Strbuf *, AtspiAccessibleReadingMaterial *));
DECLARE_FUNCTION_MOCK2(mock_cycle_detection_check_if_in_cycle, cycle_detection_check_if_in_cycle, Eina_Bool(cycle_detection_data *, const void *));
DECLARE_FUNCTION_MOCK2(mock_cycle_detection_initialize, cycle_detection_initialize, void(cycle_detection_data *, const void *));
+DECLARE_FUNCTION_MOCK1(mock_display_info_about_object, display_info_about_object, void(AtspiAccessibleReadingMaterial *));
+DECLARE_FUNCTION_MOCK1(mock_generate_description_from_relation_object, generate_description_from_relation_object, char *(AtspiAccessibleReadingMaterial *));
+DECLARE_FUNCTION_MOCK1(mock_generate_description_trait, generate_description_trait, char *(AtspiAccessibleReadingMaterial *));
+DECLARE_FUNCTION_MOCK1(mock_generate_role_trait, generate_role_trait, char *(AtspiAccessibleReadingMaterial *));
+DECLARE_FUNCTION_MOCK1(mock_generate_state_trait, generate_state_trait, char *(AtspiAccessibleReadingMaterial *));
DECLARE_FUNCTION_MOCK2(mock_get_accuracy, get_accuracy, int(double, int));
DECLARE_FUNCTION_MOCK1(mock_get_objects_attributes, get_objects_attributes, unsigned short(AtspiAccessible *));
DECLARE_FUNCTION_MOCK1(mock_object_has_defunct_state, object_has_defunct_state, Eina_Bool(AtspiAccessible *));
DECLARE_FUNCTION_MOCK1(mock_reading_composer_description_get, reading_composer_description_get, char *(ReadingComposerData *));
DECLARE_FUNCTION_MOCK1(mock_reading_composer_extended_description_get, reading_composer_extended_description_get, char *(ReadingComposerData *));
DECLARE_FUNCTION_MOCK1(mock_reading_composer_name_get, reading_composer_name_get, char *(AtspiAccessible *));
+DECLARE_FUNCTION_MOCK1(mock_reading_composer_reading_attribute_get, reading_composer_reading_attribute_get, unsigned short(AtspiAccessibleReadingMaterial *));
+DECLARE_FUNCTION_MOCK1(mock_reading_composer_reading_material_free, reading_composer_reading_material_free, void(AtspiAccessibleReadingMaterial *));
DECLARE_FUNCTION_MOCK0(mock_utils_a11y_bus_connection_get, utils_a11y_bus_connection_get, Eldbus_Connection *());
DECLARE_FUNCTION_MOCK1(mock_utils_a11y_bus_connection_set, utils_a11y_bus_connection_set, void(Eldbus_Connection *));
DECLARE_FUNCTION_MOCK1(mock_utils_enum_to_string, utils_enum_to_string, const char *(Gesture));