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.
110 lines
3.8 KiB
110 lines
3.8 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"), |
|
ResourceItem(setOf(LanguageQualifier("en")), "en"), |
|
ResourceItem(setOf(LanguageQualifier("en"), RegionQualifier("US"), XHDPI), "en-rUS-xhdpi"), |
|
ResourceItem(setOf(LanguageQualifier("fr"), LIGHT), "fr-light"), |
|
ResourceItem(setOf(DARK), "dark"), |
|
) |
|
) |
|
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.getPathByEnvironment(env("en", "US", DARK, XXHDPI)) |
|
) |
|
assertEquals( |
|
"en", |
|
resource.getPathByEnvironment(env("en", "IN", LIGHT, LDPI)) |
|
) |
|
assertEquals( |
|
"default", |
|
resource.getPathByEnvironment(env("ch", "", LIGHT, MDPI)) |
|
) |
|
assertEquals( |
|
"dark", |
|
resource.getPathByEnvironment(env("ch", "", DARK, MDPI)) |
|
) |
|
assertEquals( |
|
"fr-light", |
|
resource.getPathByEnvironment(env("fr", "", DARK, MDPI)) |
|
) |
|
assertEquals( |
|
"fr-light", |
|
resource.getPathByEnvironment(env("fr", "IN", LIGHT, MDPI)) |
|
) |
|
assertEquals( |
|
"default", |
|
resource.getPathByEnvironment(env("ru", "US", LIGHT, XHDPI)) |
|
) |
|
assertEquals( |
|
"dark", |
|
resource.getPathByEnvironment(env("ru", "US", DARK, XHDPI)) |
|
) |
|
|
|
val resourceWithNoDefault = DrawableResource( |
|
id = "ImageResource:test2", |
|
items = setOf( |
|
ResourceItem(setOf(LanguageQualifier("en")), "en"), |
|
ResourceItem(setOf(LanguageQualifier("fr"), LIGHT), "fr-light") |
|
) |
|
) |
|
assertFailsWith<IllegalStateException> { |
|
resourceWithNoDefault.getPathByEnvironment(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"), |
|
ResourceItem(setOf(LanguageQualifier("en")), "en2") |
|
) |
|
) |
|
assertFailsWith<IllegalStateException> { |
|
resourceWithFewFiles.getPathByEnvironment(env("en", "US", DARK, XHDPI)) |
|
}.message.let { msg -> |
|
assertEquals("Resource with ID='ImageResource:test3' has more than one file: en1, en2", msg) |
|
} |
|
} |
|
|
|
@Test |
|
fun testEscapedSymbols() { |
|
assertEquals( |
|
"abc \n \\n \t \\t \u1234 \ua45f \\u1234 \\ \\u355g", |
|
handleSpecialCharacters("""abc \n \\n \t \\t \u1234 \ua45f \\u1234 \\ \u355g""") |
|
) |
|
} |
|
}
|
|
|