; To keep this test maintainable, avoid depending on -dump-input-context's ; default value, which is checked in dump-input-context.txt instead. ;-------------------------------------------------- ; Create the input file and the check file. ;-------------------------------------------------- ; line 1 ; RUN: echo start > %t.in ; RUN: echo foo0 >> %t.in ; RUN: echo foo1 >> %t.in ; RUN: echo foo2 >> %t.in ; RUN: echo foo3 >> %t.in ; RUN: echo foo4 >> %t.in ; RUN: echo foo5 >> %t.in ; RUN: echo foo6 >> %t.in ; RUN: echo foo7 >> %t.in ; RUN: echo foo8 >> %t.in ; RUN: echo foo9 >> %t.in ; line 12 ; RUN: echo hello >> %t.in ; RUN: echo foo0 >> %t.in ; RUN: echo foo1 >> %t.in ; RUN: echo foo2 >> %t.in ; RUN: echo foo3 >> %t.in ; RUN: echo foo4 >> %t.in ; RUN: echo foo5 >> %t.in ; RUN: echo foo6 >> %t.in ; RUN: echo foo7 >> %t.in ; RUN: echo foo8 >> %t.in ; RUN: echo foo9 >> %t.in ; line 23 ; RUN: echo word >> %t.in ; RUN: echo foo0 >> %t.in ; RUN: echo foo1 >> %t.in ; RUN: echo foo2 >> %t.in ; RUN: echo foo3 >> %t.in ; RUN: echo foo4 >> %t.in ; RUN: echo foo5 >> %t.in ; RUN: echo foo6 >> %t.in ; RUN: echo foo7 >> %t.in ; RUN: echo foo8 >> %t.in ; RUN: echo foo9 >> %t.in ; line 34 ; RUN: echo end >> %t.in ; RUN: echo 'CHECK: start' > %t.chk ; RUN: echo 'CHECK: hello' >> %t.chk ; RUN: echo 'CHECK: world' >> %t.chk ; RUN: echo 'CHECK: end' >> %t.chk ;-------------------------------------------------- ; Directives for checking the dump. ;-------------------------------------------------- ; ALL: <<<<<< ; ALL-NEXT: 1: start ; ALL-NEXT: check:1 ^~~~~ ; ALL-NEXT: 2: foo0 ; ALL-NEXT: 3: foo1 ; ALL-NEXT: 4: foo2 ; ALL-NEXT: 5: foo3 ; ALL-NEXT: 6: foo4 ; ALL-NEXT: 7: foo5 ; ALL-NEXT: 8: foo6 ; ALL-NEXT: 9: foo7 ; ALL-NEXT: 10: foo8 ; ALL-NEXT: 11: foo9 ; ALL-NEXT: 12: hello ; ALL-NEXT: check:2 ^~~~~ ; ALL-NEXT: check:3'0 X error: no match found ; ALL-NEXT: 13: foo0 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 14: foo1 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 15: foo2 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 16: foo3 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 17: foo4 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 18: foo5 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 19: foo6 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 20: foo7 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 21: foo8 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 22: foo9 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 23: word ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: check:3'1 ? possible intended match ; ALL-NEXT: 24: foo0 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 25: foo1 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 26: foo2 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 27: foo3 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 28: foo4 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 29: foo5 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 30: foo6 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 31: foo7 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 32: foo8 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 33: foo9 ; ALL-NEXT: check:3'0 ~~~~~ ; ALL-NEXT: 34: end ; ALL-NEXT: check:3'0 ~~~~ ; ALL-NEXT: >>>>>> ; ANNOTATION-FULL: <<<<<< ; ANNOTATION-FULL-NEXT: 1: start ; ANNOTATION-FULL-NEXT: check:1 ^~~~~ ; ANNOTATION-FULL-NEXT: 2: foo0 ; ANNOTATION-FULL-NEXT: 3: foo1 ; ANNOTATION-FULL-NEXT: . ; ANNOTATION-FULL-NEXT: . ; ANNOTATION-FULL-NEXT: . ; ANNOTATION-FULL-NEXT: 10: foo8 ; ANNOTATION-FULL-NEXT: 11: foo9 ; ANNOTATION-FULL-NEXT: 12: hello ; ANNOTATION-FULL-NEXT: check:2 ^~~~~ ; ANNOTATION-FULL-NEXT: check:3'0 X error: no match found ; ANNOTATION-FULL-NEXT: 13: foo0 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 14: foo1 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 15: foo2 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 16: foo3 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 17: foo4 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 18: foo5 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 19: foo6 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 20: foo7 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 21: foo8 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 22: foo9 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 23: word ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: check:3'1 ? possible intended match ; ANNOTATION-FULL-NEXT: 24: foo0 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 25: foo1 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 26: foo2 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 27: foo3 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 28: foo4 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 29: foo5 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 30: foo6 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 31: foo7 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 32: foo8 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 33: foo9 ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~~ ; ANNOTATION-FULL-NEXT: 34: end ; ANNOTATION-FULL-NEXT: check:3'0 ~~~~ ; ANNOTATION-FULL-NEXT: >>>>>> ; ANNOTATION: <<<<<< ; ANNOTATION-NEXT: 1: start ; ANNOTATION-NEXT: check:1 ^~~~~ ; ANNOTATION-NEXT: 2: foo0 ; ANNOTATION-NEXT: 3: foo1 ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: 10: foo8 ; ANNOTATION-NEXT: 11: foo9 ; ANNOTATION-NEXT: 12: hello ; ANNOTATION-NEXT: check:2 ^~~~~ ; ANNOTATION-NEXT: check:3'0 X error: no match found ; ANNOTATION-NEXT: 13: foo0 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: 14: foo1 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: 21: foo8 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: 22: foo9 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: 23: word ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: check:3'1 ? possible intended match ; ANNOTATION-NEXT: 24: foo0 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: 25: foo1 ; ANNOTATION-NEXT: check:3'0 ~~~~~ ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: . ; ANNOTATION-NEXT: >>>>>> ; ERROR: <<<<<< ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: 10: foo8 ; ERROR-NEXT: 11: foo9 ; ERROR-NEXT: 12: hello ; ERROR-NEXT: check:2 ^~~~~ ; ERROR-NEXT: check:3'0 X error: no match found ; ERROR-NEXT: 13: foo0 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: 14: foo1 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: 21: foo8 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: 22: foo9 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: 23: word ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: check:3'1 ? possible intended match ; ERROR-NEXT: 24: foo0 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: 25: foo1 ; ERROR-NEXT: check:3'0 ~~~~~ ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: . ; ERROR-NEXT: >>>>>> ;-------------------------------------------------- ; Check -dump-input-filter=. ;-------------------------------------------------- ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=foobar \ ; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL BADVAL: {{F|f}}ile{{C|c}}heck{{.*}}: for the --dump-input-filter option: Cannot find option named 'foobar'! ;-------------------------------------------------- ; Check -dump-input-filter explicit values. ;-------------------------------------------------- ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=all \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ALL ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=annotation-full \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION-FULL ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=annotation \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=error \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ERROR ;-------------------------------------------------- ; Check -dump-input-filter defaults. ;-------------------------------------------------- ; no -dump-input => -dump-input-filter=error ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ERROR ; -dump-input=fail => -dump-input-filter=error ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input=fail \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ERROR ; -dump-input=always => -dump-input-filter=all ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input=always \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ALL ;-------------------------------------------------- ; Check multiple -dump-input-filter options. ; ; This might occur when a test author specifies -dump-input-filter on a specific ; FileCheck call while a test runner specifies -dump-input-filter in ; FILECHECK_OPTS, but check the behavior generally. ; ; The value providing the most information wins. ;-------------------------------------------------- ;- - - - - - - - - - - - - - - - - - - - - - - - - ; Check duplicate. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; all, all => all ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=all -dump-input-filter=all \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ALL ;- - - - - - - - - - - - - - - - - - - - - - - - - ; Check precedence. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; all, annotation-full => all ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=all -dump-input-filter=annotation-full \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ALL ; annotation-full, annotation => annotation-full ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=annotation-full \ ; RUN: -dump-input-filter=annotation \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION-FULL ; annotation, error => annotation ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=annotation -dump-input-filter=error \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION ;- - - - - - - - - - - - - - - - - - - - - - - - - ; Check that order doesn't matter. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; error, annotation => annotation ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=error -dump-input-filter=annotation \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION ;- - - - - - - - - - - - - - - - - - - - - - - - - ; Check that FILECHECK_OPTS isn't handled differently. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; annotation, error => annotation ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input-filter=annotation \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=error \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION ; error, annotation => annotation ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input-filter=error \ ; RUN: not FileCheck -dump-input-context=2 -vv %t.chk < %t.in 2>&1 \ ; RUN: -dump-input-filter=annotation \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=ANNOTATION ;-------------------------------------------------- ; Check the case where all input lines are filtered out. ;-------------------------------------------------- ; RUN: echo 'CHECK: hello' > %t.good.chk ; RUN: %ProtectFileCheckOutput \ ; RUN: FileCheck -dump-input=always -dump-input-filter=error -vv %t.good.chk \ ; RUN: < %t.in 2>&1 \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=EMPTY ; EMPTY: <<<<<< ; EMPTY-NEXT: . ; EMPTY-NEXT: . ; EMPTY-NEXT: . ; EMPTY-NEXT: >>>>>> ;-------------------------------------------------- ; Check that other kinds of errors are included by -dump-input-filter=error. ; ; "error: no match found" and "possible intended match" are checked above. ;-------------------------------------------------- ;- - - - - - - - - - - - - - - - - - - - - - - - - ; error: no match expected. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; RUN: echo 'foo' > %t.not-err.in ; RUN: echo 'CHECK-NOT: foo' > %t.not-err.chk ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=0 -dump-input-filter=error \ ; RUN: %t.not-err.chk < %t.not-err.in 2>&1 \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOT-ERR ; NOT-ERR: 1: foo ; NOT-ERR-NEXT: not:1 !~~ error: no match expected ;- - - - - - - - - - - - - - - - - - - - - - - - - ; error: match on wrong line. ;- - - - - - - - - - - - - - - - - - - - - - - - - ; RUN: echo 'foo' > %t.next-err.in ; RUN: echo 'foo' >> %t.next-err.in ; RUN: echo 'bar' >> %t.next-err.in ; RUN: echo 'CHECK: foo' > %t.next-err.chk ; RUN: echo 'CHECK-NEXT: bar' >> %t.next-err.chk ; RUN: %ProtectFileCheckOutput \ ; RUN: not FileCheck -dump-input-context=0 -dump-input-filter=error \ ; RUN: %t.next-err.chk < %t.next-err.in 2>&1 \ ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NEXT-ERR ; NEXT-ERR: 3: bar ; NEXT-ERR-NEXT: next:2 !~~ error: match on wrong line