okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffaufdocs(test): explain coverage and manual checks2f6697a

main
1.7 KiB40 linesraw
1// Dynamic choices and tool arguments must preserve integers beyond float precision.
2// A controlled peer advertises exact numeric values across these client surfaces.
3package daemon
4
5import (
6	"encoding/json"
7	"fmt"
8	"net/http"
9	"testing"
10)
11
12func TestDynamicIntegerChoicesAndToolArgumentsRemainExact(t *testing.T) {
13	var field FormField
14	if err := json.Unmarshal([]byte(`{"name":"version","label":"Version","type":"choice","required":true,"default":9007199254740993,"choices":[{"label":"Lower","value":9007199254740992},{"label":"Upper","value":9007199254740993}]}`), &field); err != nil {
15		t.Fatal(err)
16	}
17	if selected := FormChoiceDefault(field); selected != 1 {
18		t.Fatalf("adjacent integer defaults collapsed into choice %d", selected)
19	}
20	if err := validateFormValue(field, json.RawMessage(`9007199254740994`)); err == nil {
21		t.Fatal("an undeclared adjacent integer choice was accepted")
22	}
23	conn := controlledConnection(t, func(w http.ResponseWriter, r *http.Request) {
24		w.Header().Set("Content-Type", "text/event-stream")
25		writeInitialStream(w, "chat")
26		fmt.Fprintf(w, `data: {"generation":%q,"cursor":2,"events":[{"type":"tool","sequence":2,"data":{"tool_call_id":"call-1","progress_call_id":"progress-1","name":"python","arguments":{"version":9007199254740993},"result":"ok","trace":null,"content_complete":true,"reference":null}}]}`+"\n\n", generationA)
27	})
28	var version any
29	if err := NewChatClient(conn, "test").Stream(t.Context(), 0, func(event StreamEvent) error {
30		if event.Type == EventTool {
31			version = event.ToolArgs["version"]
32		}
33		return nil
34	}); err != nil {
35		t.Fatal(err)
36	}
37	if version != json.Number("9007199254740993") {
38		t.Fatalf("tool argument integer changed: %#v", version)
39	}
40}