#                                                                 -*- python -*-
# REQUIRES: system-darwin
# RUN: cd %S/../../examples/python && %lldb -S %s | 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
