Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 27 additions & 16 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ TOOLS_DIR := tools
BUILD_DIR := build
TESTS_DIR := tests
NORM_RULE_TESTS_DIR := $(TESTS_DIR)/norm-rule
TAGS_TESTS_DIR := $(TESTS_DIR)/tags
NORM_RULE_DEF_DIR := $(NORM_RULE_TESTS_DIR)
NORM_RULE_EXPECTED_DIR := $(NORM_RULE_TESTS_DIR)/expected

Expand All @@ -27,27 +28,30 @@ TAGS_BACKEND := tags.rb
CREATE_NORM_RULE_TOOL := create_normative_rules.rb

# Input and output file names
TEST_ADOC_INPUT_FNAME := test.adoc
NORM_TAGS_OUTPUT_FNAME := test-norm-tags.json
GOOD_TEST_ADOC_INPUT_FNAME := test.adoc
BAD_TEST_ADOC_INPUT_FNAME := duplicate.adoc
GOOD_NORM_TAGS_OUTPUT_FNAME := test-norm-tags.json
BAD_NORM_TAGS_OUTPUT_FNAME := bad-tags.json
NORM_RULE_JSON_OUTPUT_FNAME := test-norm-rules.json
NORM_RULE_XLSX_OUTPUT_FNAME := test-norm-rules.xlsx

# Built output files
BUILT_NORM_TAGS := $(BUILD_DIR)/$(NORM_TAGS_OUTPUT_FNAME)
BUILT_NORM_TAGS_GOOD := $(BUILD_DIR)/$(GOOD_NORM_TAGS_OUTPUT_FNAME)
BUILT_NORM_TAGS_BAD := $(BUILD_DIR)/$(BAD_NORM_TAGS_OUTPUT_FNAME)
BUILT_NORM_RULES_JSON := $(BUILD_DIR)/$(NORM_RULE_JSON_OUTPUT_FNAME)
BUILT_NORM_RULES_XLSX := $(BUILD_DIR)/$(NORM_RULE_XLSX_OUTPUT_FNAME)

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

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

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

# Add -d to each normative rule definition filename
NORM_RULE_DEF_ARGS := $(foreach relative_pname,$(NORM_RULE_DEF_FILES),-d $(relative_pname))
Expand Down Expand Up @@ -119,17 +123,17 @@ test: build-tests compare-tests
# Build tests
.PHONY: build-tests build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx
build-tests: build-test-tags build-test-norm-rules-json build-test-norm-rules-xlsx
build-test-tags: $(BUILT_NORM_TAGS)
build-test-tags: $(BUILT_NORM_TAGS_GOOD) $(BUILT_NORM_TAGS_BAD)
build-test-norm-rules-json: $(BUILT_NORM_RULES_JSON)
build-test-norm-rules-xlsx: $(BUILT_NORM_RULES_XLSX)

# Compare tests against expected
.PHONY: compare-tests
compare-tests: compare-test-tags compare-test-norm-rules-json

compare-test-tags: $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS)
compare-test-tags: $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS_GOOD)
@echo "CHECKING BUILT TAGS AGAINST EXPECTED TAGS"
diff $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)
diff $(EXPECTED_NORM_TAGS) $(BUILT_NORM_TAGS_GOOD) && echo "diff PASSED" || (echo "diff FAILED"; exit 1)

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

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

update-test-tags: $(BUILT_NORM_TAGS)
cp -f $(BUILT_NORM_TAGS) $(EXPECTED_NORM_TAGS)
update-test-tags: $(BUILT_NORM_TAGS_GOOD)
cp -f $(BUILT_NORM_TAGS_GOOD) $(EXPECTED_NORM_TAGS)

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

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

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

# Build normative tags with bad adoc input
# Asciidoctor should exit with a non-zero status and then we just "touch" the output file so it exists and make is happy.
$(BUILT_NORM_TAGS_BAD): $(TAGS_TESTS_DIR)/$(BAD_TEST_ADOC_INPUT_FNAME) $(CONVERTERS_DIR)/$(TAGS_BACKEND)
$(WORKDIR_SETUP)
$(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)
$(WORKDIR_TEARDOWN)

# Build normative rules with JSON output format
$(BUILT_NORM_RULES_JSON): $(BUILT_NORM_TAGS) $(NORM_RULE_DEF_FILES)
$(BUILT_NORM_RULES_JSON): $(BUILT_NORM_TAGS_GOOD) $(NORM_RULE_DEF_FILES)
$(WORKDIR_SETUP)
cp -f $(BUILT_NORM_TAGS) $@.workdir
cp -f $(BUILT_NORM_TAGS_GOOD) $@.workdir
mkdir -p $@.workdir/build
$(DOCKER_CMD) $(DOCKER_QUOTE) ruby $(TOOLS_DIR)/$(CREATE_NORM_RULE_TOOL) $(NORM_TAG_FILE_ARGS) $(NORM_RULE_DEF_ARGS) $@ $(DOCKER_QUOTE)
$(WORKDIR_TEARDOWN)

# Build normative rules with XLSX output format
$(BUILT_NORM_RULES_XLSX): $(BUILT_NORM_TAGS) $(NORM_RULE_DEF_FILES)
$(BUILT_NORM_RULES_XLSX): $(BUILT_NORM_TAGS_GOOD) $(NORM_RULE_DEF_FILES)
$(WORKDIR_SETUP)
cp -f $(BUILT_NORM_TAGS) $@.workdir
cp -f $(BUILT_NORM_TAGS_GOOD) $@.workdir
mkdir -p $@.workdir/build
$(DOCKER_CMD) $(DOCKER_QUOTE) ruby $(TOOLS_DIR)/$(CREATE_NORM_RULE_TOOL) -x $(NORM_TAG_FILE_ARGS) $(NORM_RULE_DEF_ARGS) $@ $(DOCKER_QUOTE)
$(WORKDIR_TEARDOWN)
Expand Down
1 change: 1 addition & 0 deletions converters/tags.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ def convert(node, transform = node.node_name, opts = nil)
# this node is tagged appropriately.
unless node.id.nil?
if node.id.start_with?(@prefix)
raise "Duplicate tag name '#{node.id}'" unless @tag_map[node.id].nil?
@tag_map[node.id] = content
@section_stack.last["tags"] << node.id
end
Expand Down
7 changes: 7 additions & 0 deletions tests/tags/duplicate.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Used to test that tags backend will throw fatal error if duplicate tag detected.

== Chapter 1

Before inline [#bad:duplicate]#inside inline# outside inline.

Same tag [#bad:duplicate]#duplicated inside# duplicated outside.