Add flag to turn power assertions on/off (#1419)

This commit is contained in:
Islon Scherer
2026-02-03 09:35:16 +01:00
committed by GitHub
parent 7b7b51c0ae
commit f0449c8330
29 changed files with 345 additions and 72 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -74,10 +74,23 @@ class EvalCommand : ModulesCommand(name = "eval", helpLink = helpLink) {
private val testMode: Boolean by
option(names = arrayOf("--test-mode"), help = "Internal test mode", hidden = true).flag()
private val powerAssertionsEnabled: Boolean by
option(
names = arrayOf("--power-assertions"),
help = "Enable power assertions for detailed assertion failure messages.",
)
.flag("--no-power-assertions", default = true, defaultForHelp = "enabled")
override fun run() {
val options =
CliEvaluatorOptions(
base = baseOptions.baseOptions(modules, projectOptions, testMode = testMode),
base =
baseOptions.baseOptions(
modules,
projectOptions,
testMode = testMode,
powerAssertionsEnabled = powerAssertionsEnabled,
),
outputPath = outputPath,
outputFormat = baseOptions.format,
moduleOutputSeparator = moduleOutputSeparator,

View File

@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,8 @@ import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.convert
import com.github.ajalt.clikt.parameters.arguments.multiple
import com.github.ajalt.clikt.parameters.groups.provideDelegate
import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.option
import java.net.URI
import org.pkl.cli.CliTestRunner
import org.pkl.commons.cli.commands.BaseCommand
@@ -43,9 +45,21 @@ class TestCommand : BaseCommand(name = "test", helpLink = helpLink) {
private val testOptions by TestOptions()
private val powerAssertionsEnabled: Boolean by
option(
names = arrayOf("--power-assertions"),
help = "Enable power assertions for detailed assertion failure messages.",
)
.flag("--no-power-assertions", default = true, defaultForHelp = "enabled")
override fun run() {
CliTestRunner(
options = baseOptions.baseOptions(modules, projectOptions),
options =
baseOptions.baseOptions(
modules,
projectOptions,
powerAssertionsEnabled = powerAssertionsEnabled,
),
testOptions = testOptions.cliTestOptions,
)
.run()

View File

@@ -52,7 +52,12 @@ class CliTestRunnerTest {
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
runner.run()
@@ -89,7 +94,12 @@ class CliTestRunnerTest {
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
assertThatCode { runner.run() }.hasMessage("Tests failed.")
@@ -131,7 +141,12 @@ class CliTestRunnerTest {
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
assertThatCode { runner.run() }.hasMessage("Tests failed.")
@@ -173,7 +188,12 @@ class CliTestRunnerTest {
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
assertThatCode { runner.run() }.hasMessage("Tests failed.")
@@ -229,7 +249,12 @@ class CliTestRunnerTest {
)
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
assertThatCode { runner.run() }.hasMessage("Tests failed.")
@@ -275,7 +300,12 @@ class CliTestRunnerTest {
.trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val noopWriter = noopWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions(junitDir = tempDir)
val runner = CliTestRunner(opts, testOpts, noopWriter, noopWriter)
assertThatCode { runner.run() }.hasMessageContaining("failed")
@@ -320,7 +350,12 @@ class CliTestRunnerTest {
.trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val noopWriter = noopWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions(junitDir = tempDir)
val runner = CliTestRunner(opts, testOpts, noopWriter, noopWriter)
assertThatCode { runner.run() }.hasMessageContaining("failed")
@@ -474,6 +509,7 @@ class CliTestRunnerTest {
CliBaseOptions(
sourceModules = listOf(input1.toUri(), input2.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions(junitDir = tempDir, junitAggregateReports = true)
val runner = CliTestRunner(opts, testOpts, noopWriter, noopWriter)
@@ -601,7 +637,12 @@ class CliTestRunnerTest {
)
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
assertThatCode { runner.run() }.hasMessage("Tests failed.")
@@ -640,7 +681,12 @@ class CliTestRunnerTest {
val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter()
val err = StringWriter()
val opts = CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
val opts =
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
val exception = assertThrows<CliException> { runner.run() }
@@ -680,7 +726,11 @@ class CliTestRunnerTest {
val out = StringWriter()
val err = StringWriter()
val opts =
CliBaseOptions(sourceModules = listOf(input.toUri()), settings = URI("pkl:settings"))
CliBaseOptions(
sourceModules = listOf(input.toUri()),
settings = URI("pkl:settings"),
powerAssertionsEnabled = true,
)
val testOpts = CliTestOptions()
val runner = CliTestRunner(opts, testOpts, consoleWriter = out, errWriter = err)
runner.run()