Skip to content

Commit 6862903

Browse files
Merge pull request #91 from riscv/87-fatal-error-for-duplicate-tag-names
Added test for duplicate tag names
2 parents 7f9abe9 + 3bee368 commit 6862903

File tree

3 files changed

+35
-16
lines changed

3 files changed

+35
-16
lines changed

Makefile

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ TOOLS_DIR := tools
1919
BUILD_DIR := build
2020
TESTS_DIR := tests
2121
NORM_RULE_TESTS_DIR := $(TESTS_DIR)/norm-rule
22+
TAGS_TESTS_DIR := $(TESTS_DIR)/tags
2223
NORM_RULE_DEF_DIR := $(NORM_RULE_TESTS_DIR)
2324
NORM_RULE_EXPECTED_DIR := $(NORM_RULE_TESTS_DIR)/expected
2425

@@ -27,27 +28,30 @@ TAGS_BACKEND := tags.rb
2728
CREATE_NORM_RULE_TOOL := create_normative_rules.rb
2829

2930
# Input and output file names
30-
TEST_ADOC_INPUT_FNAME := test.adoc
31-
NORM_TAGS_OUTPUT_FNAME := test-norm-tags.json
31+
GOOD_TEST_ADOC_INPUT_FNAME := test.adoc
32+
BAD_TEST_ADOC_INPUT_FNAME := duplicate.adoc
33+
GOOD_NORM_TAGS_OUTPUT_FNAME := test-norm-tags.json
34+
BAD_NORM_TAGS_OUTPUT_FNAME := bad-tags.json
3235
NORM_RULE_JSON_OUTPUT_FNAME := test-norm-rules.json
3336
NORM_RULE_XLSX_OUTPUT_FNAME := test-norm-rules.xlsx
3437

3538
# Built output files
36-
BUILT_NORM_TAGS := $(BUILD_DIR)/$(NORM_TAGS_OUTPUT_FNAME)
39+
BUILT_NORM_TAGS_GOOD := $(BUILD_DIR)/$(GOOD_NORM_TAGS_OUTPUT_FNAME)
40+
BUILT_NORM_TAGS_BAD := $(BUILD_DIR)/$(BAD_NORM_TAGS_OUTPUT_FNAME)
3741
BUILT_NORM_RULES_JSON := $(BUILD_DIR)/$(NORM_RULE_JSON_OUTPUT_FNAME)
3842
BUILT_NORM_RULES_XLSX := $(BUILD_DIR)/$(NORM_RULE_XLSX_OUTPUT_FNAME)
3943

4044
# Copies of expected output files.
4145
# Use make target "update-expected" to update from build dir contents.
42-
EXPECTED_NORM_TAGS := $(NORM_RULE_EXPECTED_DIR)/$(NORM_TAGS_OUTPUT_FNAME)
46+
EXPECTED_NORM_TAGS := $(NORM_RULE_EXPECTED_DIR)/$(GOOD_NORM_TAGS_OUTPUT_FNAME)
4347
EXPECTED_NORM_RULES_JSON := $(NORM_RULE_EXPECTED_DIR)/$(NORM_RULE_JSON_OUTPUT_FNAME)
4448
EXPECTED_NORM_RULES_XLSX := $(NORM_RULE_EXPECTED_DIR)/$(NORM_RULE_XLSX_OUTPUT_FNAME)
4549

4650
# All normative rule definition input YAML files
4751
NORM_RULE_DEF_FILES := $(wildcard $(NORM_RULE_DEF_DIR)/*.yaml)
4852

4953
# Add -t to each normative tag input filename and add prefix of "/" to make into absolute pathname.
50-
NORM_TAG_FILE_ARGS := $(foreach relative_pname,$(BUILT_NORM_TAGS),-t /$(relative_pname))
54+
NORM_TAG_FILE_ARGS := $(foreach relative_pname,$(BUILT_NORM_TAGS_GOOD),-t /$(relative_pname))
5155

5256
# Add -d to each normative rule definition filename
5357
NORM_RULE_DEF_ARGS := $(foreach relative_pname,$(NORM_RULE_DEF_FILES),-d $(relative_pname))
@@ -119,17 +123,17 @@ test: build-tests compare-tests
119123
# Build tests
120124
.PHONY: build-tests build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx
121125
build-tests: build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx
122-
build-test-tags: $(BUILT_NORM_TAGS)
126+
build-test-tags: $(BUILT_NORM_TAGS_GOOD) $(BUILT_NORM_TAGS_BAD)
123127
build-test-norm-rules-json: $(BUILT_NORM_RULES_JSON)
124128
build-test-norm-rules-xlsx: $(BUILT_NORM_RULES_XLSX)
125129

126130
# Compare tests against expected
127131
.PHONY: compare-tests
128132
compare-tests: compare-test-tags compare-test-norm-rules-json
129133

130-
compare-test-tags: $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS)
134+
compare-test-tags: $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS_GOOD)
131135
@echo "CHECKING BUILT TAGS AGAINST EXPECTED TAGS"
132-
diff $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
136+
diff $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS_GOOD) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
133137

134138
compare-test-norm-rules: $(EXPECTED_NORM_RULES) $(BUILT_NORM_RULES)
135139

@@ -141,33 +145,40 @@ compare-test-norm-rules-json: $(EXPECTED_NORM_RULES_JSON) $(BUILT_NORM_RULES_JSO
141145
.PHONY: update-expected
142146
update-expected: update-test-tags update-test-norm-rules-json update-test-norm-rules-xlsx
143147

144-
update-test-tags: $(BUILT_NORM_TAGS)
145-
cp -f $(BUILT_NORM_TAGS) $(EXPECTED_NORM_TAGS)
148+
update-test-tags: $(BUILT_NORM_TAGS_GOOD)
149+
cp -f $(BUILT_NORM_TAGS_GOOD) $(EXPECTED_NORM_TAGS)
146150

147151
update-test-norm-rules-json: $(BUILT_NORM_RULES_JSON)
148152
cp -f $(BUILT_NORM_RULES_JSON) $(EXPECTED_NORM_RULES_JSON)
149153

150154
update-test-norm-rules-xlsx: $(BUILT_NORM_RULES_XLSX)
151155
cp -f $(BUILT_NORM_RULES_XLSX) $(EXPECTED_NORM_RULES_XLSX)
152156

153-
# Build normative tags
154-
$(BUILT_NORM_TAGS): $(NORM_RULE_TESTS_DIR)/$(TEST_ADOC_INPUT_FNAME) $(CONVERTERS_DIR)/$(TAGS_BACKEND)
157+
# Build normative tags with good adoc input
158+
$(BUILT_NORM_TAGS_GOOD): $(NORM_RULE_TESTS_DIR)/$(GOOD_TEST_ADOC_INPUT_FNAME) $(CONVERTERS_DIR)/$(TAGS_BACKEND)
155159
$(WORKDIR_SETUP)
156160
$(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_TAGS) $(OPTIONS) -a tags-match-prefix='norm:' -a tags-output-suffix='-norm-tags.json' $< $(DOCKER_QUOTE)
157161
$(WORKDIR_TEARDOWN)
158162

163+
# Build normative tags with bad adoc input
164+
# Asciidoctor should exit with a non-zero status and then we just "touch" the output file so it exists and make is happy.
165+
$(BUILT_NORM_TAGS_BAD): $(TAGS_TESTS_DIR)/$(BAD_TEST_ADOC_INPUT_FNAME) $(CONVERTERS_DIR)/$(TAGS_BACKEND)
166+
$(WORKDIR_SETUP)
167+
$(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_TAGS) $(OPTIONS) -a tags-match-prefix='bad:' -a tags-output-suffix='-bad-tags.json' $< || touch build/bad-tags.json $(DOCKER_QUOTE)
168+
$(WORKDIR_TEARDOWN)
169+
159170
# Build normative rules with JSON output format
160-
$(BUILT_NORM_RULES_JSON): $(BUILT_NORM_TAGS) $(NORM_RULE_DEF_FILES)
171+
$(BUILT_NORM_RULES_JSON): $(BUILT_NORM_TAGS_GOOD) $(NORM_RULE_DEF_FILES)
161172
$(WORKDIR_SETUP)
162-
cp -f $(BUILT_NORM_TAGS) $@.workdir
173+
cp -f $(BUILT_NORM_TAGS_GOOD) $@.workdir
163174
mkdir -p $@.workdir/build
164175
$(DOCKER_CMD) $(DOCKER_QUOTE) ruby $(TOOLS_DIR)/$(CREATE_NORM_RULE_TOOL) $(NORM_TAG_FILE_ARGS) $(NORM_RULE_DEF_ARGS) $@ $(DOCKER_QUOTE)
165176
$(WORKDIR_TEARDOWN)
166177

167178
# Build normative rules with XLSX output format
168-
$(BUILT_NORM_RULES_XLSX): $(BUILT_NORM_TAGS) $(NORM_RULE_DEF_FILES)
179+
$(BUILT_NORM_RULES_XLSX): $(BUILT_NORM_TAGS_GOOD) $(NORM_RULE_DEF_FILES)
169180
$(WORKDIR_SETUP)
170-
cp -f $(BUILT_NORM_TAGS) $@.workdir
181+
cp -f $(BUILT_NORM_TAGS_GOOD) $@.workdir
171182
mkdir -p $@.workdir/build
172183
$(DOCKER_CMD) $(DOCKER_QUOTE) ruby $(TOOLS_DIR)/$(CREATE_NORM_RULE_TOOL) -x $(NORM_TAG_FILE_ARGS) $(NORM_RULE_DEF_ARGS) $@ $(DOCKER_QUOTE)
173184
$(WORKDIR_TEARDOWN)

converters/tags.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def convert(node, transform = node.node_name, opts = nil)
8181
# this node is tagged appropriately.
8282
unless node.id.nil?
8383
if node.id.start_with?(@prefix)
84+
raise "Duplicate tag name '#{node.id}'" unless @tag_map[node.id].nil?
8485
@tag_map[node.id] = content
8586
@section_stack.last["tags"] << node.id
8687
end

tests/tags/duplicate.adoc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Used to test that tags backend will throw fatal error if duplicate tag detected.
2+
3+
== Chapter 1
4+
5+
Before inline [#bad:duplicate]#inside inline# outside inline.
6+
7+
Same tag [#bad:duplicate]#duplicated inside# duplicated outside.

0 commit comments

Comments
 (0)