Files
ragflow/internal/utility/split_test.go

97 lines
2.9 KiB
Go
Raw Normal View History

//
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package utility
import "testing"
// SplitKeywords - Python task_executor.run_dataflow:879
// re.split(r"[,;;、\r\n]+", keywords) with empty filtering.
func TestSplitKeywords_Comma(t *testing.T) {
result := SplitKeywords("kw1,kw2,kw3")
if len(result) != 3 {
t.Fatalf("len = %d, want 3", len(result))
}
}
func TestSplitKeywords_ChineseComma(t *testing.T) {
result := SplitKeywords("kw1kw2kw3")
if len(result) != 3 {
t.Fatalf("len = %d, want 3", len(result))
}
}
func TestSplitKeywords_MixedDelimiters(t *testing.T) {
result := SplitKeywords("kw1,kw2kw3")
if len(result) != 3 {
t.Fatalf("len = %d, want 3, got %v", len(result), result)
}
}
func TestSplitKeywords_FiltersEmptyStrings(t *testing.T) {
result := SplitKeywords("kw1,,kw2")
if len(result) != 2 {
t.Errorf("empty strings should be filtered: got %v", result)
}
}
func TestSplitKeywords_Empty(t *testing.T) {
result := SplitKeywords("")
if len(result) != 0 {
t.Errorf("got %v, want empty", result)
}
}
// SplitQuestions - splits by newline only, dropping empty lines.
func TestSplitQuestions_MultipleLines(t *testing.T) {
result := SplitQuestions("Q1\nQ2\nQ3")
if len(result) != 3 || result[0] != "Q1" || result[2] != "Q3" {
t.Fatalf("got %v, want [Q1 Q2 Q3]", result)
}
}
func TestSplitQuestions_Empty(t *testing.T) {
if result := SplitQuestions(""); result != nil {
t.Errorf("got %v, want nil", result)
}
}
func TestSplitQuestions_TrailingNewlineDropped(t *testing.T) {
// "Q1\n" would yield ["Q1", ""] with a plain split; the trailing empty
// must be filtered so the index is not seeded with a spurious [""].
result := SplitQuestions("Q1\n")
if len(result) != 1 || result[0] != "Q1" {
t.Fatalf("got %v, want [Q1]", result)
}
}
func TestSplitQuestions_BlankLinesDropped(t *testing.T) {
result := SplitQuestions("Q1\n\nQ2")
if len(result) != 2 || result[0] != "Q1" || result[1] != "Q2" {
t.Fatalf("got %v, want [Q1 Q2]", result)
}
}
func TestSplitQuestions_PreservesCommas(t *testing.T) {
// Unlike SplitKeywords, questions must NOT split on commas.
result := SplitQuestions("请问A,B和C有何区别")
if len(result) != 1 || result[0] != "请问A,B和C有何区别" {
t.Fatalf("got %v, want single element preserving comma", result)
}
}