Skip to content

Commit b6b2394

Browse files
konardclaude
andcommitted
Add multiline quoted string tests for JavaScript and Rust
Following the C# test implementation, added equivalent test files: - js/tests/MultilineQuotedString.test.js (4 tests) - rust/tests/multiline_quoted_string_tests.rs (4 tests) All tests verify multiline quoted string support: - TestMultilineDoubleQuotedReference - TestSimpleMultilineDoubleQuoted - TestSimpleMultilineSingleQuoted - TestMultilineQuotedAsId All 84 JS tests and 84 Rust tests passing. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent dcbe64e commit b6b2394

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { test, expect } from "bun:test";
2+
import { Parser } from "../src/Parser.js";
3+
4+
const parser = new Parser();
5+
6+
test("TestMultilineDoubleQuotedReference", () => {
7+
const input = `(
8+
"long
9+
string literal representing
10+
the reference"
11+
12+
'another
13+
long string literal
14+
as another reference'
15+
)`;
16+
const result = parser.parse(input);
17+
18+
expect(result.length).toBeGreaterThan(0);
19+
expect(result.length).toBe(1);
20+
21+
const link = result[0];
22+
expect(link.id).toBe(null);
23+
expect(link.values).toBeTruthy();
24+
expect(link.values.length).toBe(2);
25+
26+
expect(link.values[0].id).toBe(`long
27+
string literal representing
28+
the reference`);
29+
30+
expect(link.values[1].id).toBe(`another
31+
long string literal
32+
as another reference`);
33+
});
34+
35+
test("TestSimpleMultilineDoubleQuoted", () => {
36+
const input = `("line1
37+
line2")`;
38+
const result = parser.parse(input);
39+
40+
expect(result.length).toBeGreaterThan(0);
41+
expect(result.length).toBe(1);
42+
43+
const link = result[0];
44+
expect(link.id).toBe(null);
45+
expect(link.values).toBeTruthy();
46+
expect(link.values.length).toBe(1);
47+
expect(link.values[0].id).toBe("line1\nline2");
48+
});
49+
50+
test("TestSimpleMultilineSingleQuoted", () => {
51+
const input = `('line1
52+
line2')`;
53+
const result = parser.parse(input);
54+
55+
expect(result.length).toBeGreaterThan(0);
56+
expect(result.length).toBe(1);
57+
58+
const link = result[0];
59+
expect(link.id).toBe(null);
60+
expect(link.values).toBeTruthy();
61+
expect(link.values.length).toBe(1);
62+
expect(link.values[0].id).toBe("line1\nline2");
63+
});
64+
65+
test("TestMultilineQuotedAsId", () => {
66+
const input = `("multi
67+
line
68+
id": value1 value2)`;
69+
const result = parser.parse(input);
70+
71+
expect(result.length).toBeGreaterThan(0);
72+
expect(result.length).toBe(1);
73+
74+
const link = result[0];
75+
expect(link.id).toBe("multi\nline\nid");
76+
expect(link.values).toBeTruthy();
77+
expect(link.values.length).toBe(2);
78+
});
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
use lino::{parse_lino, LiNo};
2+
3+
#[test]
4+
fn test_multiline_double_quoted_reference() {
5+
let input = r#"(
6+
"long
7+
string literal representing
8+
the reference"
9+
10+
'another
11+
long string literal
12+
as another reference'
13+
)"#;
14+
let result = parse_lino(input).unwrap();
15+
16+
if let LiNo::Link { id: outer_id, values: outer_values } = &result {
17+
assert!(outer_id.is_none());
18+
assert_eq!(outer_values.len(), 1);
19+
20+
if let LiNo::Link { id, values } = &outer_values[0] {
21+
assert!(id.is_none());
22+
assert_eq!(values.len(), 2);
23+
24+
if let LiNo::Ref(ref first_value) = values[0] {
25+
assert_eq!(first_value, "long\nstring literal representing\nthe reference");
26+
} else {
27+
panic!("Expected first value to be a Ref");
28+
}
29+
30+
if let LiNo::Ref(ref second_value) = values[1] {
31+
assert_eq!(second_value, "another\nlong string literal\nas another reference");
32+
} else {
33+
panic!("Expected second value to be a Ref");
34+
}
35+
} else {
36+
panic!("Expected first outer value to be a Link");
37+
}
38+
} else {
39+
panic!("Expected result to be a Link");
40+
}
41+
}
42+
43+
#[test]
44+
fn test_simple_multiline_double_quoted() {
45+
let input = r#"("line1
46+
line2")"#;
47+
let result = parse_lino(input).unwrap();
48+
49+
if let LiNo::Link { id, values } = &result {
50+
assert!(id.is_none());
51+
assert_eq!(values.len(), 1);
52+
53+
if let LiNo::Ref(ref value) = values[0] {
54+
assert_eq!(value, "line1\nline2");
55+
} else {
56+
panic!("Expected value to be a Ref");
57+
}
58+
} else {
59+
panic!("Expected result to be a Link");
60+
}
61+
}
62+
63+
#[test]
64+
fn test_simple_multiline_single_quoted() {
65+
let input = r#"('line1
66+
line2')"#;
67+
let result = parse_lino(input).unwrap();
68+
69+
if let LiNo::Link { id, values } = &result {
70+
assert!(id.is_none());
71+
assert_eq!(values.len(), 1);
72+
73+
if let LiNo::Ref(ref value) = values[0] {
74+
assert_eq!(value, "line1\nline2");
75+
} else {
76+
panic!("Expected value to be a Ref");
77+
}
78+
} else {
79+
panic!("Expected result to be a Link");
80+
}
81+
}
82+
83+
#[test]
84+
fn test_multiline_quoted_as_id() {
85+
let input = r#"("multi
86+
line
87+
id": value1 value2)"#;
88+
let result = parse_lino(input).unwrap();
89+
90+
if let LiNo::Link { id: outer_id, values: outer_values } = &result {
91+
assert!(outer_id.is_none());
92+
assert_eq!(outer_values.len(), 1);
93+
94+
if let LiNo::Link { id, values } = &outer_values[0] {
95+
assert_eq!(id.as_ref().unwrap(), "multi\nline\nid");
96+
assert_eq!(values.len(), 2);
97+
} else {
98+
panic!("Expected first value to be a Link");
99+
}
100+
} else {
101+
panic!("Expected result to be a Link");
102+
}
103+
}

0 commit comments

Comments
 (0)