Skip to content

Commit ade5bca

Browse files
committed
fix: update deps and use run_compare for test
1 parent 760c8d2 commit ade5bca

5 files changed

Lines changed: 24 additions & 166 deletions

File tree

src/queries/baseline.rs

Lines changed: 20 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -176,172 +176,30 @@ fn subtract_30_months(date: &str) -> Result<String, crate::error::Error> {
176176

177177
#[cfg(test)]
178178
mod tests {
179-
use super::*;
180-
use browserslist_data::baseline;
181-
use std::collections::HashMap;
182-
use std::process::Command;
179+
use crate::test::run_compare;
180+
use crate::opts::Opts;
183181
use test_case::test_case;
184182

185-
/// Run a Node.js snippet and return stdout lines.
186-
fn node_output(script: &str) -> Vec<String> {
187-
let out = Command::new("node")
188-
.arg("-e")
189-
.arg(script)
190-
.output()
191-
.expect("node must be available");
192-
assert!(
193-
out.status.success(),
194-
"node failed: {}",
195-
String::from_utf8_lossy(&out.stderr)
196-
);
197-
String::from_utf8(out.stdout)
198-
.unwrap()
199-
.lines()
200-
.filter(|l| !l.is_empty())
201-
.map(str::to_owned)
202-
.collect()
203-
}
204-
205-
/// Call getCompatibleVersions() and return a map of caniuse_browser -> min_version.
206-
fn js_min_versions(js_opts: &str) -> HashMap<String, String> {
207-
let opts_str = if js_opts.is_empty() {
208-
"suppressWarnings: true".to_owned()
209-
} else {
210-
format!("{js_opts}, suppressWarnings: true")
211-
};
212-
let script = format!(
213-
r#"
214-
const {{ getCompatibleVersions }} = require('./node_modules/baseline-browser-mapping');
215-
const map = {{chrome:'chrome',chrome_android:'and_chr',edge:'edge',firefox:'firefox',firefox_android:'and_ff',safari:'safari',safari_ios:'ios_saf'}};
216-
const r = getCompatibleVersions({{ {opts_str} }});
217-
r.filter(e=>map[e.browser]).forEach(e => console.log(map[e.browser] + ' ' + e.version));
218-
"#
219-
);
220-
node_output(&script)
221-
.into_iter()
222-
.map(|line| {
223-
let (b, v) = line.split_once(' ').unwrap();
224-
(b.to_owned(), v.to_owned())
225-
})
226-
.collect()
227-
}
228-
229-
/// Verify that the minimum version our data returns for each browser matches
230-
/// what getCompatibleVersions() from the JS library reports.
231-
fn assert_min_versions_match(
232-
label: &str,
233-
expected: &HashMap<String, String>,
234-
get_min: impl Fn(&str) -> Option<&'static str>,
235-
) {
236-
for (browser, js_version) in expected {
237-
let rust_version = get_min(browser).unwrap_or_else(|| {
238-
panic!("[{label}] {browser}: Rust returned None, JS expected {js_version}")
239-
});
240-
let js_v: Version = js_version.parse().unwrap_or_default();
241-
let rust_v: Version = rust_version.parse().unwrap_or_default();
242-
assert_eq!(
243-
js_v, rust_v,
244-
"[{label}] {browser}: Rust min={rust_version}, JS min={js_version}"
245-
);
246-
}
247-
assert_eq!(
248-
expected.len(),
249-
7,
250-
"[{label}] expected 7 core browsers, got {}",
251-
expected.len()
252-
);
253-
}
254-
255-
#[test]
256-
fn widely_min_versions_match_js() {
257-
let expected = js_min_versions("");
258-
assert_min_versions_match("widely", &expected, |b| {
259-
baseline::get_baseline_widely_min_version(b)
260-
});
261-
}
262-
263-
#[test_case(2015; "year_2015")]
264-
#[test_case(2016; "year_2016")]
265-
#[test_case(2017; "year_2017")]
266-
#[test_case(2018; "year_2018")]
267-
#[test_case(2019; "year_2019")]
268-
#[test_case(2020; "year_2020")]
269-
#[test_case(2021; "year_2021")]
270-
#[test_case(2022; "year_2022")]
271-
#[test_case(2023; "year_2023")]
272-
#[test_case(2024; "year_2024")]
273-
fn year_min_versions_match_js(year: u16) {
274-
let expected = js_min_versions(&format!("targetYear: {year}"));
275-
assert_min_versions_match(&format!("year {year}"), &expected, |b| {
276-
baseline::get_baseline_year_min_version(year, b)
277-
});
278-
}
279-
280-
#[test_case("2023-04-05"; "date_2023_04_05")]
281-
#[test_case("2021-01-01"; "date_2021_01_01")]
282-
#[test_case("2024-06-15"; "date_2024_06_15")]
283-
fn widely_on_date_min_versions_match_js(date: &str) {
284-
let expected = js_min_versions(&format!("widelyAvailableOnDate: '{date}'"));
285-
let cutoff = subtract_30_months(date).unwrap();
286-
assert_min_versions_match(&format!("date {date}"), &expected, |b| {
287-
baseline::get_baseline_cutoff_date_min_version(&cutoff, b)
288-
});
289-
}
290-
291183
#[test_case("baseline widely available"; "widely")]
292-
#[test_case("baseline 2020"; "year 2020")]
293-
#[test_case("baseline 2022"; "year 2022")]
294-
#[test_case("baseline 2015"; "year 2015")]
295184
#[test_case("BASELINE WIDELY AVAILABLE"; "case insensitive widely")]
296-
#[test_case("baseline widely available on 2023-04-05"; "widely on date")]
297-
fn valid_queries_return_results(query: &str) {
298-
let results = crate::resolve([query], &Opts::default()).unwrap();
299-
assert!(
300-
!results.is_empty(),
301-
"expected non-empty results for {query:?}"
302-
);
303-
}
304-
305185
#[test_case("baseline newly available"; "newly")]
306-
#[test_case("Baseline Newly Available"; "case insensitive newly")]
307-
fn valid_queries_no_error(query: &str) {
308-
// "newly" min versions may be ahead of the caniuse data, so results can be empty
309-
crate::resolve([query], &Opts::default()).expect("query should not error");
310-
}
311-
312-
#[test_case("baseline 2022 with downstream"; "year_downstream")]
313-
#[test_case("baseline widely available with downstream"; "widely_downstream")]
314-
fn valid_queries_with_downstream(query: &str) {
315-
let results = crate::resolve([query], &Opts::default()).unwrap();
316-
assert!(
317-
!results.is_empty(),
318-
"expected non-empty results for {query:?}"
319-
);
320-
// Should have more results than without downstream
321-
let without = crate::resolve(
322-
[query.replace(" with downstream", "").as_str()],
323-
&Opts::default(),
324-
)
325-
.unwrap();
326-
assert!(
327-
results.len() > without.len(),
328-
"downstream should add browsers: got {}, without got {}",
329-
results.len(),
330-
without.len()
331-
);
332-
}
333-
334-
#[test_case("baseline 2020 with downstream including kaios"; "year_downstream_kaios")]
335-
fn valid_queries_with_kaios(query: &str) {
336-
let results = crate::resolve([query], &Opts::default()).unwrap();
337-
assert!(
338-
!results.is_empty(),
339-
"expected non-empty results for {query:?}"
340-
);
341-
// Should include kaios
342-
assert!(
343-
results.iter().any(|d| d.name() == "kaios"),
344-
"expected kaios in results"
345-
);
186+
#[test_case("baseline 2015"; "year 2015")]
187+
#[test_case("baseline 2016"; "year 2016")]
188+
#[test_case("baseline 2017"; "year 2017")]
189+
#[test_case("baseline 2018"; "year 2018")]
190+
#[test_case("baseline 2019"; "year 2019")]
191+
#[test_case("baseline 2020"; "year 2020")]
192+
#[test_case("baseline 2021"; "year 2021")]
193+
#[test_case("baseline 2022"; "year 2022")]
194+
#[test_case("baseline 2023"; "year 2023")]
195+
#[test_case("baseline 2024"; "year 2024")]
196+
#[test_case("baseline widely available on 2021-01-01"; "widely on date 2021-01-01")]
197+
#[test_case("baseline widely available on 2023-04-05"; "widely on date 2023-04-05")]
198+
#[test_case("baseline widely available on 2024-06-15"; "widely on date 2024-06-15")]
199+
#[test_case("baseline 2022 with downstream"; "year with downstream")]
200+
#[test_case("baseline widely available with downstream"; "widely with downstream")]
201+
#[test_case("baseline 2020 with downstream including kaios"; "year with downstream and kaios")]
202+
fn valid(query: &str) {
203+
run_compare(query, &Opts::default(), None);
346204
}
347205
}

vendor/caniuse

Submodule caniuse updated 819 files

0 commit comments

Comments
 (0)