mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
`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
68 lines
1.4 KiB
Swift
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()
|
|
}
|
|
}
|