summaryrefslogtreecommitdiff
path: root/cli/lsp/testing/lsp_custom.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/testing/lsp_custom.rs')
-rw-r--r--cli/lsp/testing/lsp_custom.rs186
1 files changed, 186 insertions, 0 deletions
diff --git a/cli/lsp/testing/lsp_custom.rs b/cli/lsp/testing/lsp_custom.rs
new file mode 100644
index 000000000..c1182b04e
--- /dev/null
+++ b/cli/lsp/testing/lsp_custom.rs
@@ -0,0 +1,186 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+
+use deno_core::serde::Deserialize;
+use deno_core::serde::Serialize;
+use lspower::lsp;
+
+pub const TEST_RUN_CANCEL_REQUEST: &str = "deno/testRunCancel";
+pub const TEST_RUN_REQUEST: &str = "deno/testRun";
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct EnqueuedTestModule {
+ pub text_document: lsp::TextDocumentIdentifier,
+ pub ids: Vec<String>,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestData {
+ /// The unique ID of the test
+ pub id: String,
+ /// The human readable test to display for the test.
+ pub label: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub steps: Option<Vec<TestData>>,
+ /// The range where the test is located.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub range: Option<lsp::Range>,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub enum TestModuleNotificationKind {
+ /// The test module notification represents an insertion of tests, not
+ /// replacement of the test children.
+ Insert,
+ /// The test module notification represents a replacement of any tests within
+ /// the test module.
+ Replace,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestModuleNotificationParams {
+ /// The text document that the notification relates to.
+ pub text_document: lsp::TextDocumentIdentifier,
+ /// Indicates what kind of notification this represents.
+ pub kind: TestModuleNotificationKind,
+ /// The human readable text to display for the test module.
+ pub label: String,
+ /// The tests identified in the module.
+ pub tests: Vec<TestData>,
+}
+
+pub enum TestModuleNotification {}
+
+impl lsp::notification::Notification for TestModuleNotification {
+ type Params = TestModuleNotificationParams;
+
+ const METHOD: &'static str = "deno/testModule";
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestModuleDeleteNotificationParams {
+ /// The text document that the notification relates to.
+ pub text_document: lsp::TextDocumentIdentifier,
+}
+
+pub enum TestModuleDeleteNotification {}
+
+impl lsp::notification::Notification for TestModuleDeleteNotification {
+ type Params = TestModuleDeleteNotificationParams;
+
+ const METHOD: &'static str = "deno/testModuleDelete";
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub enum TestRunKind {
+ // The run profile is just to execute the tests
+ Run,
+ // The tests should be run and debugged, currently not implemented
+ Debug,
+ // The tests should be run, collecting and reporting coverage information,
+ // currently not implemented
+ Coverage,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestRunRequestParams {
+ pub id: u32,
+ pub kind: TestRunKind,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub exclude: Option<Vec<TestIdentifier>>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub include: Option<Vec<TestIdentifier>>,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestRunCancelParams {
+ pub id: u32,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestRunProgressParams {
+ pub id: u32,
+ pub message: TestRunProgressMessage,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct TestIdentifier {
+ /// The module identifier which contains the test.
+ pub text_document: lsp::TextDocumentIdentifier,
+ /// An optional string identifying the individual test. If not present, then
+ /// it identifies all the tests associated with the module.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub id: Option<String>,
+ /// An optional structure identifying a step of the test. If not present, then
+ /// no step is identified.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub step_id: Option<String>,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase", tag = "type")]
+pub enum TestRunProgressMessage {
+ Enqueued {
+ test: TestIdentifier,
+ },
+ Started {
+ test: TestIdentifier,
+ },
+ Skipped {
+ test: TestIdentifier,
+ },
+ Failed {
+ test: TestIdentifier,
+ messages: Vec<TestMessage>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ duration: Option<u32>,
+ },
+ Errored {
+ test: TestIdentifier,
+ messages: Vec<TestMessage>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ duration: Option<u32>,
+ },
+ Passed {
+ test: TestIdentifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ duration: Option<u32>,
+ },
+ Output {
+ value: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ test: Option<TestIdentifier>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ location: Option<lsp::Location>,
+ },
+ End,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TestMessage {
+ pub message: lsp::MarkupContent,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub expected_output: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub actual_output: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub location: Option<lsp::Location>,
+}
+
+pub enum TestRunProgressNotification {}
+
+impl lsp::notification::Notification for TestRunProgressNotification {
+ type Params = TestRunProgressParams;
+
+ const METHOD: &'static str = "deno/testRunProgress";
+}