Skip to content

Commit d5ec779

Browse files
unhappychoiceclaude
andcommitted
test: add unit tests for Language trait implementations
Add comprehensive tests for all 17 supported language implementations: - C, C++, C#, Dart, Go, Haskell, Java, JavaScript, Kotlin, PHP - Python, Ruby, Rust, Scala, Swift, TypeScript, Zig - Test name, extensions, display_name, color, comment validation - Improve language model test coverage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent df9da80 commit d5ec779

19 files changed

+1058
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
use gittype::domain::models::languages::c::C;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = C;
7+
assert_eq!(lang.name(), "c");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = C;
13+
assert_eq!(lang.extensions(), vec!["c", "h"]);
14+
}
15+
16+
#[test]
17+
fn test_display_name() {
18+
let lang = C;
19+
assert_eq!(lang.display_name(), "C");
20+
}
21+
22+
#[test]
23+
fn test_color() {
24+
let lang = C;
25+
let _ = lang.color();
26+
}
27+
28+
#[test]
29+
fn test_is_valid_comment_node() {
30+
let lang = C;
31+
let code = "// comment\nint main() { return 0; }";
32+
let mut parser = tree_sitter::Parser::new();
33+
parser
34+
.set_language(&tree_sitter_c::LANGUAGE.into())
35+
.unwrap();
36+
let tree = parser.parse(code, None).unwrap();
37+
let root = tree.root_node();
38+
39+
let mut cursor = root.walk();
40+
for child in root.children(&mut cursor) {
41+
if child.kind() == "comment" {
42+
assert!(lang.is_valid_comment_node(child));
43+
}
44+
}
45+
}
46+
47+
#[test]
48+
fn test_clone() {
49+
let lang = C;
50+
let cloned = lang;
51+
assert_eq!(lang, cloned);
52+
}
53+
54+
#[test]
55+
fn test_debug() {
56+
let lang = C;
57+
let debug_str = format!("{:?}", lang);
58+
assert!(debug_str.contains("C"));
59+
}
60+
61+
#[test]
62+
fn test_hash() {
63+
use std::collections::HashSet;
64+
let lang = C;
65+
let mut set = HashSet::new();
66+
set.insert(lang);
67+
assert!(set.contains(&C));
68+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
use gittype::domain::models::languages::cpp::Cpp;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = Cpp;
7+
assert_eq!(lang.name(), "cpp");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = Cpp;
13+
let exts = lang.extensions();
14+
assert!(exts.contains(&"cpp"));
15+
assert!(exts.contains(&"cc"));
16+
}
17+
18+
#[test]
19+
fn test_display_name() {
20+
let lang = Cpp;
21+
assert_eq!(lang.display_name(), "C++");
22+
}
23+
24+
#[test]
25+
fn test_color() {
26+
let lang = Cpp;
27+
let _ = lang.color();
28+
}
29+
30+
#[test]
31+
fn test_is_valid_comment_node() {
32+
let lang = Cpp;
33+
let code = "// comment\nint main() { return 0; }";
34+
let mut parser = tree_sitter::Parser::new();
35+
parser
36+
.set_language(&tree_sitter_cpp::LANGUAGE.into())
37+
.unwrap();
38+
let tree = parser.parse(code, None).unwrap();
39+
let root = tree.root_node();
40+
41+
let mut cursor = root.walk();
42+
for child in root.children(&mut cursor) {
43+
if child.kind() == "comment" {
44+
assert!(lang.is_valid_comment_node(child));
45+
}
46+
}
47+
}
48+
49+
#[test]
50+
fn test_clone() {
51+
let lang = Cpp;
52+
let cloned = lang;
53+
assert_eq!(lang, cloned);
54+
}
55+
56+
#[test]
57+
fn test_debug() {
58+
let lang = Cpp;
59+
let debug_str = format!("{:?}", lang);
60+
assert!(debug_str.contains("Cpp"));
61+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
use gittype::domain::models::languages::csharp::CSharp;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = CSharp;
7+
assert_eq!(lang.name(), "csharp");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = CSharp;
13+
let exts = lang.extensions();
14+
assert!(exts.contains(&"cs"));
15+
assert!(exts.contains(&"csx"));
16+
}
17+
18+
#[test]
19+
fn test_display_name() {
20+
let lang = CSharp;
21+
assert_eq!(lang.display_name(), "C#");
22+
}
23+
24+
#[test]
25+
fn test_color() {
26+
let lang = CSharp;
27+
let _ = lang.color();
28+
}
29+
30+
#[test]
31+
fn test_is_valid_comment_node() {
32+
let lang = CSharp;
33+
let code = "// comment\nclass Test { }";
34+
let mut parser = tree_sitter::Parser::new();
35+
parser
36+
.set_language(&tree_sitter_c_sharp::LANGUAGE.into())
37+
.unwrap();
38+
let tree = parser.parse(code, None).unwrap();
39+
let root = tree.root_node();
40+
41+
let mut cursor = root.walk();
42+
for child in root.children(&mut cursor) {
43+
if child.kind() == "comment" {
44+
assert!(lang.is_valid_comment_node(child));
45+
}
46+
}
47+
}
48+
49+
#[test]
50+
fn test_clone() {
51+
let lang = CSharp;
52+
let cloned = lang;
53+
assert_eq!(lang, cloned);
54+
}
55+
56+
#[test]
57+
fn test_debug() {
58+
let lang = CSharp;
59+
let debug_str = format!("{:?}", lang);
60+
assert!(debug_str.contains("CSharp"));
61+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use gittype::domain::models::languages::dart::Dart;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = Dart;
7+
assert_eq!(lang.name(), "dart");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = Dart;
13+
assert_eq!(lang.extensions(), vec!["dart"]);
14+
}
15+
16+
#[test]
17+
fn test_display_name() {
18+
let lang = Dart;
19+
assert_eq!(lang.display_name(), "Dart");
20+
}
21+
22+
#[test]
23+
fn test_color() {
24+
let lang = Dart;
25+
let _ = lang.color();
26+
}
27+
28+
#[test]
29+
fn test_is_valid_comment_node() {
30+
let lang = Dart;
31+
let code = "// comment\n/// doc comment\nvoid main() { }";
32+
let mut parser = tree_sitter::Parser::new();
33+
parser.set_language(&tree_sitter_dart::language()).unwrap();
34+
let tree = parser.parse(code, None).unwrap();
35+
let root = tree.root_node();
36+
37+
let mut cursor = root.walk();
38+
for child in root.children(&mut cursor) {
39+
if child.kind() == "comment" || child.kind() == "documentation_comment" {
40+
assert!(lang.is_valid_comment_node(child));
41+
}
42+
}
43+
}
44+
45+
#[test]
46+
fn test_clone() {
47+
let lang = Dart;
48+
let cloned = lang;
49+
assert_eq!(lang, cloned);
50+
}
51+
52+
#[test]
53+
fn test_debug() {
54+
let lang = Dart;
55+
let debug_str = format!("{:?}", lang);
56+
assert!(debug_str.contains("Dart"));
57+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
use gittype::domain::models::languages::go::Go;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = Go;
7+
assert_eq!(lang.name(), "go");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = Go;
13+
assert_eq!(lang.extensions(), vec!["go"]);
14+
}
15+
16+
#[test]
17+
fn test_display_name() {
18+
let lang = Go;
19+
assert_eq!(lang.display_name(), "Go");
20+
}
21+
22+
#[test]
23+
fn test_color() {
24+
let lang = Go;
25+
let _ = lang.color();
26+
}
27+
28+
#[test]
29+
fn test_is_valid_comment_node() {
30+
let lang = Go;
31+
let code = "// comment\nfunc main() { }";
32+
let mut parser = tree_sitter::Parser::new();
33+
parser
34+
.set_language(&tree_sitter_go::LANGUAGE.into())
35+
.unwrap();
36+
let tree = parser.parse(code, None).unwrap();
37+
let root = tree.root_node();
38+
39+
let mut cursor = root.walk();
40+
for child in root.children(&mut cursor) {
41+
if child.kind() == "comment" {
42+
assert!(lang.is_valid_comment_node(child));
43+
}
44+
}
45+
}
46+
47+
#[test]
48+
fn test_clone() {
49+
let lang = Go;
50+
let cloned = lang;
51+
assert_eq!(lang, cloned);
52+
}
53+
54+
#[test]
55+
fn test_debug() {
56+
let lang = Go;
57+
let debug_str = format!("{:?}", lang);
58+
assert!(debug_str.contains("Go"));
59+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
use gittype::domain::models::languages::haskell::Haskell;
2+
use gittype::domain::models::Language;
3+
4+
#[test]
5+
fn test_name() {
6+
let lang = Haskell;
7+
assert_eq!(lang.name(), "haskell");
8+
}
9+
10+
#[test]
11+
fn test_extensions() {
12+
let lang = Haskell;
13+
let exts = lang.extensions();
14+
assert!(exts.contains(&"hs"));
15+
assert!(exts.contains(&"lhs"));
16+
}
17+
18+
#[test]
19+
fn test_display_name() {
20+
let lang = Haskell;
21+
assert_eq!(lang.display_name(), "Haskell");
22+
}
23+
24+
#[test]
25+
fn test_color() {
26+
let lang = Haskell;
27+
let _ = lang.color();
28+
}
29+
30+
#[test]
31+
fn test_is_valid_comment_node() {
32+
let lang = Haskell;
33+
let code = "-- comment\nmain = return ()";
34+
let mut parser = tree_sitter::Parser::new();
35+
parser
36+
.set_language(&tree_sitter_haskell::LANGUAGE.into())
37+
.unwrap();
38+
let tree = parser.parse(code, None).unwrap();
39+
let root = tree.root_node();
40+
41+
let mut cursor = root.walk();
42+
for child in root.children(&mut cursor) {
43+
if child.kind() == "comment" {
44+
assert!(lang.is_valid_comment_node(child));
45+
}
46+
}
47+
}
48+
49+
#[test]
50+
fn test_clone() {
51+
let lang = Haskell;
52+
let cloned = lang;
53+
assert_eq!(lang, cloned);
54+
}
55+
56+
#[test]
57+
fn test_debug() {
58+
let lang = Haskell;
59+
let debug_str = format!("{:?}", lang);
60+
assert!(debug_str.contains("Haskell"));
61+
}

0 commit comments

Comments
 (0)