summaryrefslogtreecommitdiff
path: root/cli/ops/testing.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2022-07-15 18:09:22 +0100
committerGitHub <noreply@github.com>2022-07-15 13:09:22 -0400
commit22a4998e299ca8658744c745d8f0afeba15730dc (patch)
tree1db6f394457a3c1bcb75388560f7d1667ae1a9ac /cli/ops/testing.rs
parent635eed93731c3616cacf53860b9aeeeb8cfe158b (diff)
refactor: allocate IDs for tests (#14729)
Diffstat (limited to 'cli/ops/testing.rs')
-rw-r--r--cli/ops/testing.rs99
1 files changed, 98 insertions, 1 deletions
diff --git a/cli/ops/testing.rs b/cli/ops/testing.rs
index 705353112..727ccdf66 100644
--- a/cli/ops/testing.rs
+++ b/cli/ops/testing.rs
@@ -1,7 +1,11 @@
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+use crate::tools::test::TestDescription;
use crate::tools::test::TestEvent;
use crate::tools::test::TestEventSender;
+use crate::tools::test::TestFilter;
+use crate::tools::test::TestLocation;
+use crate::tools::test::TestStepDescription;
use deno_core::error::generic_error;
use deno_core::error::AnyError;
@@ -12,18 +16,26 @@ use deno_core::OpState;
use deno_runtime::permissions::create_child_permissions;
use deno_runtime::permissions::ChildPermissionsArg;
use deno_runtime::permissions::Permissions;
+use serde::Deserialize;
+use serde::Deserializer;
+use serde::Serialize;
+use std::sync::atomic::AtomicUsize;
+use std::sync::atomic::Ordering;
use uuid::Uuid;
-pub fn init(sender: TestEventSender) -> Extension {
+pub fn init(sender: TestEventSender, filter: TestFilter) -> Extension {
Extension::builder()
.ops(vec![
op_pledge_test_permissions::decl(),
op_restore_test_permissions::decl(),
op_get_test_origin::decl(),
+ op_register_test::decl(),
+ op_register_test_step::decl(),
op_dispatch_test_event::decl(),
])
.state(move |state| {
state.put(sender.clone());
+ state.put(filter.clone());
Ok(())
})
.build()
@@ -76,6 +88,91 @@ fn op_get_test_origin(state: &mut OpState) -> Result<String, AnyError> {
Ok(state.borrow::<ModuleSpecifier>().to_string())
}
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct TestInfo {
+ name: String,
+ origin: String,
+ location: TestLocation,
+}
+
+#[derive(Debug, Serialize)]
+#[serde(rename_all = "camelCase")]
+struct TestRegisterResult {
+ id: usize,
+ filtered_out: bool,
+}
+
+static NEXT_ID: AtomicUsize = AtomicUsize::new(0);
+
+#[op]
+fn op_register_test(
+ state: &mut OpState,
+ info: TestInfo,
+) -> Result<TestRegisterResult, AnyError> {
+ let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
+ let filter = state.borrow::<TestFilter>().clone();
+ let filtered_out = !filter.includes(&info.name);
+ let description = TestDescription {
+ id,
+ name: info.name,
+ origin: info.origin,
+ location: info.location,
+ };
+ let mut sender = state.borrow::<TestEventSender>().clone();
+ sender.send(TestEvent::Register(description)).ok();
+ Ok(TestRegisterResult { id, filtered_out })
+}
+
+fn deserialize_parent<'de, D>(deserializer: D) -> Result<usize, D::Error>
+where
+ D: Deserializer<'de>,
+{
+ #[derive(Deserialize)]
+ struct Parent {
+ id: usize,
+ }
+ Ok(Parent::deserialize(deserializer)?.id)
+}
+
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct TestStepInfo {
+ name: String,
+ origin: String,
+ location: TestLocation,
+ level: usize,
+ #[serde(rename = "parent")]
+ #[serde(deserialize_with = "deserialize_parent")]
+ parent_id: usize,
+ root_id: usize,
+ root_name: String,
+}
+
+#[op]
+fn op_register_test_step(
+ state: &mut OpState,
+ info: TestStepInfo,
+) -> Result<TestRegisterResult, AnyError> {
+ let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
+ let description = TestStepDescription {
+ id,
+ name: info.name,
+ origin: info.origin,
+ location: info.location,
+ level: info.level,
+ parent_id: info.parent_id,
+ root_id: info.root_id,
+ root_name: info.root_name,
+ };
+ let mut sender = state.borrow::<TestEventSender>().clone();
+ sender.send(TestEvent::StepRegister(description)).ok();
+ Ok(TestRegisterResult {
+ id,
+ filtered_out: false,
+ })
+}
+
#[op]
fn op_dispatch_test_event(
state: &mut OpState,