diff --git a/compiler/util-io/build.gradle.kts b/compiler/util-io/build.gradle.kts
index 1389a36..2c64531 100644
--- a/compiler/util-io/build.gradle.kts
+++ b/compiler/util-io/build.gradle.kts
@@ -7,11 +7,12 @@
 
 dependencies {
     compile(kotlinStdlib())
+    testImplementation(commonDep("junit:junit"))
 }
 
 sourceSets {
     "main" { projectDefault() }
-    "test" { none() }
+    "test" { projectDefault() }
 }
 
 publish()
diff --git a/compiler/util-io/test/org/jetbrains/kotlin/konan/properties/ResolvablePropertiesTests.kt b/compiler/util-io/test/org/jetbrains/kotlin/konan/properties/ResolvablePropertiesTests.kt
new file mode 100644
index 0000000..bad1a57
--- /dev/null
+++ b/compiler/util-io/test/org/jetbrains/kotlin/konan/properties/ResolvablePropertiesTests.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.konan.properties
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class ResolvablePropertiesTests {
+
+    @Test
+    fun `trivial symbol resolve`() {
+        val props = propertiesOf(
+            "key1" to "value1",
+            "key2" to "\$key1"
+        )
+        assertEquals("value1", props.resolvablePropertyString("key2"))
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun `trivial circular dependency`() {
+        val props = propertiesOf(
+            "key1" to "\$key2",
+            "key2" to "\$key1"
+        )
+        props.resolvablePropertyString("key2")
+    }
+
+    @Test
+    fun `list and string should have the same behavior`() {
+        val props = propertiesOf(
+            "k1" to "v1",
+            "k2" to "v2 \$k1"
+        )
+        assertEquals("v2 v1", props.resolvablePropertyString("k2"))
+        assertEquals("v2 v1", props.resolvablePropertyList("k2").joinToString(separator = " "))
+    }
+
+    @Test
+    fun `list expansion`() {
+        val props = propertiesOf(
+            "k1" to "v1 v2",
+            "k2" to "\$k1 v3",
+            "k3" to "\$k2"
+        )
+        assertEquals(listOf("v1", "v2", "v3"), props.resolvablePropertyList("k3"))
+    }
+
+    @Test
+    fun `double list expansion`() {
+        val props = propertiesOf(
+            "k1" to "v1 v2",
+            "k2" to "\$k1 \$k1"
+        )
+        assertEquals(listOf("v1", "v2", "v1", "v2"), props.resolvablePropertyList("k2"))
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun `self-reference`() {
+        val props = propertiesOf(
+            "k1" to "\$k1"
+        )
+        props.resolvablePropertyString("k1")
+    }
+
+    companion object {
+        private fun propertiesOf(vararg pairs: Pair<String, Any>): Properties =
+            Properties().also {
+                it.putAll(mapOf(*pairs))
+            }
+    }
+}
\ No newline at end of file
