use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2);
require 't/test_utils.pl';
my @test_cases = (
[ 'not_set',
'@ifset a
Flag a is set.
@end ifset
'],
['comment_on_ifset_line',
'@set x
@ifset x@c
Y1
@end ifset
@ifset x@c comm
Y2
@end ifset
@ifset x@c@ggg
Y3
@end ifset
@ifset x @c
Y4
@end ifset
@ifset x @c comm
Y5
@end ifset
@ifset x @c@ggg
Y6
@end ifset
'],
['ignore_spaces_and_comments',
'@ignore
No space no comment
@end ignore
@ignore
Spaces no comment
@end ignore
@ignore@c no space comment
Comment
@end ignore
@ignore @comment space comment
Space Comment
@end ignore
@ignore @c
Space Comment no argument
@end ignore
'],
['nested_ignore',
'@ignore
@ignore
@end ignore
@ignore
@end iftex
@ifinfo
@end ignore
@ignore
@end ifclear
@ifclear
@end ignore
'],
['nested_ignore_with_comments',
'@ignore
@ignore
No space no comment
@end ignore
@ignore
Spaces no comment
@end ignore
@ignore@c no space comment
Comment
@end ignore
@ignore @c
Comment no argument
@end ignore
@ignore @c space comment
Space Comment
@end ignore
@ignore something @comment comment after text
Text comment
@end ignore
@ignore some @code{variable} @comment comment after command
Command comment
@end ignore
@end ignore
'],
['nested_ignore_comment_no_eol',
'@ignore
@ignore @c comment'],
['empty_set_in_ifset',
'@set a
@ifset a
a is set to:|@value{a}|.
@end ifset'
],
['empty_set_in_ifclear',
'@set a
@ifclear a
a is set to:|@value{a}|.
@end ifclear'
],
['consecutive_conditionals',
'@ifinfo
in ifinfo
@end ifinfo
@iftex
in iftex
@end iftex
@set b
@ifclear b
in ifclear
@end ifclear
@ifset a
in ifset
@end ifset
'],
['ifnot_format_conditional',
'@ifnottex
not tex
@end ifnottex
After.'],
['false_format_not_closed',
'@html
blah blah
'],
['many_conditionals',
'@html
This is html text.
@end html
@ifhtml
This is ifhtml text.
@end ifhtml
@ifnothtml
This is ifnothtml text.
@end ifnothtml
@ifinfo
This is ifinfo text.
@end ifinfo
@ifnotinfo
This is ifnotinfo text.
@end ifnotinfo
@tex
This is tex text.
@end tex
@iftex
This is iftex text.
@end iftex
@ifnottex
This is ifnottex text.
@end ifnottex
', { 'EXPANDED_FORMATS' => ['info', 'html'] }],
# same conditionals as in many_conditionals, but from file
# with preambule and with some output
['cond_ifhtml_ifinfo',
# same conditions as in many_conditionals
undef, {'test_file' => 'cond.texi',
'test_formats' => ['html'],
'EXPANDED_FORMATS' => ['html', 'info'],
},
],
['cond',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['html'],
},
],
['cond_xml',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['xml'],
'EXPANDED_FORMATS' => ['xml'],
},
],
['cond_no-ifhtml_no-ifinfo_no-iftex',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['html'],
'EXPANDED_FORMATS' => [],
},
],
['cond_ifhtml_ifinfo_iftex',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['html'],
'EXPANDED_FORMATS' => ['html', 'info', 'tex'],
},
{'EXPANDED_FORMATS' => ['html', 'info', 'tex'], },
],
['cond_info',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['info'],
'EXPANDED_FORMATS' => ['info', 'plaintext'],
},
],
['cond_info_no-ifhtml_no-ifinfo_no-iftex',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['info'],
'EXPANDED_FORMATS' => [],
},
{'EXPANDED_FORMATS' => []}
],
['cond_info_ifhtml_ifinfo_iftex',
undef, {'test_file' => 'cond.texi',
'test_formats' => ['info'],
'EXPANDED_FORMATS' => ['info', 'html', 'tex'],
},
{'EXPANDED_FORMATS' => ['info', 'html', 'tex'],}
],
['commands_in_ifset',
'
@ifset notset
@definfoenclose
@documentencoding ISO-8859-1
@end ifsettruc
open {
@end ifset
@ifset notset
@example
@copying
@itemize
@table
@bye
@end ifset
'],
['ifset_in_command',
'
@file{
@ifset x
xset
@end ifset
@ifclear x
xclear
@end ifclear
}
'],
['ignored_in_ifset',
'
@ifset notset
@ignore
@end ifset
@end ignore
text
@end ifset
@ifset notset
@verbatim
@end ifset
@end verbatim
@end ifset
@ifset notset
@verb{%
@end ifset
%}
@end ifset
'],
['empty_ifset_in_ifset_no_set',
'
@ifset notset
@verbatim
@ifset
@end verbatim
@end ifset
'],
['ifclear_in_ifset',
'
@ifset a
@ifclear ok - ok, ignored
@end junky - ok, ignored
@end ifset
@c WRONG - missing @end ifset.
'],
['ifclear_in_ifset_set',
'
@set a
@ifset a
@ifclear ok @c - ok, ignored
@end junky - ok, ignored
@end ifset
@c WRONG - missing @end ifset.
'],
['nested_ifset_ifclear',
'
@macro conditionals{}
@ifset somevar
@ifset anothervar
Both somevar and anothervar are set.
@end ifset
@ifclear anothervar
Somevar is set, anothervar is not.
@end ifclear
@end ifset
@end macro
@set somevar
@set anothervar
@conditionals{}
@set somevar
@clear anothervar
@conditionals{}
@clear somevar
@set anothervar
@conditionals{}
@clear somevar
@clear anothervar
@conditionals{}
'],
['end_ifset_in_format',
'
@set notset
@ifset notset
@ignore
@end ifset
@end ignore
text
@end ifset
@ifset notset
@verbatim
@end ifset
@end verbatim
@end ifset
@ifset notset
@verb{%
@end ifset
%}
@end ifset
'],
['empty_ifset_in_ifset_set',
'
@set notset
@ifset notset
@verbatim
@ifset
@end verbatim
@end ifset
'],
['nested_ifset_prepended_to_command_name',
'@ifset a
@ifsettoto b
GG
@end ifset
@end ifset
'],
['macro_in_ifset',
'
@macro truc {}
truc
@end macro
@ifset a
@unmacro truc
@macro truc{}
in ifset
@end macro
@end ifset
@truc{}
'],
['macro_in_ifset_set',
'
@set a
@macro truc {}
truc
@end macro
@ifset a
@unmacro truc
@macro truc{}
in ifset
@end macro
@end ifset
@truc{}
'],
['empty_ifclear',
'@ifclear
Something
@end ifclear
'],
['empty_ifset',
'@ifset
Something
@end ifset
'],
['bad_ifset_argument',
'@ifset a|b
Ra&b
@end ifset
'],
['bad_ifclear_argument',
'
@ifclear #something
R#something
@end ifclear
'],
['ignore_not_closed',
'@ignore
This is ignored
'],
['info_ifplaintext',
'
@ifplaintext
this text will only appear in plain text.
@end ifplaintext
', {'EXPANDED_FORMATS' => ['info']}
],
['plaintext_ifinfo',
'
@ifinfo
this text will appear only in Info and plain text.
@end ifinfo
', {'EXPANDED_FORMATS' => ['plaintext']}
],
['ifnotinfo_exception',
'@ifnotinfo
in ifnotinfo
@end ifnotinfo
', {'EXPANDED_FORMATS' => ['plaintext']}
],
['info_ifinfo_ifnotplaintext',
'@ifinfo
@ifnotplaintext
This will be in Info, but not plain text.
@end ifnotplaintext
@end ifinfo
', {'EXPANDED_FORMATS' => ['info']}
],
['plaintext_ifinfo_ifnotplaintext',
'@ifinfo
@ifnotplaintext
This will be in Info, but not plain text.
@end ifnotplaintext
@end ifinfo
', {'EXPANDED_FORMATS' => ['plaintext']}
],
['text_on_conditional_line_expanded',
'@ifnothtml text following ifnothtml,
a
@end ifnothtml
'
],
['text_on_conditional_line',
'@ifnothtml text following ifnothtml,
a
@end ifnothtml
', {'EXPANDED_FORMATS' => ['html']}
],
['additional_space_in_end_conditional',
'@ifnothtml
not html
@end ifnothtml
', {'EXPANDED_FORMATS' => ['html']}
],
['additional_space_in_end_conditional_expanded',
'@ifnothtml
not html
@end ifnothtml
'],
['superfluous_argument_to_end',
'@ifnothtml
not html
@end ifnothtml superfluous
'],
['conditional_not_closed',
'@ifhtml
in ifhtml
'],
['end_conditional_not_at_line_begining',
'@ifhtml
inhtml
@end ifhtml
'],
['command_conditionals',
'@ifset txicommandconditionals
Good, the txicommandconditionals variable was set.
@end ifset
@ifcommanddefined nodexyz
Bad, @@nodexyz is defined.
@end ifcommanddefined
@ifcommandnotdefined nodexyz
Good, @@nodexyz is not defined.
@end ifcommandnotdefined
@ifcommanddefined node
Good, @@node is defined.
@end ifcommanddefined
@ifcommandnotdefined node
Bad, @@node is not defined.
@end ifcommandnotdefined
@ifcommanddefined mathcode
Unfortunately, @@mathcode is defined.
@end ifcommanddefined
@ifcommandnotdefined mathcode
Happily, @@mathcode is not defined.
@end ifcommandnotdefined
'],
['command_conditionals_user_defined',
'@macro truc
machin
@end macro
@defindex auth
@definfoenclose infoencl, :,:
@alias strongalias = strong
@ifcommanddefined truc
@@macro truc is defined.
@end ifcommanddefined
@ifcommandnotdefined truc
@@macro truc is wrongly not defined
@end ifcommandnotdefined
@ifcommanddefined authindex
index command @@authindex is defined.
@end ifcommanddefined
@ifcommandnotdefined authindex
index command @@authindex is wrongly not defined
@end ifcommandnotdefined
@ifcommanddefined infoencl
definfoenclose @@infoencl is defined.
@end ifcommanddefined
@ifcommandnotdefined infoencl
definfoenclose @@infoencl is wrongly not defined
@end ifcommandnotdefined
@ifcommanddefined strongalias
strongalias @@alias is defined.
@end ifcommanddefined
@ifcommandnotdefined strongalias
strongalias @@alias is wrongly not defined
@end ifcommandnotdefined
'],
['txiinternalvalue',
'@txiinternalvalue
'],
# currently this is not an error, it is only an error
# to redefine @txiinternalvalue if in_gdt
['user_defined_txiinternalvalue',
'@macro txiinternalvalue
user internalvalue
@end macro
@txiinternalvalue
'],
['inlineiffmtifelse_not_closed',
'@inlinefmtifelse{html,
'],
['inlineiffmtifelse_not_closed_two_arg',
'@inlinefmtifelse{html, hhhhh
'],
['inlineiffmtifelse_not_closed_three_arg',
'@inlinefmtifelse{html, hhhhh, ggggg
'],
['inlinefmtifelse_nesting',
'@inlinefmtifelse{info, @footnote{See.}, @emph{text}}
'],
['inlineifset_false_not_closed',
'@inlineifset{aaa, bbb
'],
['ifset_nonalpha',
'@ifset A/B
@end ifset
'],
# there is a similar test of the command line in tests/formatting
['defcondx_Dbar',
undef, {'test_file' => '../../tests/formatting/defxcond.texi',
'test_formats' => ['file_html'],
'values' => {'bar' => 1}}, {'SPLIT' => ''},
],
['defcondx_Ubar',
undef, {'test_file' => '../../tests/formatting/defxcond.texi',
'test_formats' => ['file_html'],
'values' => {}}, {'SPLIT' => ''},
],
);
for my $test (@test_cases) {
if (!defined $test->[2]->{'EXPANDED_FORMATS'}) {
$test->[2]->{'EXPANDED_FORMATS'} = [];
}
}
run_all('conditionals', \@test_cases);