diff --git a/platform/platform-impl/src/com/intellij/internal/ui/sandbox/UISandboxDialog.kt b/platform/platform-impl/src/com/intellij/internal/ui/sandbox/UISandboxDialog.kt index d7ee49d4eb37..eeb9ea5afcaf 100644 --- a/platform/platform-impl/src/com/intellij/internal/ui/sandbox/UISandboxDialog.kt +++ b/platform/platform-impl/src/com/intellij/internal/ui/sandbox/UISandboxDialog.kt @@ -15,6 +15,7 @@ import com.intellij.internal.ui.sandbox.dsl.listCellRenderer.LcrSeparatorPanel import com.intellij.internal.ui.sandbox.dsl.validation.CrossValidationPanel import com.intellij.internal.ui.sandbox.dsl.validation.ValidationPanel import com.intellij.internal.ui.sandbox.dsl.validation.ValidationRefactoringPanel +import com.intellij.internal.ui.sandbox.tests.accessibility.AccessibilityFailedInspectionsPanel import com.intellij.internal.ui.sandbox.tests.components.JBTextAreaTestPanel import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project @@ -99,7 +100,11 @@ internal class UISandboxDialog(private val project: Project?) : DialogWrapper(pr )), Group("Tests", children = listOf( - Group("Components", children = listOf(JBTextAreaTestPanel()))) + Group("Components", children = listOf(JBTextAreaTestPanel())), + Group("Accessibility", children = listOf( + AccessibilityFailedInspectionsPanel()) + ) + ) ) ) diff --git a/platform/platform-impl/src/com/intellij/internal/ui/sandbox/tests/accessibility/AccessibilityFailedInspections.kt b/platform/platform-impl/src/com/intellij/internal/ui/sandbox/tests/accessibility/AccessibilityFailedInspections.kt new file mode 100644 index 000000000000..6ef40549aaae --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/ui/sandbox/tests/accessibility/AccessibilityFailedInspections.kt @@ -0,0 +1,124 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.internal.ui.sandbox.tests.accessibility + +import com.intellij.internal.ui.sandbox.UISandboxPanel +import com.intellij.openapi.Disposable +import com.intellij.ui.dsl.builder.panel +import javax.accessibility.* +import javax.swing.* + +internal class AccessibilityFailedInspectionsPanel : UISandboxPanel { + override val title: String = "Failed inspections" + override fun createContent(disposable: Disposable): JComponent { + return panel { + row { + text("This page shows examples of components with accessibility problems and is intended to test the accessibility audit feature in the UI Inspector.") + } + group("AccessibleStateSetContainsFocusableInspection") { + row { + // not focusable + button("Not focusable") {} + .accessibleName("Button") + .accessibleDescription("Button description") + .applyToComponent { + isEnabled = false + isFocusable = false + accessibleContext.accessibleDescription = "not focusable" + } + button("Focusable") {} + } + } + group("AccessibleActionNotNullInspection") { + row { + // null accessibleAction + val component = object : JCheckBox() { + override fun getAccessibleContext(): AccessibleContext { + return object : AccessibleJComponent() { + override fun getAccessibleAction(): AccessibleAction? { + return null + } + } + } + } + component.accessibleContext.accessibleDescription = "Checkbox description" + cell(component) + + checkBox("Normal check box") + } + } + group("AccessibleValueNotNullInspection") { + row { + // stateSet is full and name is null + val bar = object : JProgressBar() { + override fun getAccessibleContext(): AccessibleContext { + return object : AccessibleJComponent() { + override fun getAccessibleRole(): AccessibleRole { + return AccessibleRole.PROGRESS_BAR + } + + override fun getAccessibleValue(): AccessibleValue? { + return null + } + + } + } + } + bar.accessibleContext.accessibleDescription = "checkbox role and action null" + cell(bar) + + val label = JLabel("Normal progress bar") + val progressBar = JProgressBar() + label.labelFor = progressBar + cell(progressBar) + cell(label) + } + } + group("AccessibleTextNotNullInspection") { + row { + //password role and text null + val password = object : JPasswordField() { + override fun getAccessibleContext(): AccessibleContext { + return object : AccessibleJPasswordField() { + + override fun getAccessibleText(): AccessibleText? { + return null + } + } + } + } + password.accessibleContext.accessibleDescription = "password role and text null" + cell(password) + + val label = JLabel("Normal password field") + val passwordField = JPasswordField() + label.labelFor = passwordField + cell(passwordField) + cell(label) + } + } + group("AccessibleNameNotEmptyForFocusableComponentsInspection") { + row { + //stateSet is full and name is null + val button = object : JButton() { + + override fun getAccessibleContext(): AccessibleContext { + return object : AccessibleJComponent() { + override fun getAccessibleName(): String? { + return null + } + } + } + } + button.isEnabled = true + button.isFocusable = true + button.accessibleContext.accessibleDescription = "stateSet is full and name is null" + cell(button) + + button("Normal button") {} + } + } + + } + } + +} \ No newline at end of file