Skip to content

Commit ca029b1

Browse files
committed
add regression test
Signed-off-by: Matteo Collina <[email protected]>
1 parent 159ef3a commit ca029b1

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

test/issue-793.test.js

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
'use strict'
2+
3+
const { test } = require('node:test')
4+
5+
const build = require('..')
6+
7+
test('serialize string with newlines - issue #793', (t) => {
8+
t.plan(2)
9+
10+
const schema = {
11+
type: 'object',
12+
properties: {
13+
message: {
14+
type: 'string'
15+
}
16+
}
17+
}
18+
19+
const input = {
20+
message: `This is a string
21+
with multiple
22+
newlines in it
23+
Foo`
24+
}
25+
26+
const stringify = build(schema)
27+
const output = stringify(input)
28+
29+
// The output should be valid JSON
30+
t.assert.doesNotThrow(() => {
31+
JSON.parse(output)
32+
}, 'JSON output should be parseable')
33+
34+
// The parsed output should match the input
35+
const parsed = JSON.parse(output)
36+
t.assert.equal(parsed.message, input.message)
37+
})
38+
39+
test('serialize string with various newline characters - issue #793', (t) => {
40+
t.plan(4)
41+
42+
const schema = {
43+
type: 'string'
44+
}
45+
46+
const stringify = build(schema)
47+
48+
// Test \n (line feed)
49+
const inputLF = 'line1\nline2'
50+
const outputLF = stringify(inputLF)
51+
t.assert.equal(JSON.parse(outputLF), inputLF)
52+
53+
// Test \r (carriage return)
54+
const inputCR = 'line1\rline2'
55+
const outputCR = stringify(inputCR)
56+
t.assert.equal(JSON.parse(outputCR), inputCR)
57+
58+
// Test \r\n (CRLF)
59+
const inputCRLF = 'line1\r\nline2'
60+
const outputCRLF = stringify(inputCRLF)
61+
t.assert.equal(JSON.parse(outputCRLF), inputCRLF)
62+
63+
// Test mixed newlines
64+
const inputMixed = 'line1\nline2\rline3\r\nline4'
65+
const outputMixed = stringify(inputMixed)
66+
t.assert.equal(JSON.parse(outputMixed), inputMixed)
67+
})
68+
69+
test('serialize object with newlines in multiple properties - issue #793', (t) => {
70+
t.plan(2)
71+
72+
const schema = {
73+
type: 'object',
74+
properties: {
75+
message: {
76+
type: 'string'
77+
},
78+
description: {
79+
type: 'string'
80+
},
81+
timestamp: {
82+
type: 'string'
83+
}
84+
}
85+
}
86+
87+
const input = {
88+
message: `This is a string
89+
with multiple
90+
newlines in it
91+
Foo`,
92+
description: 'This JSON response contains a field with newline characters',
93+
timestamp: new Date().toISOString()
94+
}
95+
96+
const stringify = build(schema)
97+
const output = stringify(input)
98+
99+
// The output should be valid JSON
100+
t.assert.doesNotThrow(() => {
101+
JSON.parse(output)
102+
}, 'JSON output should be parseable')
103+
104+
// The parsed output should match the input
105+
const parsed = JSON.parse(output)
106+
t.assert.deepEqual(parsed, input)
107+
})

0 commit comments

Comments
 (0)