@@ -54,6 +54,23 @@ func TestPipelineEmptyOutput(t *testing.T) {
5454 }
5555}
5656
57+ func TestPipelineOutputClosesConfiguredStdoutCloser (t * testing.T ) {
58+ t .Parallel ()
59+ ctx := context .Background ()
60+ stdout := & closeTrackingWriter {}
61+ p := pipe .New (
62+ pipe .WithStdin (strings .NewReader ("hello world\n " )),
63+ pipe .WithStdoutCloser (stdout ),
64+ )
65+
66+ out , err := p .Output (ctx )
67+ if assert .NoError (t , err ) {
68+ assert .Equal (t , "hello world\n " , string (out ))
69+ assert .Equal (t , "" , stdout .buf .String ())
70+ assert .True (t , stdout .closed , "WithStdoutCloser destination should be closed" )
71+ }
72+ }
73+
5774func TestPipelineEmptyWithStdoutCloser (t * testing.T ) {
5875 t .Parallel ()
5976 ctx := context .Background ()
@@ -951,6 +968,24 @@ func TestFunctionOptionsForbidStreams(t *testing.T) {
951968 })
952969}
953970
971+ func TestFunctionOptionsSetStreamRequirements (t * testing.T ) {
972+ t .Parallel ()
973+
974+ stage := pipe .Function (
975+ "file-preferring" ,
976+ func (_ context.Context , _ pipe.Env , _ io.Reader , _ io.Writer ) error {
977+ return nil
978+ },
979+ pipe .WithStdinRequirement (pipe .StreamPreferFile ),
980+ pipe .WithStdoutRequirement (pipe .StreamPreferFile ),
981+ )
982+
983+ assert .Equal (t , pipe.StageRequirements {
984+ Stdin : pipe .StreamPreferFile ,
985+ Stdout : pipe .StreamPreferFile ,
986+ }, stage .Requirements ())
987+ }
988+
954989func TestStreamForbiddenStdin (t * testing.T ) {
955990 t .Parallel ()
956991 ctx := context .Background ()
@@ -1024,7 +1059,10 @@ func TestInvalidStreamRequirements(t *testing.T) {
10241059 Stdin : pipe .StreamRequirement (123 ),
10251060 },
10261061 })
1027- require .ErrorContains (t , p .Run (ctx ), `stdin: invalid stream requirement 123` )
1062+ require .ErrorContains (
1063+ t , p .Run (ctx ),
1064+ `stage "source" has invalid stdin requirement: invalid stream requirement 123` ,
1065+ )
10281066 assert .True (t , stdout .closed , "WithStdoutCloser destination should be closed" )
10291067 })
10301068
@@ -1038,7 +1076,10 @@ func TestInvalidStreamRequirements(t *testing.T) {
10381076 Stdout : pipe .StreamRequirement (123 ),
10391077 },
10401078 })
1041- require .ErrorContains (t , p .Run (ctx ), `stdout: invalid stream requirement 123` )
1079+ require .ErrorContains (
1080+ t , p .Run (ctx ),
1081+ `stage "sink" has invalid stdout requirement: invalid stream requirement 123` ,
1082+ )
10421083 assert .True (t , stdout .closed , "WithStdoutCloser destination should be closed" )
10431084 })
10441085}
@@ -1071,7 +1112,10 @@ func TestInvalidStreamRequirement(t *testing.T) {
10711112 Stdin : pipe .StreamRequirement (99 ),
10721113 },
10731114 })
1074- require .ErrorContains (t , p .Run (ctx ), `stdin: invalid stream requirement 99` )
1115+ require .ErrorContains (
1116+ t , p .Run (ctx ),
1117+ `stage "invalid" has invalid stdin requirement: invalid stream requirement 99` ,
1118+ )
10751119}
10761120
10771121func TestFunctionNoInput (t * testing.T ) {
0 commit comments