#                                                                 -*- python -*-
# DEBUG: cd %S/../../../../../examples/python && cat %s | %lldb && false
# RUN: cd %S/../../../../../examples/python && cat %s | %lldb | FileCheck %s
# CHECK-LABEL: {{S}}KIP BEYOND CHECKS
script
import crashlog
crash_log_parser = crashlog.TextCrashLogParser
crash_log = 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
# CHECK: arm64
# 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

"0x1111111 - 0x2222222 MyFramework Plus.dylib (1.11 - MyFramework 1.11) <01234> /tmp/MyFramework Plus.dylib",
# CHECK: 0x1111111
# CHECK: 0x2222222
# CHECK: MyFramework Plus.dylib
# CHECK: ({{.*}}
# CHECK: 1.11 - MyFramework 1.11
# CHECK: <{{.*}}
# CHECK: 01234
# CHECK: /tmp/MyFramework Plus.dylib

"0x1111111 - 0x2222222 MyFramework-dev.dylib (1.0.0svn - 1.0.0svn) <01234> /MyFramework-dev.dylib",
# CHECK: 0x1111111
# CHECK: 0x2222222
# CHECK: MyFramework-dev.dylib
# CHECK: ({{.*}}
# CHECK: 1.0.0svn - 1.0.0svn
# CHECK: <{{.*}}
# CHECK: 01234
# CHECK: /MyFramework-dev.dylib

"0x7fff63f20000 - 0x7fff63f77ff7  libc++.1.dylib (400.9.4) /usr/lib/libc++.1.dylib",
# CHECK: 0x7fff63f20000
# CHECK: 0x7fff63f77ff7
# CHECK: libc++.1.dylib
# CHECK: ({{.*}}
# CHECK: 400.9.4
# CHECK: None
# CHECK: None
# CHECK: /usr/lib/libc++.1.dylib

"0x1047b8000 - 0x10481ffff dyld arm64e  <cfa789d10da63f9a8996daf84ed9d04f> /usr/lib/dyld"
# CHECK: 0x1047b8000
# CHECK: 0x10481ffff
# CHECK: dyld
# CHECK: {{.*}}
# CHECK: arm64e
# CHECK: <{{.*}}
# CHECK: cfa789d10da63f9a8996daf84ed9d04f
# CHECK: /usr/lib/dyld
]
# 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
# CHECK: a
# CHECK: arm64
# CHECK: a
# 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 = crash_log_parser.image_regex_uuid.search(image)
    for group in match.groups():
        print(group)

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

exit()
quit
