@@ -19,6 +19,9 @@ def test_detect_code_language_known_extensions() -> None:
1919 assert detect_code_language (filename = "App.vue" ) == "vue"
2020 assert detect_code_language (filename = "script.jl" ) == "julia"
2121 assert detect_code_language (filename = "Main.elm" ) == "elm"
22+ assert detect_code_language (filename = "deploy.sh" ) == "bash"
23+ assert detect_code_language (filename = "CMakeLists.cmake" ) == "cmake"
24+ assert detect_code_language (filename = "main.tf" ) == "hcl"
2225
2326
2427def test_detect_code_language_unknown_extension () -> None :
@@ -275,3 +278,60 @@ def test_custom_language_config_alias() -> None:
275278 assert len (chunks ) == 2
276279 assert chunks [0 ].text == "PartA"
277280 assert chunks [1 ].text == "PartB"
281+
282+
283+ def test_recursive_splitter_with_bash () -> None :
284+ """Test RecursiveSplitter with Bash syntax-aware splitting."""
285+ splitter = RecursiveSplitter ()
286+ code = (
287+ "#!/usr/bin/env bash\n \n "
288+ "greet() {\n "
289+ ' echo "Hello, $1!"\n '
290+ "}\n \n "
291+ "for name in Alice Bob; do\n "
292+ " greet \" $name\" \n "
293+ "done\n "
294+ )
295+ chunks = splitter .split (code , chunk_size = 60 , min_chunk_size = 20 , language = "bash" )
296+
297+ assert len (chunks ) >= 1
298+ assert all (isinstance (c , Chunk ) for c in chunks )
299+
300+
301+ def test_recursive_splitter_with_cmake () -> None :
302+ """Test RecursiveSplitter with CMake syntax-aware splitting."""
303+ splitter = RecursiveSplitter ()
304+ code = (
305+ "cmake_minimum_required(VERSION 3.20)\n "
306+ "project(MyProject)\n \n "
307+ "function(add_my_target name)\n "
308+ " add_executable(${name} main.cpp)\n "
309+ " target_compile_features(${name} PRIVATE cxx_std_17)\n "
310+ "endfunction()\n \n "
311+ "add_my_target(app)\n "
312+ )
313+ chunks = splitter .split (code , chunk_size = 80 , min_chunk_size = 20 , language = "cmake" )
314+
315+ assert len (chunks ) >= 1
316+ assert all (isinstance (c , Chunk ) for c in chunks )
317+
318+
319+ def test_recursive_splitter_with_hcl () -> None :
320+ """Test RecursiveSplitter with HCL/Terraform syntax-aware splitting."""
321+ splitter = RecursiveSplitter ()
322+ code = (
323+ 'terraform {\n required_version = ">= 1.0"\n }\n \n '
324+ 'resource "aws_s3_bucket" "example" {\n '
325+ ' bucket = "my-bucket"\n \n '
326+ " tags = {\n "
327+ ' Name = "example"\n '
328+ " }\n "
329+ "}\n \n "
330+ 'output "bucket_name" {\n '
331+ ' value = aws_s3_bucket.example.bucket\n '
332+ "}\n "
333+ )
334+ chunks = splitter .split (code , chunk_size = 80 , min_chunk_size = 20 , language = "hcl" )
335+
336+ assert len (chunks ) >= 1
337+ assert all (isinstance (c , Chunk ) for c in chunks )
0 commit comments