115 lines
3.8 KiB
Python
115 lines
3.8 KiB
Python
import os
|
|
import sys
|
|
import unittest
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
import test_helper
|
|
|
|
from nodes.text_split import SaturnTextSplit
|
|
|
|
class TestSaturnTextSplit(unittest.TestCase):
|
|
def setUp(self):
|
|
self.node = SaturnTextSplit()
|
|
|
|
def test_forward_literal_split_basic(self):
|
|
# User standard case: "Hello --- Bye" with delimiter "--"
|
|
t1, t2 = self.node.split_text(
|
|
text="Hello --- Bye",
|
|
split_by="--",
|
|
use_regex=False,
|
|
split_direction="forward (first occurrence from start)",
|
|
strip_whitespace=False
|
|
)
|
|
self.assertEqual(t1, "Hello ")
|
|
self.assertEqual(t2, "- Bye")
|
|
|
|
def test_backward_literal_split_basic(self):
|
|
# Splitting from end
|
|
t1, t2 = self.node.split_text(
|
|
text="Hello --- Bye",
|
|
split_by="--",
|
|
use_regex=False,
|
|
split_direction="backward (last occurrence from end)",
|
|
strip_whitespace=False
|
|
)
|
|
self.assertEqual(t1, "Hello -")
|
|
self.assertEqual(t2, " Bye")
|
|
|
|
def test_strip_whitespace(self):
|
|
t1, t2 = self.node.split_text(
|
|
text=" Left Part --- Right Part ",
|
|
split_by="---",
|
|
use_regex=False,
|
|
strip_whitespace=True
|
|
)
|
|
self.assertEqual(t1, "Left Part")
|
|
self.assertEqual(t2, "Right Part")
|
|
|
|
def test_forward_regex_split(self):
|
|
t1, t2 = self.node.split_text(
|
|
text="prompt_v1__step_100__seed_42",
|
|
split_by=r"__step_\d+__",
|
|
use_regex=True,
|
|
split_direction="forward (first occurrence from start)"
|
|
)
|
|
self.assertEqual(t1, "prompt_v1")
|
|
self.assertEqual(t2, "seed_42")
|
|
|
|
def test_backward_regex_split(self):
|
|
t1, t2 = self.node.split_text(
|
|
text="tag1#123tag2#456tag3",
|
|
split_by=r"#\d+",
|
|
use_regex=True,
|
|
split_direction="backward (last occurrence from end)"
|
|
)
|
|
self.assertEqual(t1, "tag1#123tag2")
|
|
self.assertEqual(t2, "tag3")
|
|
|
|
def test_edge_case_empty_text(self):
|
|
t1, t2 = self.node.split_text(text="", split_by="--")
|
|
self.assertEqual(t1, "")
|
|
self.assertEqual(t2, "")
|
|
|
|
def test_edge_case_none_text(self):
|
|
t1, t2 = self.node.split_text(text=None, split_by="--")
|
|
self.assertEqual(t1, "")
|
|
self.assertEqual(t2, "")
|
|
|
|
def test_edge_case_empty_delimiter(self):
|
|
t1, t2 = self.node.split_text(text="Some text", split_by="")
|
|
self.assertEqual(t1, "Some text")
|
|
self.assertEqual(t2, "")
|
|
|
|
def test_edge_case_delimiter_not_found(self):
|
|
t1, t2 = self.node.split_text(text="Hello World", split_by="---")
|
|
self.assertEqual(t1, "Hello World")
|
|
self.assertEqual(t2, "")
|
|
|
|
def test_edge_case_delimiter_at_start(self):
|
|
t1, t2 = self.node.split_text(text="--Rest of message", split_by="--")
|
|
self.assertEqual(t1, "")
|
|
self.assertEqual(t2, "Rest of message")
|
|
|
|
def test_edge_case_delimiter_at_end(self):
|
|
t1, t2 = self.node.split_text(text="First part--", split_by="--")
|
|
self.assertEqual(t1, "First part")
|
|
self.assertEqual(t2, "")
|
|
|
|
def test_edge_case_invalid_regex_fallback(self):
|
|
t1, t2 = self.node.split_text(
|
|
text="Hello [unclosed bracket World",
|
|
split_by="[unclosed bracket",
|
|
use_regex=True
|
|
)
|
|
self.assertEqual(t1, "Hello ")
|
|
self.assertEqual(t2, " World")
|
|
|
|
def test_multiline_text_split(self):
|
|
text = "Line 1\nLine 2\n---\nLine 3\nLine 4"
|
|
t1, t2 = self.node.split_text(text=text, split_by="\n---\n")
|
|
self.assertEqual(t1, "Line 1\nLine 2")
|
|
self.assertEqual(t2, "Line 3\nLine 4")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|