@@ -382,6 +382,80 @@ fn command_dispatch_falls_back_to_extension_when_component_script_is_absent() {
382382 } ) ;
383383}
384384
385+ #[ test]
386+ fn full_extension_test_supplies_canonical_result_sidecar ( ) {
387+ with_isolated_home ( |home| {
388+ let dir = tempfile:: tempdir ( ) . expect ( "temp dir" ) ;
389+ fs:: write (
390+ dir. path ( ) . join ( "homeboy.json" ) ,
391+ r#"{
392+ "id": "fixture",
393+ "extensions": { "fixture-extension": {} }
394+ }"# ,
395+ )
396+ . expect ( "homeboy.json should be written" ) ;
397+
398+ let extension_dir = home
399+ . path ( )
400+ . join ( ".config/homeboy/extensions/fixture-extension" ) ;
401+ fs:: create_dir_all ( & extension_dir) . expect ( "extension dir should be created" ) ;
402+ fs:: write (
403+ extension_dir. join ( "fixture-extension.json" ) ,
404+ r#"{
405+ "name": "Fixture extension",
406+ "version": "1.0.0",
407+ "test": {
408+ "extension_script": "test.sh",
409+ "result_parse": {
410+ "extension_script": "parse-results.sh",
411+ "adapters": ["fixture-json"]
412+ }
413+ }
414+ }"# ,
415+ )
416+ . expect ( "extension manifest should be written" ) ;
417+ let extension_script = extension_dir. join ( "test.sh" ) ;
418+ fs:: write (
419+ & extension_script,
420+ r#"#!/bin/sh
421+ set -eu
422+ test -n "$HOMEBOY_TEST_RESULTS_FILE"
423+ mkdir -p "$(dirname "$HOMEBOY_TEST_RESULTS_FILE")"
424+ printf '{"schema":"fixture/test-results/v1","total":2,"passed":2,"failed":0,"skipped":0}\n' > "$HOMEBOY_TEST_RESULTS_FILE"
425+ "# ,
426+ )
427+ . expect ( "extension script should be written" ) ;
428+ let parser_script = extension_dir. join ( "parse-results.sh" ) ;
429+ fs:: write (
430+ & parser_script,
431+ r#"#!/bin/sh
432+ set -eu
433+ test "$1" = "$HOMEBOY_TEST_RESULTS_FILE"
434+ test "${2:-}" = "fixture-json"
435+ grep -q 'fixture/test-results/v1' "$1"
436+ source "$HOMEBOY_RUNTIME_WRITE_TEST_RESULTS"
437+ homeboy_write_test_results 2 2 0 0
438+ "# ,
439+ )
440+ . expect ( "parser script should be written" ) ;
441+ for script in [ & extension_script, & parser_script] {
442+ let mut perms = fs:: metadata ( script) . expect ( "script metadata" ) . permissions ( ) ;
443+ perms. set_mode ( 0o755 ) ;
444+ fs:: set_permissions ( script, perms) . expect ( "script should be executable" ) ;
445+ }
446+
447+ let ( output, exit_code) = run_test ( test_command_args ( dir. path ( ) ) , & GlobalArgs { } )
448+ . expect ( "extension test should run" ) ;
449+
450+ assert_eq ! ( exit_code, 0 ) ;
451+ assert ! ( output. passed) ;
452+ let counts = output. test_counts . expect ( "test counts" ) ;
453+ assert_eq ! ( counts. total, 2 ) ;
454+ assert_eq ! ( counts. passed, 2 ) ;
455+ assert_eq ! ( counts. failed, 0 ) ;
456+ } ) ;
457+ }
458+
385459#[ test]
386460fn changed_wordpress_php_smoke_test_executes_with_generic_result_adapter ( ) {
387461 with_isolated_home ( |home| {
@@ -422,7 +496,7 @@ fn changed_wordpress_php_smoke_test_executes_with_generic_result_adapter() {
422496 let extension_script = extension_dir. join ( "test.sh" ) ;
423497 fs:: write (
424498 & extension_script,
425- "#!/bin/sh\n printf '%s' \" $HOMEBOY_CHANGED_TEST_FILES\" | grep -q 'tests/patterns/patterns-ability-smoke.php'\n printf 'wordpress smoke passed=1 failed=0 \\ n' \n " ,
499+ "#!/bin/sh\n set -eu \ n printf '%s' \" $HOMEBOY_CHANGED_TEST_FILES\" | grep -q 'tests/patterns/patterns-ability-smoke.php'\n test -n \" $HOMEBOY_TEST_RESULTS_FILE \" \n mkdir -p \" $(dirname \" $HOMEBOY_TEST_RESULTS_FILE \" ) \" \n printf '{ \" total \" :1, \" passed\" :1, \" failed\" :0, \" skipped \" :0} \\ n' > \" $HOMEBOY_TEST_RESULTS_FILE \" \n " ,
426500 )
427501 . expect ( "extension script should be written" ) ;
428502 let mut perms = fs:: metadata ( & extension_script)
0 commit comments