Skip to content

Commit 57843cd

Browse files
committed
KCL: Add unit tests for cleanup_type_string
1 parent 8ca76e8 commit 57843cd

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

rust/kcl-lib/src/docs/gen_std_tests.rs

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,91 @@ fn cleanup_type_string(input: &str, fmt_for_text: bool, kcl_std: &ModData) -> St
567567
tys.join(if fmt_for_text { " or " } else { " | " })
568568
}
569569

570+
#[test]
571+
fn test_cleanup_type_string() {
572+
enum Expected {
573+
Value(&'static str),
574+
Panic,
575+
}
576+
577+
struct Case {
578+
input: &'static str,
579+
expected_code: Expected,
580+
expected_text: Expected,
581+
}
582+
583+
use Expected::{Panic, Value};
584+
585+
let kcl_std = crate::docs::kcl_doc::walk_prelude();
586+
let cases = [
587+
Case {
588+
input: "[[Solid; 2]]",
589+
expected_code: Value("[[Solid; 2]]"),
590+
expected_text: Value("`[[Solid; 2]]`"),
591+
},
592+
Case {
593+
input: "[Solid; 1+]",
594+
expected_code: Value("[Solid; 1+]"),
595+
expected_text: Value("[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid)"),
596+
},
597+
Case {
598+
input: "[Solid; 1+] | ImportedGeometry",
599+
expected_code: Value("[Solid; 1+] | ImportedGeometry"),
600+
expected_text: Value(
601+
"[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) or [`ImportedGeometry`](/docs/kcl-std/types/std-types-ImportedGeometry)",
602+
),
603+
},
604+
Case {
605+
input: "[Solid | Sketch; 1+]",
606+
expected_code: Panic,
607+
expected_text: Panic,
608+
},
609+
Case {
610+
input: "[Solid | Sketch; 1+] | ImportedGeometry",
611+
expected_code: Value("[Solid | Sketch; 1+] | ImportedGeometry"),
612+
expected_text: Value(
613+
"`[Solid` or `Sketch; 1+]` or [`ImportedGeometry`](/docs/kcl-std/types/std-types-ImportedGeometry)",
614+
),
615+
},
616+
];
617+
618+
for case in cases {
619+
match case.expected_code {
620+
Value(expected) => {
621+
let actual = cleanup_type_string(case.input, false, &kcl_std);
622+
assert_eq!(actual, expected, "fmt_for_text=false failed for input {}", case.input);
623+
}
624+
Panic => {
625+
let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
626+
cleanup_type_string(case.input, false, &kcl_std)
627+
}));
628+
assert!(
629+
result.is_err(),
630+
"fmt_for_text=false expected panic for input {}",
631+
case.input
632+
);
633+
}
634+
}
635+
636+
match case.expected_text {
637+
Value(expected) => {
638+
let actual = cleanup_type_string(case.input, true, &kcl_std);
639+
assert_eq!(actual, expected, "fmt_for_text=true failed for input {}", case.input);
640+
}
641+
Panic => {
642+
let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
643+
cleanup_type_string(case.input, true, &kcl_std)
644+
}));
645+
assert!(
646+
result.is_err(),
647+
"fmt_for_text=true expected panic for input {}",
648+
case.input
649+
);
650+
}
651+
}
652+
}
653+
}
654+
570655
#[test]
571656
fn test_generate_stdlib_markdown_docs() {
572657
let kcl_std = crate::docs::kcl_doc::walk_prelude();
@@ -650,3 +735,53 @@ async fn run_example(text: &str) -> Result<()> {
650735
ctx.run(&program, &mut exec_state).await?;
651736
Ok(())
652737
}
738+
739+
#[cfg(test)]
740+
mod tests {
741+
use super::*;
742+
743+
#[test]
744+
fn test_cleanup_type_string() {
745+
let kcl_std = crate::docs::kcl_doc::walk_prelude();
746+
747+
struct Test {
748+
input: &'static str,
749+
expected_text: &'static str,
750+
expected_no_text: &'static str,
751+
}
752+
753+
let tests = [
754+
Test {
755+
input: "v",
756+
expected_text: "`v`",
757+
expected_no_text: "v",
758+
},
759+
Test {
760+
input: "number(mm)",
761+
expected_text: "[`number(mm)`](/docs/kcl-std/types/std-types-number)",
762+
expected_no_text: "number(mm)",
763+
},
764+
Test {
765+
input: "number(mm) | string",
766+
expected_text: "[`number(mm)`](/docs/kcl-std/types/std-types-number) or [`string`](/docs/kcl-std/types/std-types-string)",
767+
expected_no_text: "number(mm) | string",
768+
},
769+
Test {
770+
input: "[string; 1+]",
771+
expected_text: "[`[string; 1+]`](/docs/kcl-std/types/std-types-string)",
772+
expected_no_text: "[string; 1+]",
773+
},
774+
Test {
775+
input: "[string; 1+] | number(mm)",
776+
expected_text: "[`[string; 1+]`](/docs/kcl-std/types/std-types-string) or [`number(mm)`](/docs/kcl-std/types/std-types-number)",
777+
expected_no_text: "[string; 1+] | number(mm)",
778+
},
779+
];
780+
for test in tests {
781+
let actual_text = cleanup_type_string(test.input, true, &kcl_std);
782+
assert_eq!(actual_text, test.expected_text);
783+
let actual_no_text = cleanup_type_string(test.input, false, &kcl_std);
784+
assert_eq!(actual_no_text, test.expected_no_text);
785+
}
786+
}
787+
}

0 commit comments

Comments
 (0)