Skip to content
Draft
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
17 changes: 10 additions & 7 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,20 @@ jobs:
test_on_emulator:
needs: compile
if: ${{ !cancelled() }} # even if compile didn't run (because not on main branch)
name: Instrumented tests
name: Instrumented tests (API ${{ matrix.api-level }})
runs-on: ubuntu-latest
strategy:
matrix:
api-level:
- 24 # Android 7 (minSdk level; not supported by gradle-managed devices)
# - 27 # the lowest supported version by GMD
- 30 # Android 11
- 32 # Android 12L
- 35 # Android 15
env:
apk-dir: lib/apk
fdroid-packages: "at.techbee.jtx org.dmfs.tasks org.tasks"
API_LEVEL: ${{ matrix.api-level }}
steps:
- uses: gradle/actions/setup-gradle@v6
with:
Expand Down Expand Up @@ -117,11 +126,5 @@ jobs:
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: Cache AVD
uses: actions/cache@v5
with:
path: ~/.config/.android/avd
key: avd-${{ hashFiles('lib/build.gradle.kts') }} # gradle-managed devices are defined there

- name: Run device tests
run: ./gradlew virtualCheck
6 changes: 5 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ org.gradle.caching=true
# Android
android.useAndroidX=true
# Dokka
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled

# Automated tests with gradle-managed devices require SDK level 26 by default.
# Can be removed as soon as minSdk is 26.
android.experimental.testOptions.managedDevices.allowOldApiLevelDevices=true
6 changes: 4 additions & 2 deletions lib/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,10 @@ android {
localDevices {
create("virtual") {
device = "Pixel 3"
apiLevel = 33
systemImageSource = "aosp-atd"
// read API level from environment variable, fallback to Android 15 (35)
apiLevel = System.getenv("API_LEVEL")?.toIntOrNull() ?: 35
// ATD images are available since API level 30
systemImageSource = if (apiLevel > 30) "aosp-atd" else "aosp"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,29 @@ package at.bitfire.ical4android

import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import org.junit.Assert
import org.junit.Assert.assertNotNull
import org.junit.Test
import java.time.ZoneId
import java.time.format.TextStyle
import java.util.Locale
import java.util.logging.Logger

class AndroidTimeZonesTest {

private val logger
get() = Logger.getLogger(javaClass.name)

@Test
fun testLoadSystemTimezones() {
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
for (id in ZoneId.getAvailableZoneIds()) {
val name = ZoneId.of(id).getDisplayName(TextStyle.FULL, Locale.US)
val info = try {
tzRegistry.getTimeZone(id)
} catch(e: Exception) {
} catch(_: Exception) {
Assert.fail("Invalid system timezone $name ($id)")
}
if (info == null)
assertNotNull("ical4j can't load system timezone $name ($id)", info)
logger.warning("ical4j can't load system timezone $name ($id)")
}
}

Expand Down
Loading