File: mk_tests.sh

package info (click to toggle)
pasdoc 0.16.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 33,536 kB
  • sloc: pascal: 28,894; javascript: 7,665; xml: 2,597; makefile: 519; sh: 417
file content (277 lines) | stat: -rwxr-xr-x 13,969 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#!/bin/bash
set -eu

# This script creates tests output for particular pasdoc output format.
# $1 is the output format name. It's also the name of subdirectory where
# tests output will be placed.
#
# This script is meant to be called only from ../Makefile .

SORT_ALL='--sort=structures,constants,functions,types,variables,uses-clauses,record-fields,non-record-fields,methods,properties'
SORT_OLD='--sort=functions,record-fields,non-record-fields,methods,properties'

# functions ----------------------------------------

run_echo ()
{
  OUTPUT_FILENAME="$1"
  shift 1

  # too verbose now
  # echo 'Running:' "$@" '>' "$OUTPUT_FILENAME"

  # Temporary set +e, to ignore exit status from pasdoc
  set +e
  # Checking mem leaks - gather STDERR output (heaptrc writes it there)
  # and search for key phrase inside ("N unfreed memory blocks" where N <> 0).
  # If key phrase is found, print output to special file.
  if [ "${CHECK_MEM_LEAK:-false}" = 'true' ]
  then
    STDERR=$( { "$@" > "$OUTPUT_FILENAME"; } 2>&1)
    MEMLEAKED=$(echo $STDERR | grep -P "(\d{2,}|[^0]) unfreed memory blocks")
    if [ -n "$MEMLEAKED" ]
    then
      DIR=$(dirname "$OUTPUT_FILENAME")
      DIR=$(basename "$DIR")
      echo Test $DIR: mem leak found, check .heaptrc file
      echo $STDERR > "$OUTPUT_FILENAME.heaptrc"
    fi
  else
    "$@" > "$OUTPUT_FILENAME"
  fi

  set -e
}

# Run pasdoc with given command-line parameters.
# First parameter is the name of subdirectory where we place test results
# (including PASDOC-OUTPUT file), this is always inside "$FORMAT" subdirectory.
mk_test ()
{
  OUTPUT_PATH=../testcases_output/"$FORMAT"/"$1"/
  shift 1

  mkdir -p "$OUTPUT_PATH"

  PASDOC_OUTPUT_FILENAME="$OUTPUT_PATH"PASDOC-OUTPUT

  # Note: "implementation-comments" is always added to check that parsing impl section is capable
  # of parsing all units and that it won't change output on files with empty or
  # fully private impl sections
  run_echo "$PASDOC_OUTPUT_FILENAME" \
    "${PASDOC_BIN}" --format "$FORMAT" --exclude-generator \
    --implementation-comments=join --output="$OUTPUT_PATH" "$@"
}

# Run all the test for current $FORMAT.
all_tests_for_current_format ()
{
  now="$(date +'%H.%M.%S')"
  echo $now Running tests for format $FORMAT

  # Make a test of many units with normal pasdoc command-line.
  #
  # Note: most new tests should not be added here.
  # It was the 1st approach to just call something like `pasdoc *.pas' here
  # to test everything. But this was not good, because
  # 1. obviously you can't do tests with specialized pasdoc command-line options
  # 2. in case of output formats that create some "index" pages
  #    (like AllClasses.html in HTML / HtmlHelp output) small
  #    changes and additions have too global impact on many parts of
  #    documentation, so the differences between currect/new versions were
  #    harder to analyze by humans.
  #
  # Instead, usually you should add new test units as new calls to
  # `mk_test ...' lower in this script.
  #
  mk_test large_test "$SORT_OLD" \
    error_line_number.pas \
    ok_cdecl_external.pas \
    ok_complicated_record.pas \
    ok_deprecated_tag.pas \
    ok_directive_as_identifier.pas \
    ok_expanding_descriptions.pas \
    ok_hint_directives.pas \
    ok_line_break.pas \
    ok_link_class_unit_level.pas \
    ok_link_explicite_name.pas \
    ok_links_2.pas \
    ok_links.pas \
    ok_nodescription_printing.pas \
    ok_paragraph_in_single_line_comment.pas \
    ok_tag_name_case.pas \
    ok_tag_params_no_parens.pas \
    ok_value_member_tags.pas \
    warning_abstract_termination.pas \
    warning_abstract_twice.pas \
    warning_not_existing_tags.pas \
    warning_tags_no_parameters.pas \
    warning_value_member_tags.pas

  # Make a specialized test of some units that need special
  # command-line. This is also useful if you want to just make
  # some units in a separate subdirectories, to separate them
  # from the rest of tests (e.g. because you want to test AllXxx.html pages).
  # This is also useful if you want to test the same unit more than once,
  # with different command-line options (e.g. like ok_sorting.pas).
  #
  # Try to place each entry below on separate line,
  # so that it's easy to temporary switch some test on/off by
  # simply commenting / uncommenting that line.
  #
  mk_test ok_const_1st_comment_missing --marker=: "$SORT_OLD" ok_const_1st_comment_missing.pas
  mk_test ok_link_1_char --visible-members 'private,public,published' "$SORT_OLD" ok_link_1_char.pas
  mk_test ok_auto_abstract --auto-abstract "$SORT_OLD" ok_auto_abstract.pas
  mk_test warning_incorrect_tag_nesting "$SORT_OLD"  warning_incorrect_tag_nesting.pas
  mk_test ok_param_raises_returns_proctype "$SORT_OLD" ok_param_raises_returns_proctype.pas
  mk_test ok_no_sort '--sort=functions,non-record-fields,methods,properties' ok_no_sort.pas
  mk_test ok_sorting_all "$SORT_ALL" ok_sorting.pas
  mk_test ok_sorting_none --sort= ok_sorting.pas
  mk_test ok_introduction_conclusion ok_introduction_conclusion.pas --introduction=ok_introduction.txt --conclusion=ok_conclusion.txt
  mk_test ok_introduction_conclusion_additional ok_introduction_conclusion.pas --introduction=ok_introduction.txt --conclusion=ok_conclusion.txt --additional ok_additionalfile1.txt -A ok_additionalfile2.txt
  mk_test ok_property_decl ok_property_decl.pas
  mk_test ok_multiple_vars ok_multiple_vars.pas
  mk_test ok_class_function ok_class_function.pas
  mk_test ok_latex_head --latex-head=ok_latex_head.tex ok_latex_head.pas
  mk_test ok_longcode_underscores ok_longcode_underscores.pas
  mk_test ok_longcode_comment ok_longcode_comment.pas
  mk_test ok_longcode_dash ok_longcode_dash.pas
  mk_test ok_longcode_special_chars ok_longcode_special_chars.pas
  mk_test error_introduction_twice_anchors_unit --introduction=error_introduction_twice_anchors.txt error_introduction_twice_anchors_unit.pas
  mk_test ok_longcode_float_hex ok_longcode_float_hex.pas
  mk_test ok_see_also ok_see_also.pas
  mk_test ok_implicit_visibility_public ok_implicit_visibility.pas
  mk_test ok_implicit_visibility_published --implicit-visibility=published ok_implicit_visibility.pas
  mk_test ok_implicit_visibility_implicit_yes --implicit-visibility=implicit --visible-members=public,implicit ok_implicit_visibility.pas
  mk_test ok_implicit_visibility_implicit_no  --implicit-visibility=implicit --visible-members=public          ok_implicit_visibility.pas
  mk_test ok_bold_italic ok_bold_italic.pas
  mk_test warning_inherited_test warning_inherited_test.pas
  mk_test ok_preformatted_test ok_preformatted_test.pas
  mk_test ok_dashes ok_dashes.pas
  mk_test ok_lists ok_lists.pas
  mk_test warning_lists warning_lists.pas
  mk_test ok_table ok_table.pas
  mk_test ok_table_nonlatex ok_table_nonlatex.pas
  mk_test warning_table warning_table.pas
  mk_test ok_macros ok_macros.pas
  mk_test error_macros error_macros.pas
  mk_test error_macros_recursive error_macros_recursive.pas
  mk_test ok_macros_off --no-macro ok_macros_off.pas
  mk_test ok_item_set_number ok_item_set_number.pas
  mk_test error_unexpected_eof error_unexpected_eof.pas
  mk_test error_unexpected_eof_2 error_unexpected_eof_2.pas
  mk_test error_expected_semicolon error_expected_semicolon.pas
  mk_test ok_record_case_parsing ok_record_case_parsing.pas
  mk_test ok_record_with_case ok_record_with_case.pas
  mk_test ok_multiple_fields ok_multiple_fields.pas
  mk_test ok_back_comment ok_back_comment.pas
  mk_test warning_back_comment warning_back_comment.pas
  mk_test ok_auto_link --auto-link --auto-link-exclude ok_auto_link.txt ok_auto_link.pas
  mk_test ok_introduction_pre_link ok_introduction_pre_link_unit.pas --introduction=ok_introduction_pre_link.txt
  mk_test ok_table_of_contents ok_table_of_contents_unit.pas --introduction=ok_table_of_contents.txt
  mk_test warning_link_in_seealso warning_link_in_seealso.pas
  mk_test ok_caret_character ok_caret_character.pas
  mk_test ok_unit_uses_filename --write-uses-list ok_unit_uses_filename.pas
  mk_test ok_enum_explicit_assign ok_enum_explicit_assign.pas
  mk_test ok_if_directive ok_if_directive.pas
  mk_test ok_include_environment ok_include_environment.pas
  mk_test ok_enum_explicit_values ok_enum_explicit_values.pas
  mk_test ok_description_test --description ok_description_test.txt ok_description_test.pas
  mk_test ok_program --write-uses-list ok_program.pas
  mk_test ok_operator_test ok_operator_test.pas
  mk_test error_line_number_2 error_line_number_2.pas
  mk_test ok_dispid_method ok_dispid_method.pas
  mk_test ok_longcode_highlight ok_longcode_highlight.pas
  mk_test ok_non_matching_paren ok_non_matching_paren.pas
  mk_test ok_image ok_image.pas
  mk_test ok_include --introduction=ok_include_intro.txt ok_include.pas
  mk_test ok_class_var ok_class_var.pas
  mk_test error_line_number_3 error_line_number_3.pas
  mk_test ok_not_defined_omit ok_not_defined_omit.pas
  mk_test ok_abstract_sealed ok_abstract_sealed.pas
  mk_test ok_library ok_library.dpr
  mk_test ok_static_member ok_static_member.pas
  mk_test ok_strict_visibilities --visible-members protected,public,strictprotected,strictprivate ok_strict_visibilities.pas
  mk_test ok_weird_record ok_weird_record.dpr
  mk_test ok_include_quoted ok_include_quoted.pas
  mk_test ok_relative_include test_subdir/ok_relative_include_1.pas test_subdir/another_test_subdir/ok_relative_include_2.pas
  mk_test ok_list_item_set_number ok_list_item_set_number.pas
  mk_test ok_enum_field_var ok_enum_field_var.pas
  mk_test ok_back_comment_private ok_back_comment_private.pas
  mk_test warning_back_comment_class warning_back_comment_class.pas
  mk_test ok_excluded_unit ok_excluded_unit.pas
  mk_test ok_comment_over_uses_clause ok_comment_over_uses_clause.pas warning_back_comment_over_uses_clause.pas
  mk_test ok_interface_implicit ok_interface_implicit.pas --implicit-visibility=implicit
  mk_test ok_dot_unitname ok_dot_unitname.pas --write-uses-list
  mk_test ok_longcode_end_semicolon ok_longcode_end_semicolon.pas
  mk_test warning_desc_end warning_desc_end.pas
  mk_test ok_different_image_same_filename ok_different_image_same_filename_dir1/unit1.pas ok_different_image_same_filename_dir2/unit2.pas
  mk_test ok_enumeration_auto_abstract ok_enumeration_auto_abstract.pas --auto-abstract
  mk_test ok_ignore_leading ok_ignore_leading.pas --ignore-leading=*
  mk_test ok_ignore_leading_star ok_ignore_leading_star.pas --ignore-leading=* --staronly
  mk_test ok_ignore_leading_hash ok_ignore_leading_hash.pas --ignore-leading=#
  mk_test ok_ignore_leading_length2 ok_ignore_leading_length2.pas --ignore-leading=#?
  mk_test ok_packed_class_object ok_packed_class_object.pas
  mk_test ok_vorbisfile ok_vorbisfile.pas
  mk_test ok_procedural_const ok_procedural_const.pas
  mk_test ok_deprecated_const_string ok_deprecated_const_string.pas
  mk_test ok_external_class_hierarchy ok_external_class_hierarchy.pas --external-class-hierarchy=ok_external_class_hierarchy.txt
  mk_test ok_anonymous_methods ok_anonymous_methods.pas
  mk_test ok_class_record_helpers ok_class_record_helpers.pas
  mk_test utf_bom_test ok_bom.pas error_bom_utf16_be.pas error_bom_utf16_le.pas error_bom_utf32_be.pas
  mk_test ok_cvar ok_cvar.pas
  mk_test ok_nested_types ok_nested_types.pas
  mk_test ok_generic ok_generic.pas
  mk_test ok_helpinsight_comments ok_helpinsight_comments.pas
  mk_test ok_attributes ok_attributes.pas
  mk_test ok_final ok_final.pas
  mk_test ok_at_character_in_verbatim ok_at_character_in_verbatim.pas
  mk_test ok_deprecated_directive_note ok_deprecated_directive_note.pas
  mk_test ok_enum_links ok_enum_links.pas
  mk_test ok_no_link_inside_class ok_no_link_inside_class.pas
  mk_test ok_param_raises_at_property ok_param_raises_at_property.pas
  mk_test ok_date ok_date.pas
  mk_test ok_if_expressions ok_if_expressions.pas
  mk_test ok_prefix_identifier ok_prefix_identifier.pas
  # Note: do not use test_links_to_dot_names/*.pas,
  # as the order of files is then not guaranteed by the shell
  # (and it may differ e.g. between Linux and Cygwin)
  mk_test ok_links_to_dot_names ok_links_to_dot_names.pas \
    test_links_to_dot_names/test_dot.three.dots.pas \
    test_links_to_dot_names/test_dot.two.dots.pas \
    test_links_to_dot_names/test_dot.one_dot.pas \
    test_links_to_dot_names/test_dot_no_dot.pas
  mk_test ok_ignore_marker ok_ignore_marker.pas --ignore-marker=~~ --ignore-marker=TODO
  mk_test ok_skip_ifdefed_out ok_skip_ifdefed_out.pas
  mk_test warning_back_comments warning_back_comments.pas
  mk_test ok_longcode_indentation ok_longcode_indentation.pas
  mk_test ok_utf8_failchar ok_utf8_failchar.pas
  mk_test ok_markdown ok_markdown.pas --markdown
  mk_test ok_auto_back_comments ok_auto_back_comments.pas --auto-back-comments
  mk_test error_file_not_supported_dpk error_file_not_supported.dpk
  mk_test error_file_not_supported_inc error_file_not_supported.inc
  mk_test ok_no_comments_outside_class ok_no_comments_outside_class.pas
  mk_test ok_threadvar ok_threadvar.pas
  mk_test ok_read_char_code ok_read_char_code.pas
  mk_test error_line_number_4 error_line_number_4.pas
  mk_test error_missing_quote_in_literal error_missing_quote_in_literal.pas
  # Global operator is ifdef-ed with FPC
  mk_test ok_parse_impl ok_parse_impl.pas --define=FPC
  # Some regions are ifdef-ed, show them all with PASDOC define
  mk_test ok_parse_impl ok_parse_impl.pas --define=PASDOC
  mk_test ok_parse_impl_back_comments ok_parse_impl_back_comments.pas --implementation-comments=join --auto-back-comments
  mk_test ok_flag_parameter ok_flag_parameter.pas
  mk_test ok_lowecase_keywords --lowercase-keywords ok_lowecase_keywords.pas
  mk_test ok_url ok_url.pas
  mk_test ok_warning_note ok_warning_note.pas
  mk_test ok_generic_routines ok_generic_routines.pas
}

# parse params ----------------------------------------

# Assume pasdoc is on $PATH, if PASDOC_BIN not set.
PASDOC_BIN="${PASDOC_BIN:-pasdoc}"

for FORMAT; do
  all_tests_for_current_format
done