You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

115 lines
4.3 KiB

/*
* Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers.
* Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file.
*/
package org.jetbrains.compose.resources
import org.jetbrains.compose.resources.DensityQualifier.*
import org.jetbrains.compose.resources.ThemeQualifier.DARK
import org.jetbrains.compose.resources.ThemeQualifier.LIGHT
import kotlin.test.*
@OptIn(ExperimentalResourceApi::class, InternalResourceApi::class)
class ResourceTest {
@Test
fun testResourceEquals() {
assertEquals(DrawableResource("a"), DrawableResource("a"))
}
@Test
fun testResourceNotEquals() {
assertNotEquals(DrawableResource("a"), DrawableResource("b"))
}
@Test
fun testGetPathByEnvironment() {
val resource = DrawableResource(
id = "ImageResource:test",
items = setOf(
ResourceItem(setOf(), "default", -1, -1),
ResourceItem(setOf(LanguageQualifier("en")), "en", -1, -1),
ResourceItem(setOf(LanguageQualifier("en"), RegionQualifier("US"), XHDPI), "en-rUS-xhdpi", -1, -1),
ResourceItem(setOf(LanguageQualifier("de"), RegionQualifier("US")), "de-rUS", -1, -1),
ResourceItem(setOf(LanguageQualifier("fr"), LIGHT), "fr-light", -1, -1),
ResourceItem(setOf(DARK), "dark", -1, -1),
)
)
fun env(lang: String, reg: String, theme: ThemeQualifier, density: DensityQualifier) = ResourceEnvironment(
language = LanguageQualifier(lang),
region = RegionQualifier(reg),
theme = theme,
density = density
)
assertEquals(
"en-rUS-xhdpi",
resource.getResourceItemByEnvironment(env("en", "US", DARK, XXHDPI)).path
)
assertEquals(
"en",
resource.getResourceItemByEnvironment(env("en", "IN", LIGHT, LDPI)).path
)
assertEquals(
"de-rUS",
resource.getResourceItemByEnvironment(env("de", "US", LIGHT, LDPI)).path
)
assertEquals(
"default",
resource.getResourceItemByEnvironment(env("de", "", LIGHT, LDPI)).path
)
assertEquals(
"default",
resource.getResourceItemByEnvironment(env("de", "IN", LIGHT, LDPI)).path
)
assertEquals(
"default",
resource.getResourceItemByEnvironment(env("ch", "", LIGHT, MDPI)).path
)
assertEquals(
"dark",
resource.getResourceItemByEnvironment(env("ch", "", DARK, MDPI)).path
)
assertEquals(
"fr-light",
resource.getResourceItemByEnvironment(env("fr", "", DARK, MDPI)).path
)
assertEquals(
"fr-light",
resource.getResourceItemByEnvironment(env("fr", "IN", LIGHT, MDPI)).path
)
assertEquals(
"default",
resource.getResourceItemByEnvironment(env("ru", "US", LIGHT, XHDPI)).path
)
assertEquals(
"dark",
resource.getResourceItemByEnvironment(env("ru", "US", DARK, XHDPI)).path
)
val resourceWithNoDefault = DrawableResource(
id = "ImageResource:test2",
items = setOf(
ResourceItem(setOf(LanguageQualifier("en")), "en", -1, -1),
ResourceItem(setOf(LanguageQualifier("fr"), LIGHT), "fr-light", -1, -1)
)
)
assertFailsWith<IllegalStateException> {
resourceWithNoDefault.getResourceItemByEnvironment(env("ru", "US", DARK, XHDPI))
}.message.let { msg ->
assertEquals("Resource with ID='ImageResource:test2' not found", msg)
}
val resourceWithFewFiles = DrawableResource(
id = "ImageResource:test3",
items = setOf(
ResourceItem(setOf(LanguageQualifier("en")), "en1", -1, -1),
ResourceItem(setOf(LanguageQualifier("en")), "en2", -1, -1)
)
)
assertFailsWith<IllegalStateException> {
resourceWithFewFiles.getResourceItemByEnvironment(env("en", "US", DARK, XHDPI))
}.message.let { msg ->
assertEquals("Resource with ID='ImageResource:test3' has more than one file: en1, en2", msg)
}
}
}