From d95e959b853fe1f2ce88b674061c1208ac8fb581 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 1 Jul 2023 07:59:29 -0400 Subject: [PATCH] Add failing test case for crash in #78 --- vl-convert-rs/tests/test_specs.rs | 93 ++++++++++++------- .../tests/vl-specs/lookup_urls.vl.json | 32 +++++++ 2 files changed, 94 insertions(+), 31 deletions(-) create mode 100644 vl-convert-rs/tests/vl-specs/lookup_urls.vl.json diff --git a/vl-convert-rs/tests/test_specs.rs b/vl-convert-rs/tests/test_specs.rs index c51db98b..12808597 100644 --- a/vl-convert-rs/tests/test_specs.rs +++ b/vl-convert-rs/tests/test_specs.rs @@ -280,25 +280,26 @@ mod test_svg { name: &str, ) { initialize(); + for _ in 1..1000 { + let vl_version = VlVersion::v5_8; - let vl_version = VlVersion::v5_8; + // Load example Vega-Lite spec + let vl_spec = load_vl_spec(name); - // Load example Vega-Lite spec - let vl_spec = load_vl_spec(name); + // Create Vega-Lite Converter and perform conversion + let mut converter = VlConverter::new(); - // Create Vega-Lite Converter and perform conversion - let mut converter = VlConverter::new(); + // Convert to vega first + let vg_spec = + block_on(converter.vegalite_to_vega(vl_spec.clone(), VlOpts { vl_version, ..Default::default() })).unwrap(); - // Convert to vega first - let vg_spec = - block_on(converter.vegalite_to_vega(vl_spec.clone(), VlOpts{vl_version, ..Default::default()})).unwrap(); + let svg = block_on(converter.vega_to_svg(vg_spec)).unwrap(); + check_svg(name, vl_version, None, &svg); - let svg = block_on(converter.vega_to_svg(vg_spec)).unwrap(); - check_svg(name, vl_version, None, &svg); - - // Convert directly to svg - let svg = block_on(converter.vegalite_to_svg(vl_spec, VlOpts{vl_version, ..Default::default()})).unwrap(); - check_svg(name, vl_version, None, &svg); + // Convert directly to svg + let svg = block_on(converter.vegalite_to_svg(vl_spec, VlOpts { vl_version, ..Default::default() })).unwrap(); + check_svg(name, vl_version, None, &svg); + } } #[test] @@ -328,28 +329,29 @@ mod test_png_no_theme { scale: f32 ) { initialize(); + for _ in 1..1000 { + let vl_version = VlVersion::v5_8; - let vl_version = VlVersion::v5_8; - - // Load example Vega-Lite spec - let vl_spec = load_vl_spec(name); + // Load example Vega-Lite spec + let vl_spec = load_vl_spec(name); - // Create Vega-Lite Converter and perform conversion - let mut converter = VlConverter::new(); + // Create Vega-Lite Converter and perform conversion + let mut converter = VlConverter::new(); - // Convert to vega first - let vg_spec = block_on( - converter.vegalite_to_vega(vl_spec.clone(), VlOpts{vl_version, ..Default::default()}) - ).unwrap(); + // Convert to vega first + let vg_spec = block_on( + converter.vegalite_to_vega(vl_spec.clone(), VlOpts { vl_version, ..Default::default() }) + ).unwrap(); - let png_data = block_on(converter.vega_to_png(vg_spec, Some(scale))).unwrap(); - check_png(name, vl_version, None, png_data.as_slice()); + let png_data = block_on(converter.vega_to_png(vg_spec, Some(scale))).unwrap(); + check_png(name, vl_version, None, png_data.as_slice()); - // Convert directly to png - let png_data = block_on( - converter.vegalite_to_png(vl_spec, VlOpts{vl_version, ..Default::default()}, Some(scale)) - ).unwrap(); - check_png(name, vl_version, None, png_data.as_slice()); + // Convert directly to png + let png_data = block_on( + converter.vegalite_to_png(vl_spec, VlOpts { vl_version, ..Default::default() }, Some(scale)) + ).unwrap(); + check_png(name, vl_version, None, png_data.as_slice()); + } } #[test] @@ -448,3 +450,32 @@ async fn test_font_with_quotes() { check_png(name, vl_version, None, png_data.as_slice()); } + + +#[tokio::test] +async fn test_deno_url_crash_gh_78() { + let vl_version = VlVersion::v5_8; + + // Load example Vega-Lite spec + let name = "lookup_urls"; + let vl_spec = load_vl_spec(name); + + // Create Vega-Lite Converter and perform conversion + let mut converter = VlConverter::new(); + + let mut svg_data: String = String::new(); + for _ in 0..10000 { + svg_data = converter + .vegalite_to_svg( + vl_spec.clone(), + VlOpts { + vl_version, + ..Default::default() + }, + ) + .await + .unwrap(); + } + + check_svg(name, vl_version, None, &svg_data); +} \ No newline at end of file diff --git a/vl-convert-rs/tests/vl-specs/lookup_urls.vl.json b/vl-convert-rs/tests/vl-specs/lookup_urls.vl.json new file mode 100644 index 00000000..adc9b593 --- /dev/null +++ b/vl-convert-rs/tests/vl-specs/lookup_urls.vl.json @@ -0,0 +1,32 @@ +{ + "config": {"view": {"continuousWidth": 300, "continuousHeight": 300}}, + "data": { + "url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/income.json" + }, + "mark": {"type": "geoshape"}, + "encoding": { + "color": {"field": "pct", "type": "quantitative"}, + "shape": {"field": "geo", "type": "geojson"}, + "tooltip": [ + {"field": "name", "type": "nominal"}, + {"field": "pct", "type": "quantitative"} + ] + }, + "height": 175, + "projection": {"type": "albersUsa"}, + "transform": [ + { + "lookup": "id", + "as": "geo", + "from": { + "data": { + "url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/us-10m.json", + "format": {"feature": "states", "type": "topojson"} + }, + "key": "id" + } + } + ], + "width": 300, + "$schema": "https://vega.github.io/schema/vega-lite/v5.8.0.json" +}