#                                                                 -*- python -*-
# REQUIRES: system-darwin
# RUN: cd %S/../../../examples/python && cat %s | %lldb | FileCheck %s
# CHECK-LABEL: {{S}}KIP BEYOND CHECKS
script
import crashlog
cl = crashlog.CrashLog
images = [
"0x10b60b000 - 0x10f707fff com.apple.LLDB.framework (1.1000.11.38.2 - 1000.11.38.2) <96E36F5C-1A83-39A1-8713-5FDD9701C3F1> /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/LLDB",
# CHECK: 0x10b60b000
# CHECK: 0x10f707fff
# CHECK: com.apple.LLDB.framework
# CHECK: 96E36F5C-1A83-39A1-8713-5FDD9701C3F1
# CHECK: /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/LLDB

"0x104591000 - 0x1055cfff7 +llvm-dwarfdump (0) <B104CFA1-046A-36A6-8EB4-07DDD7CC2DF3> /Users/USER 1/Documents/*/llvm-dwarfdump",
# CHECK: 0x104591000
# CHECK: 0x1055cfff7
# CHECK: llvm-dwarfdump
# CHECK: (0)
# CHECK: B104CFA1-046A-36A6-8EB4-07DDD7CC2DF3
# CHECK: /Users/USER 1/Documents/*/llvm-dwarfdump

"0x7fff63f20000 - 0x7fff63f77ff7  libc++.1.dylib (400.9.4) <D4AB366F-48A9-3C7D-91BD-41198F69DD57> /usr/lib/libc++.1.dylib",
# CHECK: 0x7fff63f20000
# CHECK: 0x7fff63f77ff7
# CHECK: libc++.1.dylib
# CHECK: (400.9.4)
# CHECK: D4AB366F-48A9-3C7D-91BD-41198F69DD57
# CHECK: /usr/lib/libc++.1.dylib

"0x1111111 - 0x22222 +MyApp Pro arm64  <01234> /tmp/MyApp Pro.app/MyApp Pro",
# CHECK: 0x1111111
# CHECK: 0x22222
# CHECK: MyApp Pro arm64
# CHECK: None
# CHECK: 01234
# CHECK: /tmp/MyApp Pro.app/MyApp Pro

"0x1111111 - 0x22222 +MyApp Pro (0) <01234> /tmp/MyApp Pro.app/MyApp Pro",
# CHECK: 0x1111111
# CHECK: 0x22222
# CHECK: MyApp Pro
# CHECK: (0)
# CHECK: 01234
# CHECK: /tmp/MyApp Pro.app/MyApp Pro

"0x7fff63f20000 - 0x7fff63f77ff7  libc++.1.dylib (400.9.4) /usr/lib/libc++.1.dylib"
# CHECK: 0x7fff63f20000
# CHECK: 0x7fff63f77ff7
# CHECK: libc++.1.dylib
# CHECK: (400.9.4)
# CHECK: None
# CHECK: /usr/lib/libc++.1.dylib
]
# CHECK-LABEL: FRAMES
frames = [
"0 libsystem_kernel.dylib        	0x00007fff684b78a6 read + 10",
# CHECK: 0
# CHECK: libsystem_kernel.dylib
# CHECK: 0x00007fff684b78a6
# CHECK: read + 10
"1   com.apple.LLDB.framework      	0x000000010f7954af lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105",
# CHECK: 1
# CHECK: com.apple.LLDB.framework
# CHECK: 0x000000010f7954af
# CHECK: lldb_private{{.*}} + 105
"2   MyApp Pro arm64    	0x000000019b0db3a8 foo + 72",
# CHECK: 2
# CHECK: MyApp Pro arm64
# CHECK: 0x000000019b0db3a8
# CHECK: foo + 72
"3   He 0x1    	0x000000019b0db3a8 foo + 72"
# CHECK: 3
# CHECK: He 0x1
# CHECK: 0x000000019b0db3a8
# CHECK: foo + 72
]


# Avoid matching the text inside the input.
print("SKIP BEYOND CHECKS")
for image in images:
    print('"%s"'%image)
    print("--------------")
    match = cl.image_regex_uuid.search(image)
    for group in match.groups():
        print(group)

print("FRAMES")
for frame in frames:
    print('"%s"'%frame)
    print("--------------")
    match = cl.frame_regex.search(frame)
    for group in match.groups():
        print(group)

exit()
quit
