#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct MockCapture {
pub(crate) helper_name: &'static str,
pub(crate) helper_template: &'static str,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct MockCaptureGap;
pub(crate) const MOCK_CAPTURE_TABLE: &[(&str, MockCapture)] = &[
(
"rust",
MockCapture {
helper_name: "alef_mock_request_count",
helper_template: "rust/mock_request_helper.rs.jinja",
},
),
(
"python",
MockCapture {
helper_name: "_alef_mock_request_count",
helper_template: "python/mock_request_helper.py.jinja",
},
),
(
"node",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "typescript/mock_request_helper.jinja",
},
),
(
"go",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "go/mock_request_helper.go.jinja",
},
),
(
"ruby",
MockCapture {
helper_name: "alef_mock_request_count",
helper_template: "ruby/mock_request_helper.rb.jinja",
},
),
(
"php",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "php/mock_request_helper.php.jinja",
},
),
(
"java",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "java/mock_request_helper.java.jinja",
},
),
(
"kotlin",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "kotlin/mock_request_helper.kt.jinja",
},
),
(
"kotlin_android",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "kotlin/mock_request_helper.kt.jinja",
},
),
(
"csharp",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "csharp/mock_request_helper.cs.jinja",
},
),
(
"dart",
MockCapture {
helper_name: "_alefMockRequestCount",
helper_template: "dart/mock_request_helper.dart.jinja",
},
),
(
"wasm",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "typescript/mock_request_helper.jinja",
},
),
(
"swift",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "swift/mock_request_helper.swift.jinja",
},
),
(
"zig",
MockCapture {
helper_name: "alefMockRequestCount",
helper_template: "zig/mock_request_helper.zig.jinja",
},
),
(
"gleam",
MockCapture {
helper_name: "alef_mock_request_count",
helper_template: "gleam/mock_request_helper.gleam.jinja",
},
),
(
"c",
MockCapture {
helper_name: "alef_mock_request_count",
helper_template: "c/mock_request_helper.c.jinja",
},
),
(
"r",
MockCapture {
helper_name: ".alef_mock_request_count",
helper_template: "r/mock_request_helper.jinja",
},
),
(
"elixir",
MockCapture {
helper_name: "alef_mock_request_count",
helper_template: "elixir/mock_request_helper.exs.jinja",
},
),
];
pub(crate) fn mock_capture(language: &str) -> Result<MockCapture, MockCaptureGap> {
MOCK_CAPTURE_TABLE
.iter()
.find(|(name, _)| *name == language)
.map(|(_, capture)| *capture)
.ok_or(MockCaptureGap)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_wired_languages_resolve() {
for language in [
"rust",
"python",
"node",
"go",
"ruby",
"php",
"java",
"kotlin",
"kotlin_android",
"csharp",
"dart",
"wasm",
"swift",
"zig",
"gleam",
"c",
"r",
"elixir",
] {
assert!(
mock_capture(language).is_ok(),
"expected a capture entry for {language}"
);
}
}
#[test]
fn an_unwired_language_returns_the_gap() {
assert_eq!(mock_capture("php_ext"), Err(MockCaptureGap));
}
#[test]
fn typescript_is_not_a_language_name() {
assert_eq!(mock_capture("typescript"), Err(MockCaptureGap));
}
#[test]
fn every_capture_table_key_names_a_real_generator() {
let languages: Vec<&str> = crate::e2e::codegen::all_generators()
.iter()
.map(|generator| generator.language_name())
.collect();
for (language, _) in MOCK_CAPTURE_TABLE {
assert!(
languages.contains(language),
"'{language}' is not a generator language name, so its row would never apply"
);
}
}
}