aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/directive-elif.mk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bmake/unit-tests/directive-elif.mk')
-rw-r--r--contrib/bmake/unit-tests/directive-elif.mk126
1 files changed, 98 insertions, 28 deletions
diff --git a/contrib/bmake/unit-tests/directive-elif.mk b/contrib/bmake/unit-tests/directive-elif.mk
index f9a43abfffc1..e7b89beec4e9 100644
--- a/contrib/bmake/unit-tests/directive-elif.mk
+++ b/contrib/bmake/unit-tests/directive-elif.mk
@@ -1,55 +1,125 @@
-# $NetBSD: directive-elif.mk,v 1.6 2020/11/12 19:46:36 rillig Exp $
+# $NetBSD: directive-elif.mk,v 1.7 2020/12/19 19:49:01 rillig Exp $
#
# Tests for the .elif directive.
+#
+# Misspellings of the .elif directive are not always detected. They are only
+# detected if the conditional branch directly above it is taken. In all other
+# cases, make skips over the skipped branch as fast as possible, looking only
+# at the initial '.' of the line and whether the directive is one of the known
+# conditional directives. All other directives are silently ignored, as they
+# could be variable assignments or dependency declarations as well, and
+# deciding this would cost time.
+
# TODO: Implementation
-.info begin .elif misspellings tests, part 1
-.if 1
-. info 1-then
-.elif 1 # ok
-. info 1-elif
-.elsif 1 # oops: misspelled
-. info 1-elsif
-.elseif 1 # oops: misspelled
-. info 1-elseif
+
+# Misspelling '.elsif' below an .if branch that is not taken.
+.if 0
+. info This branch is not taken.
+# As of 2020-12-19, the misspelling is not recognized as a conditional
+# directive and is thus silently skipped.
+#
+# Since the .if condition evaluated to false, this whole branch is not taken.
+.elsif 0
+. info XXX: This misspelling is not detected.
+. info This branch is not taken.
+# Even if the misspelling were detected, the branch would not be taken
+# since the condition of the '.elsif' evaluates to false as well.
.endif
-.info begin .elif misspellings tests, part 2
+
+# Misspelling '.elsif' below an .if branch that is not taken.
.if 0
-. info 0-then
-.elif 0 # ok
-. info 0-elif
-.elsif 0 # oops: misspelled
-. info 0-elsif
-.elseif 0 # oops: misspelled
-. info 0-elseif
+. info This branch is not taken.
+# As of 2020-12-19, the misspelling is not recognized as a conditional
+# directive and is thus silently skipped. Since the .if condition evaluated
+# to false, this whole branch is not taken.
+.elsif 1
+. info XXX: This misspelling is not detected.
+# If the misspelling were detected, this branch would be taken.
+.endif
+
+
+# Misspelling '.elsif' below an .if branch that is taken.
+.if 1
+# This misspelling is in an active branch and is therefore detected.
+.elsif 0
+# The only thing that make detects here is a misspelled directive, make
+# doesn't recognize that it was meant to be a conditional directive.
+# Therefore the branch continues here, even though the '.elsif' condition
+# evaluates to false.
+. info This branch is taken.
+.endif
+
+
+# Misspelling '.elsif' below an .if branch that is taken.
+.if 1
+# As of 2020-12-19, the misspelling is in an active branch and is therefore
+# detected.
+.elsif 1
+# Since both conditions evaluate to true, this branch is taken no matter
+# whether make detects a misspelling or not.
+. info This branch is taken.
.endif
-.info begin .elif misspellings tests, part 3
+
+# Misspelling '.elsif' in a skipped branch below a branch that was taken.
+.if 1
+. info This branch is taken.
+.elif 0
+. info This branch is not taken.
+.elsif 1
+. info XXX: This misspelling is not detected.
+.endif
+
+
+# Misspelling '.elsif' in an .else branch that is not taken.
+.if 1
+.else
+. info This branch is not taken.
+.elsif 1
+. info XXX: This misspelling is not detected.
+.endif
+
+
+# Misspelling '.elsif' in an .else branch that is taken.
.if 0
-. info 0-then
-.elsif 0 # oops: misspelled
-. info 0-elsif
+.else
+.elsif 1
+. info This misspelling is detected.
+. info This branch is taken because of the .else.
.endif
+
+
+# Misspellings for .elif in a .elif branch that is not taken.
.if 0
-. info 0-then
-.elseif 0 # oops: misspelled
-. info 0-elseif
+. info This branch is not taken.
+.elif 0 # ok
+. info This branch is not taken.
+.elsif 0
+. info XXX: This misspelling is not detected.
+. info This branch is not taken.
+.elseif 0
+. info XXX: This misspelling is not detected.
+. info This branch is not taken.
.endif
-.info which branch is taken on misspelling after false?
+
+.info What happens on misspelling in a skipped branch?
.if 0
. info 0-then
.elsif 1
+. info XXX: This misspelling is not detected.
. info 1-elsif
.elsif 2
+. info XXX: This misspelling is not detected.
. info 2-elsif
.else
. info else
.endif
-.info which branch is taken on misspelling after true?
+.info What happens on misspelling in a taken branch?
.if 1
. info 1-then
.elsif 1
@@ -65,7 +135,7 @@
.if 1
.else
-# Expect: "warning: if-less elif"
+# Expect: "warning: extra elif"
.elif
.endif