Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
build/
/captures
.externalNativeBuild
.cxx
local.properties
/.idea/markdown.xml
/.idea/gradle.xml
/.idea/misc.xml
/.idea/misc.xml
.claude/
.idea/
.kotlin/errors/
10 changes: 6 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.android)
}

Expand Down Expand Up @@ -41,10 +39,14 @@ android {
}
}

kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
}
}

dependencies {
implementation(project(":scanner-ui"))
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.composea11yscanner

import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class ComposeA11yScannerApplication : Application()
2 changes: 0 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ plugins {
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.detekt)
}

Expand Down
6 changes: 0 additions & 6 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ activityCompose = "1.9.3"
appStartup = "1.2.0"
kotlin = "2.3.21"
composeBom = "2024.12.01"
hilt = "2.54"
ksp = "2.1.0-1.0.29"
coroutines = "1.10.1"
mockk = "1.13.12"
turbine = "1.2.0"
Expand Down Expand Up @@ -38,8 +36,6 @@ androidx-compose-animation = { group = "androidx.compose.animation", name = "ani
androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" }
androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-android-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" }
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" }
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" }
mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" }
Expand All @@ -52,7 +48,5 @@ android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
paparazzi = { id = "app.cash.paparazzi", version.ref = "paparazzi" }
10 changes: 6 additions & 4 deletions sample/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.hilt)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.android)
}

Expand Down Expand Up @@ -33,6 +31,12 @@ android {
buildFeatures { compose = true }
}

kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
}
}

dependencies {
implementation(project(":scanner-ui"))
implementation(project(":scanner-core"))
Expand All @@ -45,8 +49,6 @@ dependencies {
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.composea11yscanner.sample

import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.unit.Density
import com.composea11yscanner.core.model.ScannerConfig
import com.composea11yscanner.rules.ScannerRules
import com.composea11yscanner.ui.A11yScanner
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test

class FixedScreenAccessibilityTest {

@get:Rule
val composeRule = createComposeRule()

@Test
fun fixedLoginScreen_hasNoScannerIssues() {
assertNoScannerIssues {
FixedLoginScreen()
}
}

@Test
fun fixedFeedScreen_hasNoScannerIssues() {
assertNoScannerIssues {
FixedFeedScreen()
}
}

@Test
fun fixedFormScreen_hasNoScannerIssues() {
assertNoScannerIssues {
FixedFormScreen()
}
}

private fun assertNoScannerIssues(content: @Composable () -> Unit) {
composeRule.setContent {
MaterialTheme {
content()
}
}

composeRule.waitForIdle()

val config = ScannerConfig(enabledRules = ScannerRules.allRuleIds().toSet())
val scanner = A11yScanner(
rules = ScannerRules.buildRules(config, screenDensity = 1f),
density = Density(1f),
)
val result = scanner.scan(composeRule.onRoot(useUnmergedTree = true).fetchSemanticsNode())

assertEquals(
"Expected fixed screen to have zero scanner issues. Issues: ${result.issues}",
0,
result.issues.size,
)
}
}
9 changes: 9 additions & 0 deletions sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@
android:name="a11y_scanner_auto_scan"
android:value="false" />

<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="merge">
<meta-data
android:name="com.composea11yscanner.A11yScannerInitializer"
tools:node="remove" />
</provider>

<activity
android:name=".SampleActivity"
android:exported="true"
Expand Down
Loading
Loading