summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-03-23 16:33:42 +0100
committerGitHub <noreply@github.com>2022-03-23 16:33:42 +0100
commitb82ded84d341cda98821592556804a529638589c (patch)
treec36dae6ea227c21f0238cad05ce4315f5547eca3
parent53dac7451bbdd527aa91e01653b678547624fc39 (diff)
fix(bench): require --unstable flag in JavaScript (#14091)
-rw-r--r--cli/diagnostics.rs2
-rw-r--r--cli/ops/bench.rs24
-rw-r--r--cli/tests/integration/bench_tests.rs6
-rw-r--r--cli/tests/testdata/bench/requires_unstable.js1
-rw-r--r--cli/tests/testdata/bench/requires_unstable.out1
-rw-r--r--cli/tools/bench.rs2
-rw-r--r--runtime/js/40_testing.js1
7 files changed, 35 insertions, 2 deletions
diff --git a/cli/diagnostics.rs b/cli/diagnostics.rs
index d49916f2d..8181c5fa0 100644
--- a/cli/diagnostics.rs
+++ b/cli/diagnostics.rs
@@ -15,6 +15,7 @@ use std::fmt;
const MAX_SOURCE_LINE_LENGTH: usize = 150;
const UNSTABLE_DENO_PROPS: &[&str] = &[
+ "BenchDefinition",
"CompilerOptions",
"CreateHttpClientOptions",
"DatagramConn",
@@ -39,6 +40,7 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[
"UnixListenOptions",
"addSignalListener",
"applySourceMap",
+ "bench",
"connect",
"consoleSize",
"createHttpClient",
diff --git a/cli/ops/bench.rs b/cli/ops/bench.rs
index 4b7d6743f..ea040b4a5 100644
--- a/cli/ops/bench.rs
+++ b/cli/ops/bench.rs
@@ -12,7 +12,7 @@ use std::time;
use tokio::sync::mpsc::UnboundedSender;
use uuid::Uuid;
-pub fn init(sender: UnboundedSender<BenchEvent>) -> Extension {
+pub fn init(sender: UnboundedSender<BenchEvent>, unstable: bool) -> Extension {
Extension::builder()
.ops(vec![
op_pledge_test_permissions::decl(),
@@ -20,14 +20,36 @@ pub fn init(sender: UnboundedSender<BenchEvent>) -> Extension {
op_get_bench_origin::decl(),
op_dispatch_bench_event::decl(),
op_bench_now::decl(),
+ op_bench_check_unstable::decl(),
])
.state(move |state| {
state.put(sender.clone());
+ state.put(Unstable(unstable));
Ok(())
})
.build()
}
+pub struct Unstable(pub bool);
+
+fn check_unstable(state: &OpState, api_name: &str) {
+ let unstable = state.borrow::<Unstable>();
+
+ if !unstable.0 {
+ eprintln!(
+ "Unstable API '{}'. The --unstable flag must be provided.",
+ api_name
+ );
+ std::process::exit(70);
+ }
+}
+
+#[op]
+fn op_bench_check_unstable(state: &mut OpState) -> Result<(), AnyError> {
+ check_unstable(state, "Deno.bench");
+ Ok(())
+}
+
#[derive(Clone)]
struct PermissionsHolder(Uuid, Permissions);
diff --git a/cli/tests/integration/bench_tests.rs b/cli/tests/integration/bench_tests.rs
index 06806c0b7..2df08bdb5 100644
--- a/cli/tests/integration/bench_tests.rs
+++ b/cli/tests/integration/bench_tests.rs
@@ -2,6 +2,12 @@
use crate::itest;
+itest!(requires_unstable {
+ args: "bench bench/requires_unstable.js",
+ exit_code: 70,
+ output: "bench/requires_unstable.out",
+});
+
itest!(overloads {
args: "bench --unstable bench/overloads.ts",
exit_code: 0,
diff --git a/cli/tests/testdata/bench/requires_unstable.js b/cli/tests/testdata/bench/requires_unstable.js
new file mode 100644
index 000000000..06a07bb38
--- /dev/null
+++ b/cli/tests/testdata/bench/requires_unstable.js
@@ -0,0 +1 @@
+Deno.bench("bench0", () => {});
diff --git a/cli/tests/testdata/bench/requires_unstable.out b/cli/tests/testdata/bench/requires_unstable.out
new file mode 100644
index 000000000..574fb07e1
--- /dev/null
+++ b/cli/tests/testdata/bench/requires_unstable.out
@@ -0,0 +1 @@
+Unstable API 'Deno.bench'. The --unstable flag must be provided.
diff --git a/cli/tools/bench.rs b/cli/tools/bench.rs
index 8c3b67943..7a1e260ac 100644
--- a/cli/tools/bench.rs
+++ b/cli/tools/bench.rs
@@ -295,7 +295,7 @@ async fn bench_specifier(
&ps,
specifier.clone(),
permissions,
- vec![ops::bench::init(channel.clone())],
+ vec![ops::bench::init(channel.clone(), ps.flags.unstable)],
);
if options.compat_mode {
diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js
index 2c2b55d56..3e4a57df1 100644
--- a/runtime/js/40_testing.js
+++ b/runtime/js/40_testing.js
@@ -639,6 +639,7 @@
optionsOrFn,
maybeFn,
) {
+ core.opSync("op_bench_check_unstable");
let benchDef;
const defaults = {
ignore: false,