diff options
author | Adela Vais <adela.vais99@gmail.com> | 2020-09-23 21:51:21 +0300 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2020-09-24 09:29:45 +0200 |
commit | de638df10447bde11a2a79c9c3233be1f7c406b6 (patch) | |
tree | 3b899f7198434da1324d3d441e47cbff0a4d266e /tests/d.at | |
parent | 8dc60543c80d17005c628f02143ddb9c7a6c5b0a (diff) | |
download | bison-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.at | 82 |
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 |