Browse Source
Co-authored-by: Oleksandr.Karpovich <oleksandr.karpovich@jetbrains.com>pull/4048/head
Oleksandr Karpovich
11 months ago
committed by
GitHub
6 changed files with 94 additions and 15 deletions
@ -0,0 +1,55 @@ |
|||||||
|
// see https://kotlinlang.org/docs/js-project-setup.html#webpack-configuration-file
|
||||||
|
// This file provides karma.config.d configuration to run tests with k/wasm
|
||||||
|
|
||||||
|
const path = require("path"); |
||||||
|
|
||||||
|
config.browserConsoleLogOptions.level = "debug"; |
||||||
|
|
||||||
|
const basePath = config.basePath; |
||||||
|
const projectPath = path.resolve(basePath, "..", "..", "..", ".."); |
||||||
|
const generatedAssetsPath = path.resolve(projectPath, "build", "karma-webpack-out") |
||||||
|
|
||||||
|
const debug = message => console.log(`[karma-config] ${message}`); |
||||||
|
|
||||||
|
debug(`karma basePath: ${basePath}`); |
||||||
|
debug(`karma generatedAssetsPath: ${generatedAssetsPath}`); |
||||||
|
|
||||||
|
config.proxies["/"] = path.resolve(basePath, "kotlin"); |
||||||
|
|
||||||
|
config.files = [ |
||||||
|
{pattern: path.resolve(generatedAssetsPath, "**/*"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.png"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.gif"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.ttf"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.txt"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.json"), included: false, served: true, watched: false}, |
||||||
|
{pattern: path.resolve(basePath, "kotlin", "**/*.xml"), included: false, served: true, watched: false}, |
||||||
|
].concat(config.files); |
||||||
|
|
||||||
|
function KarmaWebpackOutputFramework(config) { |
||||||
|
// This controller is instantiated and set during the preprocessor phase.
|
||||||
|
const controller = config.__karmaWebpackController; |
||||||
|
|
||||||
|
// only if webpack has instantiated its controller
|
||||||
|
if (!controller) { |
||||||
|
console.warn( |
||||||
|
"Webpack has not instantiated controller yet.\n" + |
||||||
|
"Check if you have enabled webpack preprocessor and framework before this framework" |
||||||
|
) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
config.files.push({ |
||||||
|
pattern: `${controller.outputPath}/**/*`, |
||||||
|
included: false, |
||||||
|
served: true, |
||||||
|
watched: false |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
const KarmaWebpackOutputPlugin = { |
||||||
|
'framework:webpack-output': ['factory', KarmaWebpackOutputFramework], |
||||||
|
}; |
||||||
|
|
||||||
|
config.plugins.push(KarmaWebpackOutputPlugin); |
||||||
|
config.frameworks.push("webpack-output"); |
@ -1,9 +1,7 @@ |
|||||||
package org.jetbrains.compose.resources |
package org.jetbrains.compose.resources |
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope |
import kotlinx.coroutines.* |
||||||
import kotlinx.coroutines.DelicateCoroutinesApi |
|
||||||
import kotlinx.coroutines.GlobalScope |
|
||||||
import kotlinx.coroutines.promise |
|
||||||
|
|
||||||
@OptIn(DelicateCoroutinesApi::class) |
actual typealias TestReturnType = Any |
||||||
actual fun runBlockingTest(block: suspend CoroutineScope.() -> Unit): dynamic = GlobalScope.promise(block = block) |
actual fun runBlockingTest(block: suspend CoroutineScope.() -> Unit): TestReturnType = |
||||||
|
TODO("Implement if necessary. We focus on k/wasm target for now") |
@ -1,7 +1,17 @@ |
|||||||
package org.jetbrains.compose.resources |
package org.jetbrains.compose.resources |
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope |
import kotlinx.coroutines.* |
||||||
|
import kotlinx.coroutines.test.runTest |
||||||
|
|
||||||
actual fun runBlockingTest(block: suspend CoroutineScope.() -> Unit) { |
@JsFun("() => ''") |
||||||
TODO("To be implemented in PR 4031") |
private external fun jsRef(): JsAny |
||||||
|
|
||||||
|
|
||||||
|
actual typealias TestReturnType = Any |
||||||
|
/** |
||||||
|
* Runs the [block] in a coroutine. |
||||||
|
*/ |
||||||
|
actual fun runBlockingTest(block: suspend CoroutineScope.() -> Unit): TestReturnType = MainScope().promise { |
||||||
|
block() |
||||||
|
jsRef() |
||||||
} |
} |
Loading…
Reference in new issue