You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.1 KiB
32 lines
1.1 KiB
import Testing
|
|
import Foundation
|
|
@testable import Music
|
|
|
|
struct NDJSONTransportTests {
|
|
|
|
// Verifies that feed() correctly splits newline-delimited input into individual lines.
|
|
@Test func splitsLinesCorrectly() {
|
|
var lines: [String] = []
|
|
let buffer = NDJSONLineBuffer { lines.append($0) }
|
|
buffer.feed(Data("{\"type\":\"pause\"}\n{\"type\":\"resume\"}\n".utf8))
|
|
#expect(lines == ["{\"type\":\"pause\"}", "{\"type\":\"resume\"}"])
|
|
}
|
|
|
|
// Verifies that a line split across two TCP reads is reassembled.
|
|
@Test func handlesPartialLines() {
|
|
var lines: [String] = []
|
|
let buffer = NDJSONLineBuffer { lines.append($0) }
|
|
buffer.feed(Data("{\"type\":\"pa".utf8))
|
|
#expect(lines.isEmpty)
|
|
buffer.feed(Data("use\"}\n".utf8))
|
|
#expect(lines == ["{\"type\":\"pause\"}"])
|
|
}
|
|
|
|
// Verifies empty lines are ignored.
|
|
@Test func ignoresEmptyLines() {
|
|
var lines: [String] = []
|
|
let buffer = NDJSONLineBuffer { lines.append($0) }
|
|
buffer.feed(Data("\n\n{\"type\":\"next\"}\n\n".utf8))
|
|
#expect(lines == ["{\"type\":\"next\"}"])
|
|
}
|
|
}
|
|
|