summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan van Berkom <tristan.vanberkom@codethink.co.uk>2020-06-14 23:11:23 +0900
committerTristan van Berkom <tristan.vanberkom@codethink.co.uk>2020-06-24 15:08:03 +0900
commit938ce5a5339d259b2e76878807c05002db01e34d (patch)
treea2f435a58975edb234bd121c40c18d8d2f134d52
parent9da47db4e11aa613a85233ae7519d94eeea48c14 (diff)
downloadbuildstream-938ce5a5339d259b2e76878807c05002db01e34d.tar.gz
tests/format/junctions.py: Adding tests for duplicate junctions
-rw-r--r--tests/format/junctions.py129
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/project.conf9
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-full-path/target.bst6
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-incomplete/target.bst6
-rw-r--r--tests/format/junctions/duplicates-nested-link1/project.conf8
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject1-link.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link1/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link1/target.bst6
-rw-r--r--tests/format/junctions/duplicates-nested-link2/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/project.conf8
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject2-link.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-link2/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-link2/target.bst6
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/project.conf8
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject1-link.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested-not-found/target.bst6
-rw-r--r--tests/format/junctions/duplicates-nested/project.conf7
-rw-r--r--tests/format/junctions/duplicates-nested/subproject.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/project.conf8
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-nested/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-nested/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-nested/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-nested/target.bst6
-rw-r--r--tests/format/junctions/duplicates-override-dup/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject.bst8
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/project.conf8
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject3.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject3/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject3/sub3.txt1
-rw-r--r--tests/format/junctions/duplicates-override-dup/subproject3/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-dup/target.bst5
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/duplicate.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/duplicate/duplicate.txt1
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/duplicate/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/duplicate/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/override.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/override/overridden-again.txt1
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/override/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/override/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/project.conf7
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject.bst8
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/override.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/override/overridden.txt1
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/override/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/override/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/project.conf7
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject.bst8
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/original.txt1
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/project.conf2
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/target.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/subproject/subsubsubproject-link.bst4
-rw-r--r--tests/format/junctions/duplicates-override-twice-link/target.bst5
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/project.conf7
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-incomplete/target.bst5
-rw-r--r--tests/format/junctions/duplicates-simple-link/project.conf8
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject2-link.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-link/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-link/target.bst5
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/project.conf8
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple-not-found/target.bst5
-rw-r--r--tests/format/junctions/duplicates-simple/project.conf8
-rw-r--r--tests/format/junctions/duplicates-simple/subproject1.bst4
-rw-r--r--tests/format/junctions/duplicates-simple/subproject1/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple/subproject1/sub.txt1
-rw-r--r--tests/format/junctions/duplicates-simple/subproject1/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple/subproject2.bst4
-rw-r--r--tests/format/junctions/duplicates-simple/subproject2/project.conf2
-rw-r--r--tests/format/junctions/duplicates-simple/subproject2/sub2.txt1
-rw-r--r--tests/format/junctions/duplicates-simple/subproject2/target.bst4
-rw-r--r--tests/format/junctions/duplicates-simple/target.bst5
180 files changed, 761 insertions, 7 deletions
diff --git a/tests/format/junctions.py b/tests/format/junctions.py
index cf1ae4c26..2e3900fe1 100644
--- a/tests/format/junctions.py
+++ b/tests/format/junctions.py
@@ -453,14 +453,23 @@ def test_override_twice(cli, tmpdir, datafiles):
#
@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
- "target,provenances",
+ "project_dir,target,provenances",
[
# Test a stack element which depends directly on the same project twice
- ("simple-conflict.bst", ["simple-conflict.bst [line 5 column 2]", "simple-conflict.bst [line 4 column 2]"]),
+ (
+ "conflicts",
+ "simple-conflict.bst",
+ ["simple-conflict.bst [line 5 column 2]", "simple-conflict.bst [line 4 column 2]"],
+ ),
# Test a dependency chain leading deep into a project which conflicts with the toplevel
- ("nested-conflict-toplevel.bst", ["subproject.bst:subsubproject-conflict-target.bst [line 4 column 2]"]),
+ (
+ "conflicts",
+ "nested-conflict-toplevel.bst",
+ ["subproject.bst:subsubproject-conflict-target.bst [line 4 column 2]"],
+ ),
# Test an attempt to override a subproject with a subproject of that same subproject through a different junction
(
+ "conflicts",
"override-conflict.bst",
[
"subproject-override-conflicting-path.bst [line 13 column 23]",
@@ -469,23 +478,52 @@ def test_override_twice(cli, tmpdir, datafiles):
),
# Same test as above, but specifying the target as a full path instead of a stack element
(
+ "conflicts",
"subproject-override-conflicting-path.bst:subsubproject.bst:target.bst",
["subproject-override-conflicting-path.bst [line 13 column 23]"],
),
# Test a dependency on a subproject conflicting with an include of a file from a different
# version of the same project
(
+ "conflicts",
"include-conflict-target.bst",
["include-conflict-target.bst [line 5 column 2]", "include-conflict.bst [line 4 column 7]"],
),
# Test an element kind which needs to load it's plugin from a subproject, but
# the element has a dependency on an element from a different version of the same project
- ("plugin-conflict.bst", ["project.conf [line 4 column 2]", "plugin-conflict.bst [line 4 column 2]"]),
+ (
+ "conflicts",
+ "plugin-conflict.bst",
+ ["project.conf [line 4 column 2]", "plugin-conflict.bst [line 4 column 2]"],
+ ),
+ # Test a project which subproject's the same project twice, but only lists it
+ # as a duplicate via one of it's junctions.
+ (
+ "duplicates-simple-incomplete",
+ "target.bst",
+ ["target.bst [line 4 column 2]", "target.bst [line 5 column 2]"],
+ ),
+ # Test a project which subproject's the same project twice, but only lists it
+ # as a duplicate via one of it's junctions.
+ (
+ "duplicates-nested-incomplete",
+ "target.bst",
+ ["target.bst [line 6 column 2]", "target.bst [line 4 column 2]", "target.bst [line 5 column 2]"],
+ ),
+ ],
+ ids=[
+ "simple",
+ "nested",
+ "override",
+ "override-full-path",
+ "include",
+ "plugin",
+ "incomplete-duplicates",
+ "incomplete-nested-duplicates",
],
- ids=["simple", "nested", "override", "override-full-path", "include", "plugin"],
)
-def test_conflict(cli, tmpdir, datafiles, target, provenances):
- project = os.path.join(str(datafiles), "conflicts")
+def test_conflict(cli, tmpdir, datafiles, project_dir, target, provenances):
+ project = os.path.join(str(datafiles), project_dir)
# Special case setup the conflicting project.conf
if target == "plugin-conflict.bst":
@@ -530,3 +568,80 @@ def test_circular_reference(cli, tmpdir, datafiles, target, provenance1, provena
assert provenance1 in result.stderr
if provenance2:
assert provenance2 in result.stderr
+
+
+#
+# Test explicitly marked duplicates
+#
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize(
+ "project_dir",
+ [
+ # Test a project with two direct dependencies on the same project
+ ("duplicates-simple"),
+ # Test a project with a dependency on a project with two duplicate subprojects,
+ # while additionally adding a dependency on that duplicated subproject at the toplevel
+ ("duplicates-nested"),
+ # Same as previous test, but duplicate the subprojects only from the toplevel,
+ # ensuring that the pathing and addressing of elements works.
+ ("duplicates-nested-full-path"),
+ # Test a project with two direct dependencies on the same project, one of them
+ # referred to via a link to the junction.
+ ("duplicates-simple-link"),
+ # Test a project where the toplevel duplicates a link in a subproject
+ ("duplicates-nested-link1"),
+ # Test a project where the toplevel duplicates a link to a nested subproject
+ ("duplicates-nested-link2"),
+ # Test a project which overrides the a subsubproject which is marked as a duplicate by the subproject,
+ # ensure that the duplicate relationship for the subproject/subsubproject is preserved.
+ ("duplicates-override-dup"),
+ # Test a project which overrides a deep subproject multiple times in the hierarchy, the intermediate
+ # junction to the deep subproject (which is overridden by the toplevel) marks that deep subproject as
+ # a duplicate using a link element in the project.conf to mark the duplicate, this link is otherwise unused.
+ ("duplicates-override-twice-link"),
+ ],
+ ids=[
+ "simple",
+ "nested",
+ "nested-full-path",
+ "simple-link",
+ "link-in-subproject",
+ "link-to-subproject",
+ "overridden",
+ "overridden-twice-link",
+ ],
+)
+def test_duplicates(cli, tmpdir, datafiles, project_dir):
+ project = os.path.join(str(datafiles), project_dir)
+
+ result = cli.run(project=project, args=["build", "target.bst"])
+ result.assert_success()
+
+
+#
+# Test errors which occur when duplicate lists refer to elements which
+# don't exist.
+#
+# While subprojects are not loaded by virtue of searching the duplicate
+# lists, we do attempt to load elements in loaded projects in order to
+# ensure that we properly traverse `link` elements.
+#
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize(
+ "project_dir,provenance",
+ [
+ # Test a not found duplicate at the toplevel
+ ("duplicates-simple-not-found", "project.conf [line 8 column 6]"),
+ # Test a listed duplicate of a broken `link` target in a subproject
+ ("duplicates-nested-not-found", "subproject.bst:subproject1-link.bst [line 4 column 10]"),
+ ],
+ ids=["simple", "broken-nested-link"],
+)
+def test_duplicates_not_found(cli, tmpdir, datafiles, project_dir, provenance):
+ project = os.path.join(str(datafiles), project_dir)
+
+ result = cli.run(project=project, args=["build", "target.bst"])
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.MISSING_FILE)
+
+ # Check that provenance was provided if expected
+ assert provenance in result.stderr
diff --git a/tests/format/junctions/duplicates-nested-full-path/project.conf b/tests/format/junctions/duplicates-nested-full-path/project.conf
new file mode 100644
index 000000000..ddac93c49
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/project.conf
@@ -0,0 +1,9 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject.bst:subproject1.bst
+ - subproject.bst:subproject2.bst
+ - subproject3.bst
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject.bst b/tests/format/junctions/duplicates-nested-full-path/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/project.conf b/tests/format/junctions/duplicates-nested-full-path/subproject/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject3.bst b/tests/format/junctions/duplicates-nested-full-path/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject3/project.conf b/tests/format/junctions/duplicates-nested-full-path/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested-full-path/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-full-path/subproject3/target.bst b/tests/format/junctions/duplicates-nested-full-path/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested-full-path/target.bst b/tests/format/junctions/duplicates-nested-full-path/target.bst
new file mode 100644
index 000000000..c9199fe0f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-full-path/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
+- subproject3.bst:target.bst
diff --git a/tests/format/junctions/duplicates-nested-incomplete/project.conf b/tests/format/junctions/duplicates-nested-incomplete/project.conf
new file mode 100644
index 000000000..2e4aff856
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/project.conf
@@ -0,0 +1,7 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject3.bst
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/project.conf b/tests/format/junctions/duplicates-nested-incomplete/subproject/project.conf
new file mode 100644
index 000000000..b9cc870a8
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/project.conf
@@ -0,0 +1,7 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject1.bst
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject3.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject3/project.conf b/tests/format/junctions/duplicates-nested-incomplete/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested-incomplete/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-incomplete/subproject3/target.bst b/tests/format/junctions/duplicates-nested-incomplete/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested-incomplete/target.bst b/tests/format/junctions/duplicates-nested-incomplete/target.bst
new file mode 100644
index 000000000..28e981ea3
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-incomplete/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject3.bst:target.bst
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
diff --git a/tests/format/junctions/duplicates-nested-link1/project.conf b/tests/format/junctions/duplicates-nested-link1/project.conf
new file mode 100644
index 000000000..e229b9f1f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/project.conf
@@ -0,0 +1,8 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject3.bst
+ - subproject.bst:subproject1-link.bst
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject.bst b/tests/format/junctions/duplicates-nested-link1/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/project.conf b/tests/format/junctions/duplicates-nested-link1/subproject/project.conf
new file mode 100644
index 000000000..0be41104a
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/project.conf
@@ -0,0 +1,7 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject1-link.bst b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1-link.bst
new file mode 100644
index 000000000..0e6d8a484
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1-link.bst
@@ -0,0 +1,4 @@
+kind: link
+
+config:
+ target: subproject1.bst
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject3.bst b/tests/format/junctions/duplicates-nested-link1/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject3/project.conf b/tests/format/junctions/duplicates-nested-link1/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested-link1/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link1/subproject3/target.bst b/tests/format/junctions/duplicates-nested-link1/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested-link1/target.bst b/tests/format/junctions/duplicates-nested-link1/target.bst
new file mode 100644
index 000000000..c9199fe0f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link1/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
+- subproject3.bst:target.bst
diff --git a/tests/format/junctions/duplicates-nested-link2/project.conf b/tests/format/junctions/duplicates-nested-link2/project.conf
new file mode 100644
index 000000000..2e4aff856
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/project.conf
@@ -0,0 +1,7 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject3.bst
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject.bst b/tests/format/junctions/duplicates-nested-link2/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/project.conf b/tests/format/junctions/duplicates-nested-link2/subproject/project.conf
new file mode 100644
index 000000000..99ccfa68c
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/project.conf
@@ -0,0 +1,8 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject1.bst
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject2-link.bst b/tests/format/junctions/duplicates-nested-link2/subproject2-link.bst
new file mode 100644
index 000000000..c7803f902
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject2-link.bst
@@ -0,0 +1,4 @@
+kind: link
+
+config:
+ target: subproject.bst:subproject2.bst
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject3.bst b/tests/format/junctions/duplicates-nested-link2/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject3/project.conf b/tests/format/junctions/duplicates-nested-link2/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested-link2/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-link2/subproject3/target.bst b/tests/format/junctions/duplicates-nested-link2/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested-link2/target.bst b/tests/format/junctions/duplicates-nested-link2/target.bst
new file mode 100644
index 000000000..3e3906da0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-link2/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject2-link.bst:target.bst
+- subproject3.bst:target.bst
diff --git a/tests/format/junctions/duplicates-nested-not-found/project.conf b/tests/format/junctions/duplicates-nested-not-found/project.conf
new file mode 100644
index 000000000..e229b9f1f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/project.conf
@@ -0,0 +1,8 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject3.bst
+ - subproject.bst:subproject1-link.bst
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject.bst b/tests/format/junctions/duplicates-nested-not-found/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/project.conf b/tests/format/junctions/duplicates-nested-not-found/subproject/project.conf
new file mode 100644
index 000000000..0be41104a
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/project.conf
@@ -0,0 +1,7 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1-link.bst b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1-link.bst
new file mode 100644
index 000000000..642ab8c42
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1-link.bst
@@ -0,0 +1,4 @@
+kind: link
+
+config:
+ target: subproject5.bst
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject3.bst b/tests/format/junctions/duplicates-nested-not-found/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject3/project.conf b/tests/format/junctions/duplicates-nested-not-found/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested-not-found/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested-not-found/subproject3/target.bst b/tests/format/junctions/duplicates-nested-not-found/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested-not-found/target.bst b/tests/format/junctions/duplicates-nested-not-found/target.bst
new file mode 100644
index 000000000..c9199fe0f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested-not-found/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
+- subproject3.bst:target.bst
diff --git a/tests/format/junctions/duplicates-nested/project.conf b/tests/format/junctions/duplicates-nested/project.conf
new file mode 100644
index 000000000..2e4aff856
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/project.conf
@@ -0,0 +1,7 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject3.bst
diff --git a/tests/format/junctions/duplicates-nested/subproject.bst b/tests/format/junctions/duplicates-nested/subproject.bst
new file mode 100644
index 000000000..c88189cb0
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
diff --git a/tests/format/junctions/duplicates-nested/subproject/project.conf b/tests/format/junctions/duplicates-nested/subproject/project.conf
new file mode 100644
index 000000000..99ccfa68c
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/project.conf
@@ -0,0 +1,8 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject1.bst
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject1.bst b/tests/format/junctions/duplicates-nested/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-nested/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-nested/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-nested/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject2.bst b/tests/format/junctions/duplicates-nested/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-nested/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-nested/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-nested/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-nested/subproject3.bst b/tests/format/junctions/duplicates-nested/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-nested/subproject3/project.conf b/tests/format/junctions/duplicates-nested/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-nested/subproject3/sub3.txt b/tests/format/junctions/duplicates-nested/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-nested/subproject3/target.bst b/tests/format/junctions/duplicates-nested/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-nested/target.bst b/tests/format/junctions/duplicates-nested/target.bst
new file mode 100644
index 000000000..c9199fe0f
--- /dev/null
+++ b/tests/format/junctions/duplicates-nested/target.bst
@@ -0,0 +1,6 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
+- subproject3.bst:target.bst
diff --git a/tests/format/junctions/duplicates-override-dup/project.conf b/tests/format/junctions/duplicates-override-dup/project.conf
new file mode 100644
index 000000000..20636c446
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/project.conf
@@ -0,0 +1,2 @@
+name: test
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-dup/subproject.bst b/tests/format/junctions/duplicates-override-dup/subproject.bst
new file mode 100644
index 000000000..376ac11ee
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subproject1.bst: subproject3.bst
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/project.conf b/tests/format/junctions/duplicates-override-dup/subproject/project.conf
new file mode 100644
index 000000000..99ccfa68c
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/project.conf
@@ -0,0 +1,8 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubtest:
+ - subproject1.bst
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject1.bst b/tests/format/junctions/duplicates-override-dup/subproject/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject1/project.conf b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject1/sub.txt b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject1/target.bst b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject2.bst b/tests/format/junctions/duplicates-override-dup/subproject/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject2/project.conf b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject2/sub2.txt b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-dup/subproject/subproject2/target.bst b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-override-dup/subproject3.bst b/tests/format/junctions/duplicates-override-dup/subproject3.bst
new file mode 100644
index 000000000..e4ee2f1d5
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject3.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject3
diff --git a/tests/format/junctions/duplicates-override-dup/subproject3/project.conf b/tests/format/junctions/duplicates-override-dup/subproject3/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject3/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-dup/subproject3/sub3.txt b/tests/format/junctions/duplicates-override-dup/subproject3/sub3.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject3/sub3.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-dup/subproject3/target.bst b/tests/format/junctions/duplicates-override-dup/subproject3/target.bst
new file mode 100644
index 000000000..cb81ea97f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/subproject3/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub3.txt
diff --git a/tests/format/junctions/duplicates-override-dup/target.bst b/tests/format/junctions/duplicates-override-dup/target.bst
new file mode 100644
index 000000000..6ca140afb
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-dup/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject.bst:subproject1.bst:target.bst
+- subproject.bst:subproject2.bst:target.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/duplicate.bst b/tests/format/junctions/duplicates-override-twice-link/duplicate.bst
new file mode 100644
index 000000000..4acb6e63b
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/duplicate.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: duplicate
diff --git a/tests/format/junctions/duplicates-override-twice-link/duplicate/duplicate.txt b/tests/format/junctions/duplicates-override-twice-link/duplicate/duplicate.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/duplicate/duplicate.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-twice-link/duplicate/project.conf b/tests/format/junctions/duplicates-override-twice-link/duplicate/project.conf
new file mode 100644
index 000000000..e508da808
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/duplicate/project.conf
@@ -0,0 +1,2 @@
+name: subsubsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-twice-link/duplicate/target.bst b/tests/format/junctions/duplicates-override-twice-link/duplicate/target.bst
new file mode 100644
index 000000000..8b350a12f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/duplicate/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: duplicate.txt
diff --git a/tests/format/junctions/duplicates-override-twice-link/override.bst b/tests/format/junctions/duplicates-override-twice-link/override.bst
new file mode 100644
index 000000000..c0564b631
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/override.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: override
diff --git a/tests/format/junctions/duplicates-override-twice-link/override/overridden-again.txt b/tests/format/junctions/duplicates-override-twice-link/override/overridden-again.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/override/overridden-again.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-twice-link/override/project.conf b/tests/format/junctions/duplicates-override-twice-link/override/project.conf
new file mode 100644
index 000000000..e508da808
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/override/project.conf
@@ -0,0 +1,2 @@
+name: subsubsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-twice-link/override/target.bst b/tests/format/junctions/duplicates-override-twice-link/override/target.bst
new file mode 100644
index 000000000..c05396c42
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/override/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: overridden-again.txt
diff --git a/tests/format/junctions/duplicates-override-twice-link/project.conf b/tests/format/junctions/duplicates-override-twice-link/project.conf
new file mode 100644
index 000000000..3dbb08c35
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/project.conf
@@ -0,0 +1,7 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubsubtest:
+ - duplicate.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject.bst b/tests/format/junctions/duplicates-override-twice-link/subproject.bst
new file mode 100644
index 000000000..297dbe90d
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject
+
+config:
+ overrides:
+ subsubproject.bst:subsubsubproject.bst: override.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/override.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/override.bst
new file mode 100644
index 000000000..c0564b631
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/override.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: override
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/override/overridden.txt b/tests/format/junctions/duplicates-override-twice-link/subproject/override/overridden.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/override/overridden.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/override/project.conf b/tests/format/junctions/duplicates-override-twice-link/subproject/override/project.conf
new file mode 100644
index 000000000..e508da808
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/override/project.conf
@@ -0,0 +1,2 @@
+name: subsubsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/override/target.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/override/target.bst
new file mode 100644
index 000000000..8a725bab6
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/override/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: overridden.txt
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/project.conf b/tests/format/junctions/duplicates-override-twice-link/subproject/project.conf
new file mode 100644
index 000000000..cf2fbc7f3
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/project.conf
@@ -0,0 +1,7 @@
+name: subtest
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subsubsubtest:
+ - subsubsubproject-link.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject.bst
new file mode 100644
index 000000000..fd5101878
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject.bst
@@ -0,0 +1,8 @@
+kind: junction
+sources:
+- kind: local
+ path: subsubproject
+
+config:
+ overrides:
+ subsubsubproject.bst: override.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/project.conf b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/project.conf
new file mode 100644
index 000000000..d11bcbb30
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/project.conf
@@ -0,0 +1,2 @@
+name: subsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject.bst
new file mode 100644
index 000000000..bce64597b
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subsubsubproject
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/original.txt b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/original.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/original.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/project.conf b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/project.conf
new file mode 100644
index 000000000..e508da808
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/project.conf
@@ -0,0 +1,2 @@
+name: subsubsubtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/target.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/target.bst
new file mode 100644
index 000000000..61edc6467
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubproject/subsubsubproject/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: original.txt
diff --git a/tests/format/junctions/duplicates-override-twice-link/subproject/subsubsubproject-link.bst b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubsubproject-link.bst
new file mode 100644
index 000000000..d397fb794
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/subproject/subsubsubproject-link.bst
@@ -0,0 +1,4 @@
+kind: link
+
+config:
+ target: subsubproject.bst:subsubsubproject.bst
diff --git a/tests/format/junctions/duplicates-override-twice-link/target.bst b/tests/format/junctions/duplicates-override-twice-link/target.bst
new file mode 100644
index 000000000..efbe3330b
--- /dev/null
+++ b/tests/format/junctions/duplicates-override-twice-link/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject.bst:subsubproject.bst:subsubsubproject.bst:target.bst
+- duplicate.bst:target.bst
diff --git a/tests/format/junctions/duplicates-simple-incomplete/project.conf b/tests/format/junctions/duplicates-simple-incomplete/project.conf
new file mode 100644
index 000000000..e7e7d8d63
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/project.conf
@@ -0,0 +1,7 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subtest:
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject1.bst b/tests/format/junctions/duplicates-simple-incomplete/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject1/project.conf b/tests/format/junctions/duplicates-simple-incomplete/subproject1/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject1/sub.txt b/tests/format/junctions/duplicates-simple-incomplete/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject1/target.bst b/tests/format/junctions/duplicates-simple-incomplete/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject2.bst b/tests/format/junctions/duplicates-simple-incomplete/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject2/project.conf b/tests/format/junctions/duplicates-simple-incomplete/subproject2/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject2/sub2.txt b/tests/format/junctions/duplicates-simple-incomplete/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-incomplete/subproject2/target.bst b/tests/format/junctions/duplicates-simple-incomplete/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-simple-incomplete/target.bst b/tests/format/junctions/duplicates-simple-incomplete/target.bst
new file mode 100644
index 000000000..fd4734b99
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-incomplete/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject1.bst:target.bst
+- subproject2.bst:target.bst
diff --git a/tests/format/junctions/duplicates-simple-link/project.conf b/tests/format/junctions/duplicates-simple-link/project.conf
new file mode 100644
index 000000000..1e1ebae69
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/project.conf
@@ -0,0 +1,8 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subtest:
+ - subproject1.bst
+ - subproject2-link.bst
diff --git a/tests/format/junctions/duplicates-simple-link/subproject1.bst b/tests/format/junctions/duplicates-simple-link/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-simple-link/subproject1/project.conf b/tests/format/junctions/duplicates-simple-link/subproject1/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-link/subproject1/sub.txt b/tests/format/junctions/duplicates-simple-link/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-link/subproject1/target.bst b/tests/format/junctions/duplicates-simple-link/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-simple-link/subproject2-link.bst b/tests/format/junctions/duplicates-simple-link/subproject2-link.bst
new file mode 100644
index 000000000..a8aebfa2c
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject2-link.bst
@@ -0,0 +1,4 @@
+kind: link
+
+config:
+ target: subproject2.bst
diff --git a/tests/format/junctions/duplicates-simple-link/subproject2.bst b/tests/format/junctions/duplicates-simple-link/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-simple-link/subproject2/project.conf b/tests/format/junctions/duplicates-simple-link/subproject2/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-link/subproject2/sub2.txt b/tests/format/junctions/duplicates-simple-link/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-link/subproject2/target.bst b/tests/format/junctions/duplicates-simple-link/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-simple-link/target.bst b/tests/format/junctions/duplicates-simple-link/target.bst
new file mode 100644
index 000000000..b674ed66c
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-link/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject1.bst:target.bst
+- subproject2-link.bst:target.bst
diff --git a/tests/format/junctions/duplicates-simple-not-found/project.conf b/tests/format/junctions/duplicates-simple-not-found/project.conf
new file mode 100644
index 000000000..793c6bf9b
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/project.conf
@@ -0,0 +1,8 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subtest:
+ - subproject1.bst
+ - subproject5.bst
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject1.bst b/tests/format/junctions/duplicates-simple-not-found/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject1/project.conf b/tests/format/junctions/duplicates-simple-not-found/subproject1/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject1/sub.txt b/tests/format/junctions/duplicates-simple-not-found/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject1/target.bst b/tests/format/junctions/duplicates-simple-not-found/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject2.bst b/tests/format/junctions/duplicates-simple-not-found/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject2/project.conf b/tests/format/junctions/duplicates-simple-not-found/subproject2/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject2/sub2.txt b/tests/format/junctions/duplicates-simple-not-found/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple-not-found/subproject2/target.bst b/tests/format/junctions/duplicates-simple-not-found/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-simple-not-found/target.bst b/tests/format/junctions/duplicates-simple-not-found/target.bst
new file mode 100644
index 000000000..fd4734b99
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple-not-found/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject1.bst:target.bst
+- subproject2.bst:target.bst
diff --git a/tests/format/junctions/duplicates-simple/project.conf b/tests/format/junctions/duplicates-simple/project.conf
new file mode 100644
index 000000000..3f5ac145d
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/project.conf
@@ -0,0 +1,8 @@
+name: test
+min-version: 2.0
+
+junctions:
+ duplicates:
+ subtest:
+ - subproject1.bst
+ - subproject2.bst
diff --git a/tests/format/junctions/duplicates-simple/subproject1.bst b/tests/format/junctions/duplicates-simple/subproject1.bst
new file mode 100644
index 000000000..bfd692d00
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject1.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject1
diff --git a/tests/format/junctions/duplicates-simple/subproject1/project.conf b/tests/format/junctions/duplicates-simple/subproject1/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject1/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple/subproject1/sub.txt b/tests/format/junctions/duplicates-simple/subproject1/sub.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject1/sub.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple/subproject1/target.bst b/tests/format/junctions/duplicates-simple/subproject1/target.bst
new file mode 100644
index 000000000..e24d9bbb4
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject1/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub.txt
diff --git a/tests/format/junctions/duplicates-simple/subproject2.bst b/tests/format/junctions/duplicates-simple/subproject2.bst
new file mode 100644
index 000000000..2343652e1
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject2.bst
@@ -0,0 +1,4 @@
+kind: junction
+sources:
+- kind: local
+ path: subproject2
diff --git a/tests/format/junctions/duplicates-simple/subproject2/project.conf b/tests/format/junctions/duplicates-simple/subproject2/project.conf
new file mode 100644
index 000000000..39a53e2ab
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject2/project.conf
@@ -0,0 +1,2 @@
+name: subtest
+min-version: 2.0
diff --git a/tests/format/junctions/duplicates-simple/subproject2/sub2.txt b/tests/format/junctions/duplicates-simple/subproject2/sub2.txt
new file mode 100644
index 000000000..f73f3093f
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject2/sub2.txt
@@ -0,0 +1 @@
+file
diff --git a/tests/format/junctions/duplicates-simple/subproject2/target.bst b/tests/format/junctions/duplicates-simple/subproject2/target.bst
new file mode 100644
index 000000000..a1d15e942
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/subproject2/target.bst
@@ -0,0 +1,4 @@
+kind: import
+sources:
+- kind: local
+ path: sub2.txt
diff --git a/tests/format/junctions/duplicates-simple/target.bst b/tests/format/junctions/duplicates-simple/target.bst
new file mode 100644
index 000000000..fd4734b99
--- /dev/null
+++ b/tests/format/junctions/duplicates-simple/target.bst
@@ -0,0 +1,5 @@
+kind: stack
+
+depends:
+- subproject1.bst:target.bst
+- subproject2.bst:target.bst