92 lines
3.3 KiB
Swift
92 lines
3.3 KiB
Swift
import XCTest
|
|
@testable import TargetPrint
|
|
|
|
final class TargetJobTests: XCTestCase {
|
|
let validJSON = """
|
|
{
|
|
"version": 1,
|
|
"jobTitle": "Epson_XP55_IlfordLustre_Target_P1-2",
|
|
"files": ["/tmp/a.tif", "/tmp/b.tif"],
|
|
"printSettings": {
|
|
"printerName": "EPSON_XP_55_Series",
|
|
"mediaSize": "A4",
|
|
"mediaType": "PremiumGlossy",
|
|
"paperSource": "Auto",
|
|
"resolution": "5760x1440dpi",
|
|
"scaling": 1.0,
|
|
"centered": true,
|
|
"forceUnmanagedColor": true
|
|
},
|
|
"uiPolicy": {
|
|
"lockColorManagement": true,
|
|
"allowBasicDriverChanges": true
|
|
},
|
|
"unknownKey": "ignored"
|
|
}
|
|
"""
|
|
|
|
func testParsesValidJobAndIgnoresUnknownKeys() throws {
|
|
let job = try TargetJobParser.parse(text: validJSON)
|
|
XCTAssertEqual(job.version, 1)
|
|
XCTAssertEqual(job.jobTitle, "Epson_XP55_IlfordLustre_Target_P1-2")
|
|
XCTAssertEqual(job.files.count, 2)
|
|
XCTAssertEqual(job.printSettings.printerName, "EPSON_XP_55_Series")
|
|
XCTAssertEqual(job.printSettings.mediaSize, "A4")
|
|
XCTAssertEqual(job.printSettings.mediaType, "PremiumGlossy")
|
|
XCTAssertEqual(job.printSettings.scaling, 1.0, accuracy: 0.0001)
|
|
XCTAssertTrue(job.printSettings.centered)
|
|
XCTAssertTrue(job.printSettings.forceUnmanagedColor)
|
|
XCTAssertTrue(job.uiPolicy.lockColorManagement)
|
|
XCTAssertTrue(job.uiPolicy.allowBasicDriverChanges)
|
|
}
|
|
|
|
func testMissingRequiredKeyIsFatal() {
|
|
let json = """
|
|
{"version": 1, "jobTitle": "x", "files": ["/a.tif"],
|
|
"printSettings": {"printerName": "p", "mediaSize": "A4", "scaling": 1,
|
|
"centered": true, "forceUnmanagedColor": true}}
|
|
"""
|
|
XCTAssertThrowsError(try TargetJobParser.parse(text: json)) { error in
|
|
let app = error as? AppError
|
|
XCTAssertNotNil(app)
|
|
if case .invalidJob(let m)? = app {
|
|
XCTAssertTrue(m.contains("uiPolicy"), m)
|
|
} else {
|
|
XCTFail("expected invalidJob")
|
|
}
|
|
XCTAssertEqual((error as? AppError)?.exitCode, .invalidJob)
|
|
}
|
|
}
|
|
|
|
func testVersionMustBe1() {
|
|
let json = """
|
|
{"version": 2, "jobTitle": "x", "files": ["/a.tif"],
|
|
"printSettings": {"printerName": "p", "mediaSize": "A4", "scaling": 1,
|
|
"centered": true, "forceUnmanagedColor": true},
|
|
"uiPolicy": {"lockColorManagement": true, "allowBasicDriverChanges": true}}
|
|
"""
|
|
XCTAssertThrowsError(try TargetJobParser.parse(text: json))
|
|
}
|
|
|
|
func testEmptyFilesIsFatal() {
|
|
let json = """
|
|
{"version": 1, "jobTitle": "x", "files": [],
|
|
"printSettings": {"printerName": "p", "mediaSize": "A4", "scaling": 1,
|
|
"centered": true, "forceUnmanagedColor": true},
|
|
"uiPolicy": {"lockColorManagement": true, "allowBasicDriverChanges": true}}
|
|
"""
|
|
XCTAssertThrowsError(try TargetJobParser.parse(text: json))
|
|
}
|
|
|
|
func testInvalidJSON() {
|
|
XCTAssertThrowsError(try TargetJobParser.parse(text: "{"))
|
|
}
|
|
|
|
func testRoundTrip() throws {
|
|
let job = try TargetJobParser.parse(text: validJSON)
|
|
let data = try TargetJobParser.serialize(job)
|
|
let again = try TargetJobParser.parse(data: data)
|
|
XCTAssertEqual(job, again)
|
|
}
|
|
}
|