// Copyright 2025 The Forgejo Authors. All rights reserved. // SPDX-License-Identifier: MIT package internal import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) type testIssueQueryStringOpt struct { Keyword string Results []Token } var testOpts = []testIssueQueryStringOpt{ { Keyword: "Hello", Results: []Token{ { Term: "Hello", Fuzzy: true, Kind: BoolOptShould, }, }, }, { Keyword: "Hello World", Results: []Token{ { Term: "Hello", Fuzzy: true, Kind: BoolOptShould, }, { Term: "World", Fuzzy: true, Kind: BoolOptShould, }, }, }, { Keyword: "+Hello +World", Results: []Token{ { Term: "Hello", Fuzzy: true, Kind: BoolOptMust, }, { Term: "World", Fuzzy: true, Kind: BoolOptMust, }, }, }, { Keyword: "+Hello World", Results: []Token{ { Term: "Hello", Fuzzy: true, Kind: BoolOptMust, }, { Term: "World", Fuzzy: true, Kind: BoolOptShould, }, }, }, { Keyword: "+Hello -World", Results: []Token{ { Term: "Hello", Fuzzy: true, Kind: BoolOptMust, }, { Term: "World", Fuzzy: true, Kind: BoolOptNot, }, }, }, { Keyword: "\"Hello World\"", Results: []Token{ { Term: "Hello World", Fuzzy: false, Kind: BoolOptShould, }, }, }, { Keyword: "+\"Hello World\"", Results: []Token{ { Term: "Hello World", Fuzzy: false, Kind: BoolOptMust, }, }, }, { Keyword: "-\"Hello World\"", Results: []Token{ { Term: "Hello World", Fuzzy: false, Kind: BoolOptNot, }, }, }, { Keyword: "\"+Hello -World\"", Results: []Token{ { Term: "+Hello -World", Fuzzy: false, Kind: BoolOptShould, }, }, }, { Keyword: "\\+Hello", // \+Hello => +Hello Results: []Token{ { Term: "+Hello", Fuzzy: true, Kind: BoolOptShould, }, }, }, { Keyword: "\\\\Hello", // \\Hello => \Hello Results: []Token{ { Term: "\\Hello", Fuzzy: true, Kind: BoolOptShould, }, }, }, { Keyword: "\\\"Hello", // \"Hello => "Hello Results: []Token{ { Term: "\"Hello", Fuzzy: true, Kind: BoolOptShould, }, }, }, } func TestIssueQueryString(t *testing.T) { var opt SearchOptions for _, res := range testOpts { t.Run(opt.Keyword, func(t *testing.T) { opt.Keyword = res.Keyword tokens, err := opt.Tokens() require.NoError(t, err) assert.Equal(t, res.Results, tokens) }) } }