#[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",
},
),
];
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"] {
assert!(
mock_capture(language).is_ok(),
"expected a capture entry for {language}"
);
}
}
#[test]
fn an_unwired_language_returns_the_gap() {
assert_eq!(mock_capture("csharp"), 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"
);
}
}
}