// Copyright (c) 2026 Lark Technologies Pte. Ltd. // SPDX-License-Identifier: MIT package skillscan import ( "path/filepath" "testing" ) func TestHarvestSkillCommands(t *testing.T) { got, err := Harvest(filepath.Join("testdata", "skills")) if err != nil { t.Fatalf("Harvest() error = %v", err) } if len(got) != 2 { t.Fatalf("got %d commands, want 2: %#v", len(got), got) } if got[0].Raw != "lark-cli docs +fetch --api-version v2 --doc A3Ijdemo" { t.Fatalf("first raw = %q", got[0].Raw) } if !got[1].HasPlaceholder { t.Fatalf("oc_xxx should be classified as placeholder") } } func TestFilterExamplesBySkill(t *testing.T) { examples := []Example{ {SourceFile: "skills/lark-doc/SKILL.md", Raw: "lark-cli docs +fetch"}, {SourceFile: "skills/lark-im/SKILL.md", Raw: "lark-cli im chats list"}, } got := FilterExamples(examples, map[string]bool{"lark-doc": true}) if len(got) != 1 || got[0].SourceFile != "skills/lark-doc/SKILL.md" { t.Fatalf("FilterExamples() = %#v", got) } } func TestHasPlaceholderDistinguishesHTMLFromPlaceholders(t *testing.T) { if HasPlaceholder(`lark-cli mail +send --body '

Hello team

'`) { t.Fatal("HTML tags should not make an example a placeholder") } for _, raw := range []string{ `lark-cli slides +replace-slide --parts '[{"replacement":""}]'`, `lark-cli slides +replace-slide --parts '[{"replacement":"

Title

"}]'`, } { if HasPlaceholder(raw) { t.Fatalf("XML tags should not make an example a placeholder: %q", raw) } } for _, raw := range []string{ `lark-cli docs +fetch `, `lark-cli wiki +node-get --node-token `, `lark-cli whiteboard +update --whiteboard-token <画板Token>`, `lark-cli wiki +delete-space --space-id `, `lark-cli approval [flags]`, `lark-cli sheets <其它 flag>`, `lark-cli mail +draft-edit --draft-id `, `lark-cli vc-agent +meeting-events --meeting-id `, `lark-cli schema `, } { if !HasPlaceholder(raw) { t.Fatalf("expected placeholder for %q", raw) } } }