|  | ;-------------------------------------------------- | 
|  | ; Create the check file, good input, and bad input. | 
|  | ; | 
|  | ; For both good and bad input, make sure the -v trace has at least one remark | 
|  | ; so we can check how trace suppression is affected by -dump-input. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; RUN: echo hello > %t.good | 
|  | ; RUN: echo world >> %t.good | 
|  |  | 
|  | ; RUN: echo hello > %t.err | 
|  | ; RUN: echo whirled >> %t.err | 
|  |  | 
|  | ; RUN: echo 'CHECK: hello' > %t.check | 
|  | ; RUN: echo 'CHECK-NEXT: world' >> %t.check | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input=<bad value>. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=foobar 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL | 
|  |  | 
|  | ; No positional arg. | 
|  | ; RUN: %ProtectFileCheckOutput not FileCheck -dump-input=foobar 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL | 
|  |  | 
|  | BADVAL: {{F|f}}ile{{C|c}}heck{{.*}}: for the --dump-input option: Cannot find option named 'foobar'! | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input=help. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; Appended to normal command line. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.err -color %t.check -dump-input=help \ | 
|  | ; RUN: | FileCheck %s -check-prefix=HELP | 
|  |  | 
|  | ; No positional arg. | 
|  | ; RUN: %ProtectFileCheckOutput FileCheck -dump-input=help \ | 
|  | ; RUN: | FileCheck %s -check-prefix=HELP | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input=never. | 
|  | ; | 
|  | ; Include the case without -v, which isn't covered elsewhere. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; FileCheck success, no -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=never 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -allow-empty \ | 
|  | ; RUN:             -check-prefixes=NOTRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, no -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=never 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,ERR,NODUMP | 
|  |  | 
|  | ; FileCheck success, -v => no dump, trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=never -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=TRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, -v => no dump, trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=never -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=TRACE,ERR,NODUMP | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check no -dump-input, which defaults to never. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; FileCheck success, -v => no dump, trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=TRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, -v => no dump, trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=TRACE,ERR,NODUMP | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input=fail. | 
|  | ; | 
|  | ; Include the case without -v, which isn't covered elsewhere. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; FileCheck success, no -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=fail 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -allow-empty \ | 
|  | ; RUN:             -check-prefixes=NOTRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, no -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=fail 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,ERR,DUMP-ERR | 
|  |  | 
|  | ; FileCheck success, -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=fail -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -allow-empty \ | 
|  | ; RUN:             -check-prefixes=NOTRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=fail -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input-on-failure. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; Command-line option. | 
|  |  | 
|  | ; FileCheck success, -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input-on-failure -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -allow-empty \ | 
|  | ; RUN:             -check-prefixes=NOTRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input-on-failure -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ; FILECHECK_DUMP_INPUT_ON_FAILURE=1. | 
|  |  | 
|  | ; FileCheck success, -v => no dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput FILECHECK_DUMP_INPUT_ON_FAILURE=1 \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -allow-empty \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,NODUMP | 
|  |  | 
|  | ; FileCheck fail, -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput FILECHECK_DUMP_INPUT_ON_FAILURE=1 \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check -dump-input=always. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; FileCheck success, -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=always -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,DUMP-OK | 
|  |  | 
|  | ; FileCheck fail, -v => dump, no trace. | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=always -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check multiple -dump-input options. | 
|  | ; | 
|  | ; This ocurrs most commonly when a test author specifies -dump-input on a | 
|  | ; specific FileCheck call while a test runner specifies -dump-input in | 
|  | ; FILECHECK_OPTS, but check the behavior generally. | 
|  | ; | 
|  | ; "help" has precedence, and then the most verbose value wins.  The most | 
|  | ; common combinations involve "fail" and "always", so test those the most. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  | ; Check duplicate. | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  |  | 
|  | ; fail, fail => fail (FileCheck fail => dump) | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=fail -dump-input=fail -v \ | 
|  | ; RUN:               2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  | ; Check precedence. | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  |  | 
|  | ; help, always => help | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.err -color %t.check \ | 
|  | ; RUN:           -dump-input=help -dump-input=always \ | 
|  | ; RUN: | FileCheck %s -check-prefix=HELP | 
|  |  | 
|  | ; always, fail => always (FileCheck success => dump) | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=always -dump-input=fail \ | 
|  | ; RUN:           -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,DUMP-OK | 
|  |  | 
|  | ; fail, never => fail (FileCheck fail => dump) | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: not FileCheck -input-file %t.err %t.check -check-prefix=CHECK \ | 
|  | ; RUN:               -match-full-lines -dump-input=fail -dump-input=never -v \ | 
|  | ; RUN:               2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines \ | 
|  | ; RUN:                -check-prefixes=NOTRACE,ERR,DUMP-ERR,DUMP-ERR-V | 
|  |  | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  | ; Check that order doesn't matter. | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  |  | 
|  | ; fail, always => always (FileCheck success => dump) | 
|  | ; RUN: %ProtectFileCheckOutput \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=fail -dump-input=always \ | 
|  | ; RUN:           -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,DUMP-OK | 
|  |  | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  | ; Check that FILECHECK_OPTS isn't handled differently. | 
|  | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
|  |  | 
|  | ; always, fail => always (FileCheck success => dump) | 
|  | ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input=always \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=fail -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,DUMP-OK | 
|  |  | 
|  | ; fail, always => always (FileCheck success => dump) | 
|  | ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input=fail \ | 
|  | ; RUN: FileCheck -input-file %t.good %t.check -check-prefix=CHECK \ | 
|  | ; RUN:           -match-full-lines -dump-input=always -v 2>&1 \ | 
|  | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=NOTRACE,DUMP-OK | 
|  |  | 
|  | ; END. | 
|  |  | 
|  | ;-------------------------------------------------- | 
|  | ; Check the output. | 
|  | ;-------------------------------------------------- | 
|  |  | 
|  | ; HELP-NOT: {{.}} | 
|  | ; HELP: The following description was requested by -dump-input=help | 
|  | ; HELP: try{{.*}}-color | 
|  | ; HELP-NOT: {{.}} | 
|  |  | 
|  | ; Trace is sometimes suppressed. | 
|  | ; TRACE:       {{.*}}remark:{{.*}} | 
|  | ; NOTRACE-NOT: remark: | 
|  |  | 
|  | ; Error diagnostics are never suppressed. | 
|  | ; ERR: {{.*}}error:{{.*}} | 
|  |  | 
|  | ; NODUMP-NOT: <<<<<< | 
|  |  | 
|  | ; DUMP-OK:      Full input was: | 
|  | ; DUMP-OK-NEXT: <<<<<< | 
|  | ; DUMP-OK-NEXT:          1: hello | 
|  | ; DUMP-OK-NEXT: check:1     ^~~~~ | 
|  | ; DUMP-OK-NEXT:          2: world | 
|  | ; DUMP-OK-NEXT: next:2      ^~~~~ | 
|  | ; DUMP-OK-NEXT: >>>>>> | 
|  |  | 
|  | ; DUMP-ERR:        Full input was: | 
|  | ; DUMP-ERR-NEXT:   <<<<<< | 
|  | ; DUMP-ERR-NEXT:            1: hello | 
|  | ; DUMP-ERR-V-NEXT: check:1     ^~~~~ | 
|  | ; DUMP-ERR-NEXT:            2: whirled | 
|  | ; DUMP-ERR-NEXT:   next:2      X~~~~~~ error: no match found | 
|  | ; DUMP-ERR-NEXT:   >>>>>> |