From a0ce12f05ab5d5ba6fc7c6a560964347abc00f24 Mon Sep 17 00:00:00 2001 From: jinhyuk9714 Date: Tue, 19 May 2026 11:51:47 +0900 Subject: [PATCH] Fix XPath boolean result output --- internal/utils/utils.go | 2 ++ internal/utils/utils_test.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/utils/utils.go b/internal/utils/utils.go index ea7b479..6a31f26 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -243,6 +243,8 @@ func XPathQuery(reader io.Reader, writer io.Writer, query string, singleNode boo switch typedVal := val.(type) { case float64: _, err = fmt.Fprintf(writer, "%.0f\n", typedVal) + case bool: + _, err = fmt.Fprintf(writer, "%t\n", typedVal) case string: _, err = fmt.Fprintf(writer, "%s\n", strings.TrimSpace(typedVal)) case *xpath.NodeIterator: diff --git a/internal/utils/utils_test.go b/internal/utils/utils_test.go index b3116ea..a2dbc5a 100644 --- a/internal/utils/utils_test.go +++ b/internal/utils/utils_test.go @@ -128,6 +128,21 @@ func TestXPathQuery(t *testing.T) { } } +func TestXPathQueryBoolean(t *testing.T) { + tests := map[string]string{ + "boolean(//root)": "true", + "boolean(//missing)": "false", + } + + for query, expected := range tests { + output := new(strings.Builder) + options := QueryOptions{} + err := XPathQuery(strings.NewReader(``), output, query, false, options) + assert.Nil(t, err) + assert.Equal(t, expected, strings.Trim(output.String(), "\n")) + } +} + func TestCSSQuery(t *testing.T) { type test struct { input string