Files
swift-mirror/test/Backtracing/CodableBacktrace.swift
Alastair Houghton c7bb91d8fe [Backtracing] Tweak tests slightly.
`JSONEncoder` by default will escape slashes, which results in a string
that isn't technically valid Base64.  Since that behaviour is optional,
turn it off, and at the same time tell it to output in lexical key
order, which makes the test slightly simpler (no `CHECK-DAG` needed).

Also fixed a typo in `test_swift.py`

rdar://124913332
2025-01-17 10:09:37 +00:00

68 lines
1.4 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -target %target-cpu-macos15.0 -Xfrontend -parse-as-library -Onone -o %t/CodableBacktrace
// RUN: %target-codesign %t/CodableBacktrace
// RUN: %target-run %t/CodableBacktrace | %FileCheck %s
// REQUIRES: executable_test
// REQUIRES: backtracing
// REQUIRES: OS=macosx || OS=linux-gnu
// UNSUPPORTED: use_os_stdlib
// UNSUPPORTED: back_deployment_runtime
import Runtime
import Foundation
func level1() {
level2()
}
func level2() {
level3()
}
func level3() {
level4()
}
func level4() {
level5()
}
func level5() {
let backtrace = try! Backtrace.capture()
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted,.sortedKeys,.withoutEscapingSlashes]
let data = try! encoder.encode(backtrace)
let json = String(data: data, encoding: .utf8)!
print(json)
// CHECK: {
// CHECK: "architecture" : "{{.*}}",
// CHECK: "backtrace" : "{{[A-Za-z0-9+/]*}}"
// CHECK: }
let decoder = JSONDecoder()
let bt2 = try! decoder.decode(Backtrace.self, from: data)
print(bt2)
// CHECK: 0{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
// CHECK-NEXT: 1{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
// CHECK-NEXT: 2{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
// CHECK-NEXT: 3{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
// CHECK-NEXT: 4{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
// CHECK-NEXT: 5{{[ \t]+}}0x{{[0-9a-f]+}} [ra]
}
@main
struct CodableBacktrace {
static func main() {
level1()
}
}