mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
2978 files. The fork is 2026-07-15 (rebrand: gitea.dev -> github.com/hanzoai/git), so 2026 is the year, and "Copyright 2026 Hanzo AI, Inc." was already the form used by the handful of files that had ours. Shape is now: // Copyright 2026 Hanzo AI, Inc. All rights reserved. // Copyright 2015 The Gogs Authors. All rights reserved. // Copyright 2019 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT Ours on top, theirs retained verbatim. Retained because MIT requires it, and separately because they are true — those authors did write that code. Not renamed to "The Git Authors": Git is a different project under a different license, and putting its name here would attribute this code to people who have nothing to do with it. Adding our line is the fix; overwriting theirs would have been both a licence violation and a false statement. gofmt still reports import-order drift in some of these files. It predates this change (verified against a stash) and is left alone rather than burying a one-line-per-file legal change under 3000 files of unrelated reordering. Build clean. Co-authored-by: Hanzo Dev <[email protected]>
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package path
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/blevesearch/bleve/v2/analysis"
|
|
"github.com/blevesearch/bleve/v2/analysis/tokenizer/unicode"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type Scenario struct {
|
|
Input string
|
|
Tokens []string
|
|
}
|
|
|
|
func TestTokenFilter(t *testing.T) {
|
|
scenarios := []struct {
|
|
Input string
|
|
Terms []string
|
|
}{
|
|
{
|
|
Input: "Dockerfile",
|
|
Terms: []string{"Dockerfile"},
|
|
},
|
|
{
|
|
Input: "Dockerfile.rootless",
|
|
Terms: []string{"Dockerfile.rootless"},
|
|
},
|
|
{
|
|
Input: "a/b/c/Dockerfile.rootless",
|
|
Terms: []string{"a", "a/b", "a/b/c", "a/b/c/Dockerfile.rootless", "Dockerfile.rootless", "Dockerfile.rootless/c", "Dockerfile.rootless/c/b", "Dockerfile.rootless/c/b/a"},
|
|
},
|
|
{
|
|
Input: "",
|
|
Terms: []string{},
|
|
},
|
|
}
|
|
|
|
for _, scenario := range scenarios {
|
|
t.Run(fmt.Sprintf("ensure terms of '%s'", scenario.Input), func(t *testing.T) {
|
|
terms := extractTerms(scenario.Input)
|
|
|
|
assert.Len(t, terms, len(scenario.Terms))
|
|
|
|
for _, term := range terms {
|
|
assert.Contains(t, scenario.Terms, term)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func extractTerms(input string) []string {
|
|
tokens := tokenize(input)
|
|
filteredTokens := filter(tokens)
|
|
terms := make([]string, 0, len(filteredTokens))
|
|
|
|
for _, token := range filteredTokens {
|
|
terms = append(terms, string(token.Term))
|
|
}
|
|
|
|
return terms
|
|
}
|
|
|
|
func filter(input analysis.TokenStream) analysis.TokenStream {
|
|
filter := NewTokenFilter()
|
|
return filter.Filter(input)
|
|
}
|
|
|
|
func tokenize(input string) analysis.TokenStream {
|
|
tokenizer := unicode.NewUnicodeTokenizer()
|
|
return tokenizer.Tokenize([]byte(input))
|
|
}
|