@@ -2,10 +2,12 @@ package tests
22
33import (
44 "context"
5+ "encoding/json"
56 "testing"
67
78 "github.com/gptscript-ai/gptscript/pkg/loader"
89 "github.com/gptscript-ai/gptscript/pkg/tests/tester"
10+ "github.com/hexops/autogold/v2"
911 "github.com/stretchr/testify/require"
1012)
1113
@@ -111,3 +113,92 @@ echo '{"env": {"CRED2": "that also worked"}}'
111113 resp , err := r .Chat (context .Background (), nil , prg , nil , "" )
112114 r .AssertStep (t , resp , err )
113115}
116+
117+ func TestFilterArgs (t * testing.T ) {
118+ r := tester .NewRunner (t )
119+ prg , err := loader .ProgramFromSource (context .Background (), `
120+ inputfilters: input with ${Foo}
121+ inputfilters: input with foo
122+ inputfilters: input with *
123+ outputfilters: output with *
124+ outputfilters: output with foo
125+ outputfilters: output with ${Foo}
126+ params: Foo: a description
127+
128+ #!/bin/bash
129+ echo ${FOO}
130+
131+ ---
132+ name: input
133+ params: notfoo: a description
134+
135+ #!/bin/bash
136+ echo "${GPTSCRIPT_INPUT}"
137+
138+ ---
139+ name: output
140+ params: notfoo: a description
141+
142+ #!/bin/bash
143+ echo "${GPTSCRIPT_INPUT}"
144+ ` , "" )
145+ require .NoError (t , err )
146+
147+ resp , err := r .Chat (context .Background (), nil , prg , nil , `{"foo":"baz", "start": true}` )
148+ r .AssertStep (t , resp , err )
149+
150+ data := map [string ]any {}
151+ err = json .Unmarshal ([]byte (resp .Content ), & data )
152+ require .NoError (t , err )
153+
154+ autogold .Expect (map [string ]interface {}{
155+ "chat" : false ,
156+ "continuation" : false ,
157+ "notfoo" : "baz" ,
158+ "output" : `{"chat":false,"continuation":false,"notfoo":"foo","output":"{\"chat\":false,\"continuation\":false,\"foo\":\"baz\",\"input\":\"{\\\"foo\\\":\\\"baz\\\",\\\"input\\\":\\\"{\\\\\\\"foo\\\\\\\":\\\\\\\"baz\\\\\\\", \\\\\\\"start\\\\\\\": true}\\\",\\\"notfoo\\\":\\\"baz\\\",\\\"start\\\":true}\\n\",\"notfoo\":\"foo\",\"output\":\"baz\\n\",\"start\":true}\n"}
159+ ` ,
160+ }).Equal (t , data )
161+
162+ val := data ["output" ].(string )
163+ data = map [string ]any {}
164+ err = json .Unmarshal ([]byte (val ), & data )
165+ require .NoError (t , err )
166+ autogold .Expect (map [string ]interface {}{
167+ "chat" : false ,
168+ "continuation" : false ,
169+ "notfoo" : "foo" ,
170+ "output" : `{"chat":false,"continuation":false,"foo":"baz","input":"{\"foo\":\"baz\",\"input\":\"{\\\"foo\\\":\\\"baz\\\", \\\"start\\\": true}\",\"notfoo\":\"baz\",\"start\":true}\n","notfoo":"foo","output":"baz\n","start":true}
171+ ` ,
172+ }).Equal (t , data )
173+
174+ val = data ["output" ].(string )
175+ data = map [string ]any {}
176+ err = json .Unmarshal ([]byte (val ), & data )
177+ require .NoError (t , err )
178+ autogold .Expect (map [string ]interface {}{
179+ "chat" : false ,
180+ "continuation" : false ,
181+ "foo" : "baz" , "input" : `{"foo":"baz","input":"{\"foo\":\"baz\", \"start\": true}","notfoo":"baz","start":true}
182+ ` ,
183+ "notfoo" : "foo" ,
184+ "output" : "baz\n " ,
185+ "start" : true ,
186+ }).Equal (t , data )
187+
188+ val = data ["input" ].(string )
189+ data = map [string ]any {}
190+ err = json .Unmarshal ([]byte (val ), & data )
191+ require .NoError (t , err )
192+ autogold .Expect (map [string ]interface {}{
193+ "foo" : "baz" ,
194+ "input" : `{"foo":"baz", "start": true}` ,
195+ "notfoo" : "baz" ,
196+ "start" : true ,
197+ }).Equal (t , data )
198+
199+ val = data ["input" ].(string )
200+ data = map [string ]any {}
201+ err = json .Unmarshal ([]byte (val ), & data )
202+ require .NoError (t , err )
203+ autogold .Expect (map [string ]interface {}{"foo" : "baz" , "start" : true }).Equal (t , data )
204+ }
0 commit comments