summaryrefslogtreecommitdiff
path: root/tests/d.at
diff options
context:
space:
mode:
authorAdela Vais <adela.vais99@gmail.com>2020-09-23 21:51:21 +0300
committerAkim Demaille <akim.demaille@gmail.com>2020-09-24 09:29:45 +0200
commitde638df10447bde11a2a79c9c3233be1f7c406b6 (patch)
tree3b899f7198434da1324d3d441e47cbff0a4d266e /tests/d.at
parent8dc60543c80d17005c628f02143ddb9c7a6c5b0a (diff)
downloadbison-de638df10447bde11a2a79c9c3233be1f7c406b6.tar.gz
d: support api.parser.extends and api.parser.implements
The D skeleton was not properly supporting them. * data/skeletons/d.m4: Fix it. * tests/d.at: Check it. * tests/local.mk, tests/testsuite.at: Adjust.
Diffstat (limited to 'tests/d.at')
-rw-r--r--tests/d.at82
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/d.at b/tests/d.at
new file mode 100644
index 00000000..d38e8130
--- /dev/null
+++ b/tests/d.at
@@ -0,0 +1,82 @@
+# D features tests. -*- Autotest -*-
+
+# Copyright (C) 2020 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([[D Features.]])
+
+# AT_CHECK_D_MINIMAL([DIRECTIVES], [PARSER_ACTION], [POSITION_CLASS], [EXTRA_USER_CODE])
+# ----------------------------------------------------------------------
+# Check that a minimal parser with DIRECTIVES compiles in D.
+# Put the D code in YYParser.d.
+m4_define([AT_CHECK_D_MINIMAL],
+[
+AT_DATA([[YYParser.y]], [
+%language "D"
+%token END "end"
+[$1]
+%%
+start: END {$2};
+%%
+[$4]
+void main() {}
+])
+AT_BISON_CHECK([[-Wno-deprecated YYParser.y]])
+AT_CHECK([[grep '[mb]4_' YYParser.y]], [1], [ignore])
+AT_COMPILE_D([[YYParser]])
+])
+
+# AT_CHECK_D_GREP([LINE], [COUNT=1])
+# -------------------------------------
+# Check that YYParser.d contains exactly COUNT lines matching ^LINE$
+# with grep.
+m4_define([AT_CHECK_D_GREP],
+[AT_CHECK([grep -c '^$1$' YYParser.d], [ignore], [m4_default([$2], [1])
+])])
+
+## -------------------------------------- ##
+## D parser class extends and implements. ##
+## -------------------------------------- ##
+
+AT_SETUP([D parser class extends and implements])
+AT_KEYWORDS([d])
+
+AT_CHECK_D_MINIMAL([])
+AT_CHECK_D_GREP([[class YYParser]])
+
+AT_CHECK_D_MINIMAL([%define api.parser.extends {BaseClass}], [], [], [class BaseClass {}])
+AT_CHECK_D_GREP([[class YYParser : BaseClass]])
+
+AT_CHECK_D_MINIMAL([%define api.parser.extends {Interface}], [], [], [interface Interface {}])
+AT_CHECK_D_GREP([[class YYParser : Interface]])
+
+AT_CHECK_D_MINIMAL(
+[%define api.parser.extends {BaseClass}
+%define api.parser.implements {Interface}], [], [],
+[class BaseClass {}
+interface Interface {}
+])
+AT_CHECK_D_GREP([[class YYParser : BaseClass, Interface]])
+
+AT_CHECK_D_MINIMAL(
+[%define api.parser.extends {BaseClass}
+%define api.parser.implements {Interface1, Interface2}], [], [],
+[class BaseClass {}
+interface Interface1 {}
+interface Interface2 {}
+])
+AT_CHECK_D_GREP([[class YYParser : BaseClass, Interface1, Interface2]])
+
+AT_CLEANUP