@@ -3,6 +3,7 @@ package com.github.jengelman.gradle.plugins.shadow.relocation
33import assertk.assertThat
44import assertk.assertions.isEqualTo
55import com.github.jengelman.gradle.plugins.shadow.internal.mapName
6+ import org.junit.jupiter.api.Test
67import org.junit.jupiter.params.ParameterizedTest
78import org.junit.jupiter.params.provider.Arguments
89import org.junit.jupiter.params.provider.MethodSource
@@ -15,6 +16,29 @@ class RelocatorsTest {
1516 assertThat(relocators.mapName(input)).isEqualTo(expected)
1617 }
1718
19+ /* *
20+ * Verifies that a relocator with [Relocator.skipStringConstants] = true is skipped individually
21+ * when mapping literals, rather than short-circuiting the entire set of relocators.
22+ */
23+ @Test
24+ fun skipStringConstantsIsPerRelocator () {
25+ val skippingRelocator =
26+ SimpleRelocator (" org.package" , " shadow.org.package" , skipStringConstants = true )
27+ val normalRelocator = SimpleRelocator (" com.example" , " shadow.com.example" )
28+ val relocators = linkedSetOf(skippingRelocator, normalRelocator)
29+
30+ // The skipping relocator cannot match "com.example.Foo", but the normal one can.
31+ // Ensure the normal relocator is still applied even though the first one has skipStringConstants.
32+ assertThat(relocators.mapName(" com.example.Foo" , mapLiterals = true ))
33+ .isEqualTo(" shadow.com.example.Foo" )
34+ // When mapLiterals=true, the skipping relocator should not apply to its own pattern.
35+ assertThat(relocators.mapName(" org.package.Bar" , mapLiterals = true ))
36+ .isEqualTo(" org.package.Bar" )
37+ // When mapLiterals=false, the skipping relocator applies normally.
38+ assertThat(relocators.mapName(" org.package.Bar" , mapLiterals = false ))
39+ .isEqualTo(" shadow.org.package.Bar" )
40+ }
41+
1842 private companion object {
1943 val primitiveTypes = setOf (' B' , ' C' , ' D' , ' F' , ' I' , ' J' , ' S' , ' Z' )
2044
0 commit comments