44//! calling the CLI binary, which Miri doesn't support.
55#![ cfg( all( test, not( miri) ) ) ]
66
7- use std:: sync:: Arc ;
8-
97use assert_cmd:: Command ;
108use assert_fs:: NamedTempFile ;
119use assert_fs:: assert:: PathAssert ;
@@ -14,7 +12,9 @@ use hugr::Extension;
1412use hugr:: builder:: ModuleBuilder ;
1513use hugr:: builder:: { Dataflow , DataflowSubContainer , HugrBuilder } ;
1614use hugr:: core:: Visibility ;
17- use hugr:: envelope:: { EnvelopeConfig , GENERATOR_KEY , USED_EXTENSIONS_KEY } ;
15+ use hugr:: envelope:: {
16+ EnvelopeConfig , EnvelopeFormat , EnvelopeHeader , GENERATOR_KEY , USED_EXTENSIONS_KEY ,
17+ } ;
1818use hugr:: extension:: prelude:: bool_t;
1919use hugr:: extension:: { ExtensionId , ExtensionRegistry , Version } ;
2020use hugr:: hugr:: HugrView ;
@@ -26,6 +26,8 @@ use predicates::{prelude::*, str::contains};
2626use rstest:: { fixture, rstest} ;
2727use serde_json:: Value ;
2828use serde_json:: json;
29+ use std:: io:: Write ;
30+ use std:: sync:: Arc ;
2931#[ fixture]
3032fn cmd ( ) -> Command {
3133 Command :: cargo_bin ( "hugr" ) . unwrap ( )
@@ -53,6 +55,20 @@ fn empty_package_file(empty_package: Package) -> NamedTempFile {
5355 file
5456}
5557
58+ #[ fixture]
59+ fn invalid_package ( ) -> Vec < u8 > {
60+ let header = EnvelopeHeader {
61+ format : EnvelopeFormat :: Model ,
62+ ..Default :: default ( )
63+ } ;
64+ let mut buffer = Vec :: new ( ) ;
65+ header. write ( & mut buffer) . unwrap ( ) ;
66+ buffer
67+ . write_all ( b"this is not valid hugr package data" )
68+ . unwrap ( ) ;
69+ buffer
70+ }
71+
5672#[ fixture]
5773fn package_with_exts ( ) -> Vec < u8 > {
5874 let test_ext = Extension :: new_arc (
@@ -235,3 +251,26 @@ fn test_generator_claimed_extensions(package_with_exts: Vec<u8>, mut describe_cm
235251 . stdout ( contains ( "Generator claimed extensions" ) )
236252 . stdout ( contains ( "used_ext" ) ) ;
237253}
254+
255+ #[ rstest]
256+ fn test_describe_invalid_package ( invalid_package : Vec < u8 > , mut describe_cmd : Command ) {
257+ describe_cmd. write_stdin ( invalid_package) ;
258+ describe_cmd
259+ . assert ( )
260+ . failure ( )
261+ . stdout ( contains ( "Model" ) )
262+ . stderr ( contains ( "Error reading a HUGR model payload" ) ) ;
263+ }
264+
265+ #[ rstest]
266+ fn test_describe_invalid_package_json ( invalid_package : Vec < u8 > , mut describe_cmd : Command ) {
267+ describe_cmd. write_stdin ( invalid_package) ;
268+
269+ describe_cmd. arg ( "--json" ) ;
270+ describe_cmd
271+ . assert ( )
272+ . failure ( )
273+ . stdout ( contains ( "Model" ) )
274+ . stdout ( contains ( "\" error\" : \" Error reading a HUGR model payload" ) ) // error included in JSON
275+ . stderr ( contains ( "Error reading a HUGR model payload" ) ) ;
276+ }
0 commit comments