// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // t_builtin-iterator.go package expr import ( "fmt" "os" "testing" ) const ( testFilePath = "/tmp/.go-test.txt" ) func TestFuncRun(t *testing.T) { section := "Builtin-Iterator" inputs := []inputType{ /* 1 */ {`builtin "iterator"; it=$(1,2,3); run(it)`, nil, nil}, /* 2 */ {`builtin "iterator"; run($(1,2,3), func(index,item){item+10})`, nil, nil}, /* 3 */ {`builtin "iterator"; run($(..4), func(index,item){status=status+item; true}, {"status":0})`, int64(6), nil}, /* 4 */ {`builtin ["iterator", "fmt"]; run($(1,2,3), func(index,item){println(item+10)})`, nil, nil}, /* 5 */ {`builtin "iterator"; run(nil)`, nil, `type of "iterator" must be iterator, passed [nil]`}, /* 6 */ {`builtin "iterator"; run($(1,2,3), nil)`, int64(3), nil}, /* 7 */ {`builtin "iterator"; run($(1,2,3), func(){1}, "prrr")`, nil, `type of "vars" must be dict, passed prrr [string]`}, /* 8 */ {`builtin "iterator"; run($(1,2,3), operator=nil)`, int64(3), nil}, /* 9 */ {`builtin "iterator"; run($(1,2,3), operatorx=nil)`, nil, `run(): unknown param "operatorx"`}, /* 10 */ {fmt.Sprintf(`builtin ["os.file", "iterator"]; it = fileLineIterator(%q); run(it)`, testFilePath), int64(2), nil}, /* 11 */ {`builtin "iterator"; op = func(index, item){ (index > 2) ? {abort("aborted")} :: {status="ok"} }; run($(..5), op)`, "aborted", nil}, /* 12 */ {`builtin "iterator"; op = func(index, item){ (index > 2) ? {abort("aborted")} :: {status="ok"} }; run($(..1), op)`, "ok", nil}, } if err := setupBuiltinIterator(); err != nil { t.Error(err) return } //t.Setenv("EXPR_PATH", ".") // RunTestSuiteSpec(t, section, inputs, 10) RunTestSuite(t, section, inputs) cleanupBuiltinIterator() } func setupBuiltinIterator() (err error) { var fh *os.File // Create test file if fh, err = os.Create(testFilePath); err == nil { defer fh.Close() fmt.Fprintln(fh, "uno") fmt.Fprintln(fh, "due") } return } func cleanupBuiltinIterator() { if fileExists(testFilePath) { os.Remove(testFilePath) } }