/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/ * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::accessibility; using namespace css::lang; class AccessibleRelationSet : public UnoApiTest { public: AccessibleRelationSet() : UnoApiTest("") { } void init(uno::Reference& para1, uno::Reference& para2, uno::Reference& para3); void contents_flows_to_and_from(); CPPUNIT_TEST_SUITE(AccessibleRelationSet); CPPUNIT_TEST(contents_flows_to_and_from); CPPUNIT_TEST_SUITE_END(); }; void AccessibleRelationSet::init(uno::Reference& para1, uno::Reference& para2, uno::Reference& para3) { mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); uno::Reference xTextDoc(mxComponent, uno::UNO_QUERY); css::uno::Reference oText(xTextDoc->getText(), uno::UNO_SET_THROW); css::uno::Reference oCursor = oText->createTextCursor(); for (int i = 0; i < 5; i++) { oText->insertString(oCursor, "Paragraph Number: " + OUString::number(i), false); oText->insertControlCharacter(oCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); } css::uno::Reference aModel(xTextDoc, uno::UNO_QUERY_THROW); css::uno::Reference xController(aModel->getCurrentController()); css::uno::Reference ctx; uno::Reference xFrame(xController->getFrame(), uno::UNO_SET_THROW); uno::Reference xWindow(xFrame->getComponentWindow(), uno::UNO_SET_THROW); css::uno::Reference xRoot(xWindow, uno::UNO_QUERY_THROW); ctx = AccessibilityTools::getAccessibleObjectForRole(xRoot, AccessibleRole::DOCUMENT_TEXT); CPPUNIT_ASSERT_MESSAGE("Couldn't get AccessibleRole.DOCUMENT_TEXT object", ctx.is()); para1 = ctx->getAccessibleChild(0); para2 = ctx->getAccessibleChild(1); para3 = ctx->getAccessibleChild(2); } void AccessibleRelationSet::contents_flows_to_and_from() { //contents_flows_to css::uno::Reference para1; css::uno::Reference para2; css::uno::Reference para3; init(para1, para2, para3); css::uno::Reference oObj(para1, uno::UNO_QUERY_THROW); css::uno::Reference set = oObj->getAccessibleRelationSet(); css::uno::Reference atarget; if (set.is()) { CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct count of relations", sal_Int32(1), set->getRelationCount()); sal_Int16 firstrelation = set->getRelation(0).RelationType; css::uno::Reference adummy( set->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); atarget = adummy; CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 0", AccessibilityTools::getRelationTypeName( accessibility::AccessibleRelationType::CONTENT_FLOWS_TO), AccessibilityTools::getRelationTypeName(firstrelation)); css::uno::Reference paraText2(para2, uno::UNO_QUERY_THROW); CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atarget->getText(), paraText2->getText()); } //contents_flows_from() css::uno::Reference oObj2(para2, uno::UNO_QUERY_THROW); css::uno::Reference set2 = oObj2->getAccessibleRelationSet(); sal_Int16 relationtypes[2] = { accessibility::AccessibleRelationType::INVALID, accessibility::AccessibleRelationType::INVALID }; css::uno::Reference atargets[2]; if (set2.is()) { CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct count of relations", sal_Int32(2), set2->getRelationCount()); sal_Int16 tmprelation = set2->getRelation(0).RelationType; if (tmprelation == accessibility::AccessibleRelationType::CONTENT_FLOWS_FROM) { css::uno::Reference adummy( set2->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); atargets[0] = adummy; relationtypes[0] = tmprelation; } else if (tmprelation == accessibility::AccessibleRelationType::CONTENT_FLOWS_TO) { css::uno::Reference adummy( set2->getRelation(0).TargetSet[0], uno::UNO_QUERY_THROW); atargets[1] = adummy; relationtypes[1] = tmprelation; } else { CPPUNIT_FAIL("didn't gain correct relation type"); } tmprelation = set2->getRelation(1).RelationType; if (tmprelation == accessibility::AccessibleRelationType::CONTENT_FLOWS_FROM) { css::uno::Reference adummy( set2->getRelation(1).TargetSet[0], uno::UNO_QUERY_THROW); atargets[0] = adummy; relationtypes[0] = tmprelation; } else if (tmprelation == accessibility::AccessibleRelationType::CONTENT_FLOWS_TO) { css::uno::Reference adummy( set2->getRelation(1).TargetSet[0], uno::UNO_QUERY_THROW); atargets[1] = adummy; relationtypes[1] = tmprelation; } else { CPPUNIT_FAIL("didn't gain correct relation type"); } } CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 1", AccessibilityTools::getRelationTypeName( accessibility::AccessibleRelationType::CONTENT_FLOWS_FROM), AccessibilityTools::getRelationTypeName(relationtypes[0])); css::uno::Reference paraText1(para1, uno::UNO_QUERY_THROW); CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atargets[0]->getText(), paraText1->getText()); CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct relation type for paragraph 3", AccessibilityTools::getRelationTypeName( accessibility::AccessibleRelationType::CONTENT_FLOWS_TO), AccessibilityTools::getRelationTypeName(relationtypes[1])); css::uno::Reference paraText3(para3, uno::UNO_QUERY_THROW); CPPUNIT_ASSERT_EQUAL_MESSAGE("didn't gain correct target paragraph", atargets[1]->getText(), paraText3->getText()); } CPPUNIT_TEST_SUITE_REGISTRATION(AccessibleRelationSet); CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */