aboutsummaryrefslogtreecommitdiffstats
path: root/publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt
diff options
context:
space:
mode:
Diffstat (limited to 'publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt')
-rw-r--r--publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt71
1 files changed, 71 insertions, 0 deletions
diff --git a/publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt b/publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt
new file mode 100644
index 00000000..2c2351f7
--- /dev/null
+++ b/publication-validator/src/test/kotlin/kotlinx/coroutines/tools/NpmPublicationValidator.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2016-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.coroutines.validator
+
+import com.google.gson.*
+import org.apache.commons.compress.archivers.tar.*
+import org.junit.*
+import org.junit.Assert.*
+import java.io.*
+import java.util.zip.*
+
+class NpmPublicationValidator {
+ private val VERSION = System.getenv("DeployVersion")
+ private val BUILD_DIR = System.getenv("teamcity.build.checkoutDir")
+ private val NPM_ARTIFACT = "$BUILD_DIR/kotlinx-coroutines-core/build/npm/kotlinx-coroutines-core-$VERSION.tgz"
+
+ @Test
+ fun testPackageJson() {
+ println("Checking dependencies of $NPM_ARTIFACT")
+ val visited = visit("package.json") {
+ val json = JsonParser().parse(content()).asJsonObject
+ assertEquals(VERSION, json["version"].asString)
+ assertNull(json["dependencies"])
+ val peerDependencies = json["peerDependencies"].asJsonObject
+ assertEquals(1, peerDependencies.size())
+ assertNotNull(peerDependencies["kotlin"])
+ }
+ assertEquals(1, visited)
+ }
+
+ @Test
+ fun testAtomicfuDependencies() {
+ println("Checking contents of $NPM_ARTIFACT")
+ val visited = visit(".js") {
+ val content = content()
+ assertFalse(content, content.contains("atomicfu", true))
+ assertFalse(content, content.contains("atomicint", true))
+ assertFalse(content, content.contains("atomicboolean", true))
+ }
+ assertEquals(2, visited)
+ }
+
+ private fun InputStream.content(): String {
+ val bais = ByteArrayOutputStream()
+ val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
+ var read = read(buffer, 0, DEFAULT_BUFFER_SIZE)
+ while (read >= 0) {
+ bais.write(buffer, 0, read)
+ read = read(buffer, 0, DEFAULT_BUFFER_SIZE)
+ }
+ return bais.toString()
+ }
+
+ private inline fun visit(fileSuffix: String, block: InputStream.(entry: TarArchiveEntry) -> Unit): Int {
+ var visited = 0
+ TarArchiveInputStream(GZIPInputStream(FileInputStream(NPM_ARTIFACT))).use { tais ->
+ var entry: TarArchiveEntry? = tais.nextTarEntry ?: return 0
+ do {
+ if (entry!!.name.endsWith(fileSuffix)) {
+ ++visited
+ tais.block(entry)
+ }
+ entry = tais.nextTarEntry
+ } while (entry != null)
+
+ return visited
+ }
+ }
+}