1
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import AppKit
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct SpreadsheetLayoutTests {
|
||||
@MainActor static func main() throws {
|
||||
let source = URL(fileURLWithPath: CommandLine.arguments[1])
|
||||
let layout = try JSONDecoder().decode(SpreadsheetLayout.self, from: Data(contentsOf: source)).validated()
|
||||
let sheet = layout.sheets[0]
|
||||
let narrow = SpreadsheetZoom.width.scale(sheet: sheet, viewport: CGSize(width: 800, height: 500))
|
||||
let wide = SpreadsheetZoom.width.scale(sheet: sheet, viewport: CGSize(width: 1800, height: 900))
|
||||
precondition(narrow * sheet.width <= 752)
|
||||
precondition(wide == 1)
|
||||
let page = SpreadsheetZoom.page.scale(sheet: sheet, viewport: CGSize(width: 800, height: 500))
|
||||
precondition(page * sheet.height <= 452)
|
||||
precondition(SpreadsheetZoom.actual.scale(sheet: sheet, viewport: .zero) == 1)
|
||||
precondition(sheet.cells.first { $0.reference == "H30" }?.style.rotation == 255)
|
||||
precondition(sheet.cells.first { $0.reference == "C25" }?.text == "001234567890")
|
||||
precondition(sheet.cells.first { $0.reference == "F27" }?.text.trimmingCharacters(in: .whitespaces) == "544.30")
|
||||
let signature = sheet.cells.first { $0.reference == "A30" }!
|
||||
precondition(signature.textClip.width > signature.width)
|
||||
print("Workbook layout, zoom bounds, vertical text and exact values passed")
|
||||
if CommandLine.arguments.count > 2 {
|
||||
let folder = URL(fileURLWithPath: CommandLine.arguments[2], isDirectory: true)
|
||||
try FileManager.default.createDirectory(at: folder, withIntermediateDirectories: true)
|
||||
_ = NSApplication.shared
|
||||
NSApplication.shared.appearance = NSAppearance(named: .aqua)
|
||||
let canvas = SpreadsheetCanvasView(sheet: sheet, scale: 1)
|
||||
try capture(canvas, to: folder.appendingPathComponent("sheet.png"))
|
||||
for size in [CGSize(width: 1080, height: 620), CGSize(width: 820, height: 480)] {
|
||||
let host = NSHostingView(rootView: ExpenseSpreadsheetPreview(layout: layout))
|
||||
host.frame = NSRect(origin: .zero, size: size)
|
||||
let window = NSWindow(contentRect: host.frame, styleMask: [.borderless], backing: .buffered, defer: false)
|
||||
window.contentView = host
|
||||
host.layoutSubtreeIfNeeded()
|
||||
RunLoop.current.run(until: Date().addingTimeInterval(0.5))
|
||||
try capture(host, to: folder.appendingPathComponent("preview-\(Int(size.width)).png"))
|
||||
window.orderOut(nil)
|
||||
}
|
||||
print("Native preview snapshots written to \(folder.path)")
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor static func capture(_ view: NSView, to file: URL) throws {
|
||||
guard let bitmap = view.bitmapImageRepForCachingDisplay(in: view.bounds) else {
|
||||
throw ExpenseTemplateFailure.message("Cannot create preview snapshot")
|
||||
}
|
||||
view.cacheDisplay(in: view.bounds, to: bitmap)
|
||||
guard let png = bitmap.representation(using: .png, properties: [:]) else {
|
||||
throw ExpenseTemplateFailure.message("Cannot encode preview snapshot")
|
||||
}
|
||||
try png.write(to: file)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user