sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   13 ++++++
 sw/qa/core/accessibilitycheck/data/ParagraphTest.odt     |binary
 sw/source/core/access/AccessibilityCheck.cxx             |   29 +++++++++++++++
 3 files changed, 42 insertions(+)

New commits:
commit b45867766184ad1200df4183dab537fac9e83ea2
Author:     offtkp <parisop...@gmail.com>
AuthorDate: Fri Oct 7 17:13:53 2022 +0300
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Oct 13 09:20:17 2022 +0200

    a11y: Add char attr a11y check for entire paragraph
    
    Accessibility check would not work if the entire paragraph had
    character attributes, because then it wouldn't have individual text
    hints
    
    Now check if there's a SwAttrSet and if it has the a11y char attributes
    that an issue should be generated for
    
    Also add test for this specific case
    
    Change-Id: Iee035eecd25ed130e78ed27041c3e56ea988ecc5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141078
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 169a3fa03191..d7ad7674c13b 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -46,6 +46,19 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testTableSplitMergeAndAltText)
     CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::NO_ALT_SHAPE, 
aIssues[6]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckParagraphIssues)
+{
+    // Tests whether formatting issues are detected when the whole paragraph 
has them instead of
+    // some text inside the paragraph
+    SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "ParagraphTest.odt");
+    CPPUNIT_ASSERT(pDoc);
+    sw::AccessibilityCheck aCheck(pDoc);
+    aCheck.check();
+    auto& aIssues = aCheck.getIssueCollection().getIssues();
+    CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+    CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, 
aIssues[0]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt 
b/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt
new file mode 100644
index 000000000000..766ecd0b4e2e
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 50a37dc00bef..f6c6ec7b43d5 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -551,6 +551,35 @@ public:
                 }
             }
         }
+        else if (pTextNode->HasSwAttrSet())
+        {
+            // Paragraph doesn't have hints but the entire paragraph might 
have char attributes
+            auto& aSwAttrSet = pTextNode->GetSwAttrSet();
+            auto nParagraphLength = pTextNode->GetText().getLength();
+            if (nParagraphLength == 0)
+                return;
+            if (aSwAttrSet.HasItem(RES_CHRATR_WEIGHT) || 
aSwAttrSet.HasItem(RES_CHRATR_CJK_WEIGHT)
+                || aSwAttrSet.HasItem(RES_CHRATR_CTL_WEIGHT)
+                || aSwAttrSet.HasItem(RES_CHRATR_POSTURE)
+                || aSwAttrSet.HasItem(RES_CHRATR_CJK_POSTURE)
+                || aSwAttrSet.HasItem(RES_CHRATR_CTL_POSTURE)
+                || aSwAttrSet.HasItem(RES_CHRATR_SHADOWED) || 
aSwAttrSet.HasItem(RES_CHRATR_COLOR)
+                || aSwAttrSet.HasItem(RES_CHRATR_EMPHASIS_MARK)
+                || aSwAttrSet.HasItem(RES_CHRATR_UNDERLINE)
+                || aSwAttrSet.HasItem(RES_CHRATR_OVERLINE)
+                || aSwAttrSet.HasItem(RES_CHRATR_CROSSEDOUT)
+                || aSwAttrSet.HasItem(RES_CHRATR_RELIEF) || 
aSwAttrSet.HasItem(RES_CHRATR_CONTOUR))
+            {
+                auto pIssue
+                    = lclAddIssue(m_rIssueCollection, 
SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING),
+                                  sfx::AccessibilityIssueID::TEXT_FORMATTING);
+                pIssue->setIssueObject(IssueObject::TEXT);
+                pIssue->setNode(pTextNode);
+                SwDoc& rDocument = pTextNode->GetDoc();
+                pIssue->setDoc(rDocument);
+                pIssue->setEnd(nParagraphLength);
+            }
+        }
     }
 };
 

Reply via email to