summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorRohan McGovern <rohan.mcgovern@nokia.com>2011-10-12 11:34:14 +1000
committerRohan McGovern <rohan.mcgovern@nokia.com>2011-10-12 11:34:14 +1000
commitc6909d4f8a2938c8892cbfdf7d21fdf253d9d1d0 (patch)
treeac1d845af2ed0909705308a3eb24be6b28acf064 /t
Initial import from private repository qa-dungeon/pulseconfig.git
Diffstat (limited to 't')
-rw-r--r--t/01-test.t190
-rw-r--r--t/02-test-production.t118
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x8615
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo5_armel15
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo6_armel15
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Mobility/stages/symbian-abld_3.119
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks13
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/linux-g++-32_Ubuntu_9.1016
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/win32-msvc2008_Windows_714
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/linux-g++-32_Ubuntu_9.1017
-rw-r--r--t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/win32-msvc2008_Windows_715
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covc.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covselect.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/incredibuild.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/qt.branch1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/testr.branch1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/tests.testr1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/properties/tests.timeout1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/repository1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/script1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.publish1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/qt.use_binpkg1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/mobility.configure.extra_args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/run_tests1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/xplatform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/mobility.configure.extra_args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/run_tests1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/xplatform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/environment/SYMBIANBUILD_DEPENDENCYOFF1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/incredibuild.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/mobility.configure_args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/qt.use_binpkg1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/s60sdk.forceinstall1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/testr.extra_mkspec1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/tss.install1
-rw-r--r--t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/xplatform1
l---------t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/properties1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/repository1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/script1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/configure.extra_args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/make.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/memory_leak_tests.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.branch1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.mkspec1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/tests.enabled1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.covc.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.publish1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/incredibuild.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.branch1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.use_binpkg1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/testr.branch1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/tests.testr1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/repository1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/script1
l---------t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/stages1
l---------t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.covc.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.publish1
l---------t/testdata/01_mixed_typical/projects/Qt3d/properties/incredibuild.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt3d/properties/property.with-dash1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.branch1
l---------t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.use_binpkg1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt3d/properties/testr.branch1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt3d/properties/tests.testr1
l---------t/testdata/01_mixed_typical/projects/Qt3d/repository1
l---------t/testdata/01_mixed_typical/projects/Qt3d/script1
l---------t/testdata/01_mixed_typical/projects/Qt3d/stages1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/configure.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/qt.fast_hacks1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/tests.enabled1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_binaries/properties/configure.args1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_binaries/repository1
-rw-r--r--t/testdata/01_mixed_typical/projects/Qt_binaries/script1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/bullseye.covc.args1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/incredibuild.enabled1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/qt.use_binpkg1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/repository1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/script1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/bullseye.enabled1
l---------t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/qmake.args1
l---------t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/tests.enabled1
l---------t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/platform1
l---------t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/testr.mkspec1
-rw-r--r--t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/tests.enabled1
-rw-r--r--t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec1
-rw-r--r--t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/platform1
-rw-r--r--t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/testr.mkspec1
-rw-r--r--t/testdata/02_property_substitution_simple/expected/projects/testproject/stages/teststage7
-rw-r--r--t/testdata/02_property_substitution_simple/projects/testproject/script1
-rw-r--r--t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/source_property1
-rw-r--r--t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property1
-rw-r--r--t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property_with_backslash1
-rw-r--r--t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_property1
-rw-r--r--t/testdata/03_property_substitution_worstcase_order/expected/projects/testproject/stages/teststage5
-rw-r--r--t/testdata/03_property_substitution_worstcase_order/projects/testproject/script1
-rw-r--r--t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/00_using_property1
-rw-r--r--t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/01_source_property1
-rw-r--r--t/testdata/04_property_substitution_many/expected/projects/testproject/stages/teststage13
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/environment/ENV_USES_011
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/001
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/011
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/021
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/031
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/041
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/properties/051
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/script1
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/00_references_bunch_of_stuff1
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_00_021
-rw-r--r--t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_references_00_02_031
-rw-r--r--t/testdata/05_property_substitution_escapecharacters/expected/projects/testproject/stages/teststage6
-rw-r--r--t/testdata/05_property_substitution_escapecharacters/projects/testproject/script1
-rw-r--r--t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_no_substitution1
-rw-r--r--t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_substitution1
-rw-r--r--t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/source_property1
-rw-r--r--t/testdata/06_property_substitution_cyclic_dependency/expected/projects/testproject/stages/teststage.fail2
-rw-r--r--t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/script1
-rw-r--r--t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_011
-rw-r--r--t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_021
-rw-r--r--t/testdata/07_parse_error/expected/projects/testproject/stages/teststage.fail5
-rw-r--r--t/testdata/07_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/08_parse_error/expected/projects/testproject/stages/teststage.fail5
-rw-r--r--t/testdata/08_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/09_parse_error/expected/projects/testproject/stages/teststage.fail6
-rw-r--r--t/testdata/09_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/10_parse_error/expected/projects/testproject/stages/teststage.fail6
-rw-r--r--t/testdata/10_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/11_parse_error/expected/projects/testproject/stages/teststage.fail6
-rw-r--r--t/testdata/11_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/12_parse_error/expected/projects/testproject/stages/teststage.fail6
-rw-r--r--t/testdata/12_parse_error/projects/testproject/script1
-rw-r--r--t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/13_manual_overrides/expected/projects/testproject/stages/teststage6
-rw-r--r--t/testdata/13_manual_overrides/manual_overrides/environment/test_override_environment1
-rw-r--r--t/testdata/13_manual_overrides/manual_overrides/properties/test_override_property1
-rw-r--r--t/testdata/13_manual_overrides/projects/testproject/script1
-rw-r--r--t/testdata/13_manual_overrides/projects/testproject/stages/teststage/properties/testproperty1
-rw-r--r--t/testdata/14_no_manual_overrides/expected/projects/testproject/stages/teststage6
-rw-r--r--t/testdata/14_no_manual_overrides/manual_overrides/environment/test_override_environment1
-rw-r--r--t/testdata/14_no_manual_overrides/manual_overrides/properties/test_override_property1
-rw-r--r--t/testdata/14_no_manual_overrides/projects/testproject/script1
-rw-r--r--t/testdata/14_no_manual_overrides/projects/testproject/stages/teststage/properties/testproperty1
-rw-r--r--t/testdata/15_inheritance/expected/projects/Base/stages/stage119
-rw-r--r--t/testdata/15_inheritance/expected/projects/Base/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Base/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/BetweenStages/stages/stage114
-rw-r--r--t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_add15
-rw-r--r--t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_override14
-rw-r--r--t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_sub_add16
-rw-r--r--t/testdata/15_inheritance/expected/projects/Cycle1/stages/stage1.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/Cycle2/stages/stage1.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/Cycle3/stages/stage1.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage1.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage2.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage3.fail2
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage120
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage220
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage320
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage120
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage119
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage119
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage119
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage119
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage219
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage319
-rw-r--r--t/testdata/15_inheritance/expected/projects/Sub_sub_mixed/stages/stage121
-rw-r--r--t/testdata/15_inheritance/projects/Base/environment/base_env_011
-rw-r--r--t/testdata/15_inheritance/projects/Base/environment/base_env_021
-rw-r--r--t/testdata/15_inheritance/projects/Base/environment/base_env_031
-rw-r--r--t/testdata/15_inheritance/projects/Base/environment/base_env_041
-rw-r--r--t/testdata/15_inheritance/projects/Base/environment/base_env_051
-rw-r--r--t/testdata/15_inheritance/projects/Base/properties/property_011
-rw-r--r--t/testdata/15_inheritance/projects/Base/properties/property_021
-rw-r--r--t/testdata/15_inheritance/projects/Base/properties/property_031
-rw-r--r--t/testdata/15_inheritance/projects/Base/properties/property_041
-rw-r--r--t/testdata/15_inheritance/projects/Base/properties/property_051
-rw-r--r--t/testdata/15_inheritance/projects/Base/repository1
-rw-r--r--t/testdata/15_inheritance/projects/Base/script1
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_011
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_021
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_031
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_041
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_051
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_011
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_021
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_031
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_041
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_051
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_011
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_021
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_031
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_041
-rw-r--r--t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_051
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/properties/property_011
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/properties/property_021
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/properties/property_031
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/properties/property_041
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/properties/property_051
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/repository1
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/script1
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_011
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_021
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_031
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_041
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_051
l---------t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/properties/new_property_011
l---------t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/properties/stage_property_051
l---------t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/properties/new_property_021
l---------t/testdata/15_inheritance/projects/Cycle1/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Cycle1/stages/stage1/dummy0
l---------t/testdata/15_inheritance/projects/Cycle2/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Cycle2/stages/stage1/dummy0
l---------t/testdata/15_inheritance/projects/Cycle3/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Cycle3/stages/stage1/dummy0
-rw-r--r--t/testdata/15_inheritance/projects/StageCycle1/repository1
-rw-r--r--t/testdata/15_inheritance/projects/StageCycle1/script1
l---------t/testdata/15_inheritance/projects/StageCycle1/stages/stage1/inherits1
l---------t/testdata/15_inheritance/projects/StageCycle1/stages/stage2/inherits1
l---------t/testdata/15_inheritance/projects/StageCycle1/stages/stage3/inherits1
l---------t/testdata/15_inheritance/projects/Sub_single_addition/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_addition/properties/new_property_011
l---------t/testdata/15_inheritance/projects/Sub_single_addition_stage/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_addition_stage/stages/stage1/properties/new_property_011
l---------t/testdata/15_inheritance/projects/Sub_single_override/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_override/properties/property_011
l---------t/testdata/15_inheritance/projects/Sub_single_override_stage/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_override_stage/stages/stage1/properties/stage_property_011
l---------t/testdata/15_inheritance/projects/Sub_single_override_substitution/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_override_substitution/properties/property_051
l---------t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/stages/stage1/properties/stage_property_051
l---------t/testdata/15_inheritance/projects/Sub_sub_mixed/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/new_property_011
-rw-r--r--t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/property_051
-rw-r--r--t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/environment/base_env_021
l---------t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/inherits1
-rw-r--r--t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/properties/subsubmixed_stage1_011
-rw-r--r--t/testdata/16_forcesuccess/expected/projects/forcesuccessproject/stages/teststage9
-rw-r--r--t/testdata/16_forcesuccess/expected/projects/testproject/stages/forcestage9
-rw-r--r--t/testdata/16_forcesuccess/expected/projects/testproject/stages/teststage4
-rw-r--r--t/testdata/16_forcesuccess/projects/forcesuccessproject/forcesuccess1
-rw-r--r--t/testdata/16_forcesuccess/projects/forcesuccessproject/script1
-rw-r--r--t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/bad_property1
-rw-r--r--t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/ok_property1
-rw-r--r--t/testdata/16_forcesuccess/projects/testproject/script1
-rw-r--r--t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/forcesuccess1
-rw-r--r--t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/bad_property1
-rw-r--r--t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/ok_property1
-rw-r--r--t/testdata/16_forcesuccess/projects/testproject/stages/teststage/properties/ok_property1
279 files changed, 1260 insertions, 0 deletions
diff --git a/t/01-test.t b/t/01-test.t
new file mode 100644
index 00000000..6e901ad4
--- /dev/null
+++ b/t/01-test.t
@@ -0,0 +1,190 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Test::More tests => 101;
+use FindBin;
+use File::Basename;
+use IO::Capture::Stdout;
+use Text::Diff;
+
+do "$FindBin::Bin/../test.pl" or die "do test.pl: $!";
+
+sub debug
+{
+ print STDERR @_ unless 1;
+}
+
+sub clean_pulse_environment
+{
+ foreach my $key (keys %ENV) {
+ if ($key =~ /^PULSE_/i) {
+ delete $ENV{$key};
+ }
+ }
+}
+
+sub test_stage
+{
+ my %opts = @_;
+ my $confdir = $opts{confdir};
+ my $project = $opts{project};
+ my $stage = $opts{stage};
+
+ my $expectfail = 1;
+ my $expectedfile = "$confdir/expected/projects/$project/stages/$stage.fail";
+ if (! -e $expectedfile) {
+ $expectfail = 0;
+ $expectedfile = "$confdir/expected/projects/$project/stages/$stage";
+ }
+ my $expectedcontent = "";
+
+ # For convenience, we don't die if the file doesn't exist...
+ # This allows us to get the diff of newly created testdata.
+ if (-e $expectedfile) {
+ my $fh;
+ open $fh, "<$expectedfile" or die "open $expectedfile: $!";
+ while (my $line = <$fh>) {
+ if ($^O eq "MSWin32") {
+ # Convert Unix-style dry run to Windows-style
+ if ($line =~ /=/) {
+ if ($line =~ s/='(.+)'$/=$1/) {
+ $line =~ s/'"'"'/'/g;
+ }
+ $line = "set $line";
+ }
+ if ($line =~ /^export /) {
+ }
+ else {
+ $expectedcontent .= $line;
+ }
+ }
+ else {
+ $expectedcontent .= $line;
+ }
+ }
+ close $fh;
+ }
+
+
+ clean_pulse_environment;
+
+ # Override PulseTest's default setting of base.dir so we get predictable output
+ $ENV{PULSE_BASE_DIR} = "BASE_DIR";
+
+ # For this test case, force PulseTest to think we are in Pulse
+ if ($confdir =~ /14_no_manual_overrides/) {
+ $ENV{PULSE_BUILD_NUMBER} = "123";
+ $ENV{PULSE_BUILD_REASON} = "faked by test script";
+ }
+
+ debug " $project $stage:\n";
+
+ my $test = PulseTest->new(
+ project => $project,
+ stage => $stage,
+ confdir => $confdir,
+ );
+
+ my $error;
+ my $oldstderr = *STDERR;
+ my $capture = IO::Capture::Stdout->new;
+
+ *STDERR = *STDOUT;
+ $capture->start;
+ eval { $test->dryrun };
+ $error = $@;
+ $capture->stop;
+ *STDERR = $oldstderr;
+
+ my $content = "";
+ if ($expectfail) {
+ $content = $error;
+ }
+ else {
+ ok(!$error);
+ while (my $line = $capture->read) {
+ $content .= $line;
+ }
+ if (!$content && $error) {
+ $content = $error;
+ }
+ }
+
+ # For purposes of comparison, drop any absolute paths
+ $content =~ s| at [^ ]+test\.pl line \d+| at SCRIPT line LINE|g;
+ $content =~ s/$confdir/CONFDIR/g;
+
+ my $diff;
+ if ($content ne $expectedcontent) {
+ $diff = diff \$expectedcontent, \$content, {
+ FILENAME_A => $expectedfile,
+ FILENAME_B => "actual_output",
+ STYLE => "Unified"
+ };
+ }
+
+ if ($diff) {
+ print STDERR "dry run for `$project' stage `$stage' differed from expected:\n$diff\n";
+ }
+
+ ok(!$diff);
+}
+
+sub test_project
+{
+ my %opts = @_;
+ my $confdir = $opts{confdir};
+ my $project = $opts{project};
+
+ my $projectdir = "$confdir/projects/$project";
+ my $expecteddir = "$confdir/expected/projects/$project";
+
+ my %teststages;
+ foreach my $stage (glob "$expecteddir/stages/*") {
+ (-f $stage) or next;
+ my $stagename = basename($stage);
+ $stagename =~ s/\.fail$//;
+ $teststages{$stagename} = 1;
+ }
+ foreach my $stage (glob "$projectdir/stages/*") {
+ (-d $stage) or next;
+ my $stagename = basename($stage);
+ $teststages{$stagename} = 1;
+ }
+
+ foreach my $stage (keys %teststages) {
+ test_stage(
+ confdir => $confdir,
+ project => $project,
+ stage => $stage,
+ );
+ }
+}
+
+sub test_projects
+{
+ my %opts = @_;
+
+ my $testdata = $opts{testdata};
+
+ foreach my $project (glob "$testdata/projects/*") {
+ (-d $project) or next;
+
+ test_project(
+ confdir => $testdata,
+ project => basename($project),
+ );
+ }
+}
+
+my $testdatadir = "$FindBin::Bin/testdata";
+
+debug "$testdatadir:\n";
+
+foreach my $testdata (glob "$testdatadir/*") {
+ (-d $testdata) or next;
+ debug " $testdata:\n";
+ test_projects(testdata => $testdata);
+}
+
diff --git a/t/02-test-production.t b/t/02-test-production.t
new file mode 100644
index 00000000..2e7dc953
--- /dev/null
+++ b/t/02-test-production.t
@@ -0,0 +1,118 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+# This test does a dry run of all the real production data and checks
+# for any errors which can be detected in a dry run.
+
+use Test::More qw(no_plan);
+use FindBin;
+use File::Basename;
+use IO::Capture::Stdout;
+
+do "$FindBin::Bin/../test.pl" or die "do test.pl: $!";
+
+sub clean_pulse_environment
+{
+ foreach my $key (keys %ENV) {
+ if ($key =~ /^PULSE_/i) {
+ delete $ENV{$key};
+ }
+ }
+}
+
+sub test_stage
+{
+ my %opts = @_;
+ my $confdir = $opts{confdir};
+ my $project = $opts{project};
+ my $stage = $opts{stage};
+
+ clean_pulse_environment;
+
+ # Pretend we are in Pulse to get as accurate as possible results.
+ $ENV{PULSE_BUILD_NUMBER} = '123';
+ $ENV{PULSE_BUILD_REASON} = 'faked by test script';
+
+ my $test = PulseTest->new(
+ project => $project,
+ stage => $stage,
+ confdir => $confdir,
+ );
+
+ my $error;
+ my $capture = IO::Capture::Stdout->new;
+ $capture->start;
+ eval { $test->dryrun };
+ $error = $@;
+ $capture->stop;
+
+ print STDERR $error if $error;
+
+ ok(!$@);
+}
+
+sub find_all_stages
+{
+ my %opts = @_;
+ my $dir = $opts{dir};
+ my $stages = $opts{stages};
+ $stages = {} unless $stages;
+
+ my $test = PulseTest->new;
+
+ my $stagedir = $test->_follow_symlinks("$dir/stages");
+
+ foreach my $stage (glob "$stagedir/*") {
+ (-d $stage) or next;
+ $stages->{basename($stage)} = 1;
+ }
+
+ if (-e "$dir/inherits") {
+ my $parent = $test->_follow_symlinks("$dir/inherits");
+ find_all_stages(
+ dir => $parent,
+ stages => $stages,
+ );
+ }
+
+ return sort keys %{$stages};
+}
+
+sub test_project
+{
+ my %opts = @_;
+ my $confdir = $opts{confdir};
+ my $project = $opts{project};
+
+ my $projectdir = "$confdir/projects/$project";
+
+ my @stages = find_all_stages(dir => $projectdir);
+
+ foreach my $stage (@stages) {
+ test_stage(
+ confdir => $confdir,
+ project => $project,
+ stage => $stage,
+ );
+ }
+}
+
+sub test_projects
+{
+ my %opts = @_;
+
+ my $testdata = $opts{testdata};
+
+ foreach my $project (glob "$testdata/projects/*") {
+ (-d $project) or next;
+
+ test_project(
+ confdir => $testdata,
+ project => basename($project),
+ );
+ }
+}
+
+test_projects(testdata => "$FindBin::Bin/..");
+
diff --git a/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86 b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86
new file mode 100644
index 00000000..66e61dc5
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86
@@ -0,0 +1,15 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!tst_qgalleryfilter.cpp'
+PULSE_BULLSEYE_COVSELECT_ARGS='-a '"'"'!/'"'"' '"'"'src/'"'"' '"'"'plugins/'"'"''
+PULSE_BULLSEYE_ENABLED=1
+PULSE_BULLSEYE_PUBLISH=1
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_PLATFORM=linux-g++-32
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_TESTR_BRANCH=master
+PULSE_TESTS_TESTR=1
+PULSE_TESTS_TIMEOUT=900000
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_COVSELECT_ARGS PULSE_BULLSEYE_ENABLED PULSE_BULLSEYE_PUBLISH PULSE_INCREDIBUILD_ENABLED PULSE_PLATFORM PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_TESTR_BRANCH PULSE_TESTS_TESTR PULSE_TESTS_TIMEOUT
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/mobility/mobility_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo5_armel b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo5_armel
new file mode 100644
index 00000000..dda3c596
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo5_armel
@@ -0,0 +1,15 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!tst_qgalleryfilter.cpp'
+PULSE_BULLSEYE_COVSELECT_ARGS='-a '"'"'!/'"'"' '"'"'src/'"'"' '"'"'plugins/'"'"''
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_MOBILITY_CONFIGURE_EXTRA_ARGS=-maemo5
+PULSE_PLATFORM=maemo5
+PULSE_QT_BRANCH=4.7
+PULSE_RUN_TESTS=0
+PULSE_TESTR_BRANCH=master
+PULSE_TESTS_TESTR=1
+PULSE_TESTS_TIMEOUT=900000
+PULSE_XPLATFORM=maemo5
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_COVSELECT_ARGS PULSE_INCREDIBUILD_ENABLED PULSE_MOBILITY_CONFIGURE_EXTRA_ARGS PULSE_PLATFORM PULSE_QT_BRANCH PULSE_RUN_TESTS PULSE_TESTR_BRANCH PULSE_TESTS_TESTR PULSE_TESTS_TIMEOUT PULSE_XPLATFORM
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/mobility/mobility_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo6_armel b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo6_armel
new file mode 100644
index 00000000..5d9d03c0
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/maemo6_armel
@@ -0,0 +1,15 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!tst_qgalleryfilter.cpp'
+PULSE_BULLSEYE_COVSELECT_ARGS='-a '"'"'!/'"'"' '"'"'src/'"'"' '"'"'plugins/'"'"''
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_MOBILITY_CONFIGURE_EXTRA_ARGS=-maemo6
+PULSE_PLATFORM=maemo6
+PULSE_QT_BRANCH=4.7
+PULSE_RUN_TESTS=0
+PULSE_TESTR_BRANCH=master
+PULSE_TESTS_TESTR=1
+PULSE_TESTS_TIMEOUT=900000
+PULSE_XPLATFORM=maemo6
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_COVSELECT_ARGS PULSE_INCREDIBUILD_ENABLED PULSE_MOBILITY_CONFIGURE_EXTRA_ARGS PULSE_PLATFORM PULSE_QT_BRANCH PULSE_RUN_TESTS PULSE_TESTR_BRANCH PULSE_TESTS_TESTR PULSE_TESTS_TIMEOUT PULSE_XPLATFORM
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/mobility/mobility_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/symbian-abld_3.1 b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/symbian-abld_3.1
new file mode 100644
index 00000000..148eed9d
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Mobility/stages/symbian-abld_3.1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!tst_qgalleryfilter.cpp'
+PULSE_BULLSEYE_COVSELECT_ARGS='-a '"'"'!/'"'"' '"'"'src/'"'"' '"'"'plugins/'"'"''
+PULSE_INCREDIBUILD_ENABLED=0
+PULSE_MOBILITY_CONFIGURE_ARGS='-prefix BASE_DIR\_install -tests -examples -symbian-unfrozen'
+PULSE_PLATFORM=win32-g++
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_S60SDK_FORCEINSTALL=1
+PULSE_TESTR_BRANCH=master
+PULSE_TESTR_EXTRA_MKSPEC=_winscw-udeb_3.1
+PULSE_TESTS_TESTR=1
+PULSE_TESTS_TIMEOUT=900000
+PULSE_TSS_INSTALL=0
+PULSE_XPLATFORM=symbian-abld
+SYMBIANBUILD_DEPENDENCYOFF=1
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_COVSELECT_ARGS PULSE_INCREDIBUILD_ENABLED PULSE_MOBILITY_CONFIGURE_ARGS PULSE_PLATFORM PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_S60SDK_FORCEINSTALL PULSE_TESTR_BRANCH PULSE_TESTR_EXTRA_MKSPEC PULSE_TESTS_TESTR PULSE_TESTS_TIMEOUT PULSE_TSS_INSTALL PULSE_XPLATFORM SYMBIANBUILD_DEPENDENCYOFF
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/mobility/mobility_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks b/t/testdata/01_mixed_typical/expected/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks
new file mode 100644
index 00000000..085334d6
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks
@@ -0,0 +1,13 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_CONFIGURE_ARGS='-no-qt3support -nomake examples -nomake demos -nokia-developer'
+PULSE_CONFIGURE_EXTRA_ARGS='-silent -no-pch'
+PULSE_MAKE_ARGS=-j30
+PULSE_MEMORY_LEAK_TESTS_ENABLED=1
+PULSE_PLATFORM=linux-g++-32
+PULSE_QT_FAST_HACKS=1
+PULSE_TESTR_BRANCH=qt-4.7-memory-leak-trial
+PULSE_TESTR_MKSPEC=pulse_linux-g++-32_ubuntu910
+PULSE_TESTS_ENABLED=0
+export PULSE_BASE_DIR PULSE_CONFIGURE_ARGS PULSE_CONFIGURE_EXTRA_ARGS PULSE_MAKE_ARGS PULSE_MEMORY_LEAK_TESTS_ENABLED PULSE_PLATFORM PULSE_QT_FAST_HACKS PULSE_TESTR_BRANCH PULSE_TESTR_MKSPEC PULSE_TESTS_ENABLED
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/qt/qt_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/linux-g++-32_Ubuntu_9.10 b/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/linux-g++-32_Ubuntu_9.10
new file mode 100644
index 00000000..5a597fa9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/linux-g++-32_Ubuntu_9.10
@@ -0,0 +1,16 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!ExpressionEvaluator::evaluate_expression'
+PULSE_BULLSEYE_ENABLED=0
+PULSE_BULLSEYE_PUBLISH=1
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_PLATFORM=linux-g++-32
+PULSE_QMAKE_ARGS='CONFIG+=silent'
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_TESTR_BRANCH=creator-master
+PULSE_TESTR_MKSPEC=pulse_linux-g++-32_ubuntu910
+PULSE_TESTS_ENABLED=1
+PULSE_TESTS_TESTR=1
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_ENABLED PULSE_BULLSEYE_PUBLISH PULSE_INCREDIBUILD_ENABLED PULSE_PLATFORM PULSE_QMAKE_ARGS PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_TESTR_BRANCH PULSE_TESTR_MKSPEC PULSE_TESTS_ENABLED PULSE_TESTS_TESTR
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/generic/qt_project_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/win32-msvc2008_Windows_7 b/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/win32-msvc2008_Windows_7
new file mode 100644
index 00000000..c33e630a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Qt-Creator-master-4.7/stages/win32-msvc2008_Windows_7
@@ -0,0 +1,14 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!ExpressionEvaluator::evaluate_expression'
+PULSE_BULLSEYE_PUBLISH=1
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_PLATFORM=win32-msvc2008
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_TESTR_BRANCH=creator-master
+PULSE_TESTR_MKSPEC=pulse_win32-msvc2008_windows_7
+PULSE_TESTS_ENABLED=1
+PULSE_TESTS_TESTR=1
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_PUBLISH PULSE_INCREDIBUILD_ENABLED PULSE_PLATFORM PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_TESTR_BRANCH PULSE_TESTR_MKSPEC PULSE_TESTS_ENABLED PULSE_TESTS_TESTR
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/generic/qt_project_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/linux-g++-32_Ubuntu_9.10 b/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/linux-g++-32_Ubuntu_9.10
new file mode 100644
index 00000000..91917fae
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/linux-g++-32_Ubuntu_9.10
@@ -0,0 +1,17 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!ExpressionEvaluator::evaluate_expression'
+PULSE_BULLSEYE_ENABLED=0
+PULSE_BULLSEYE_PUBLISH=1
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_PLATFORM=linux-g++-32
+PULSE_PROPERTY_WITH_DASH=value
+PULSE_QMAKE_ARGS='CONFIG+=silent'
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_TESTR_BRANCH=qt3d-master
+PULSE_TESTR_MKSPEC=pulse_linux-g++-32_ubuntu910
+PULSE_TESTS_ENABLED=1
+PULSE_TESTS_TESTR=1
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_ENABLED PULSE_BULLSEYE_PUBLISH PULSE_INCREDIBUILD_ENABLED PULSE_PLATFORM PULSE_PROPERTY_WITH_DASH PULSE_QMAKE_ARGS PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_TESTR_BRANCH PULSE_TESTR_MKSPEC PULSE_TESTS_ENABLED PULSE_TESTS_TESTR
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/generic/qt_project_test.pl
diff --git a/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/win32-msvc2008_Windows_7 b/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/win32-msvc2008_Windows_7
new file mode 100644
index 00000000..b5ee2e79
--- /dev/null
+++ b/t/testdata/01_mixed_typical/expected/projects/Qt3d/stages/win32-msvc2008_Windows_7
@@ -0,0 +1,15 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BULLSEYE_COVC_ARGS='-t!ExpressionEvaluator::evaluate_expression'
+PULSE_BULLSEYE_PUBLISH=1
+PULSE_INCREDIBUILD_ENABLED=1
+PULSE_PLATFORM=win32-msvc2008
+PULSE_PROPERTY_WITH_DASH=value
+PULSE_QT_BRANCH=4.7
+PULSE_QT_USE_BINPKG=1
+PULSE_TESTR_BRANCH=qt3d-master
+PULSE_TESTR_MKSPEC=pulse_win32-msvc2008_windows_7
+PULSE_TESTS_ENABLED=1
+PULSE_TESTS_TESTR=1
+export PULSE_BASE_DIR PULSE_BULLSEYE_COVC_ARGS PULSE_BULLSEYE_PUBLISH PULSE_INCREDIBUILD_ENABLED PULSE_PLATFORM PULSE_PROPERTY_WITH_DASH PULSE_QT_BRANCH PULSE_QT_USE_BINPKG PULSE_TESTR_BRANCH PULSE_TESTR_MKSPEC PULSE_TESTS_ENABLED PULSE_TESTS_TESTR
+git clone qtgitreadonly:qa-dungeon/mainline.git _qadungeon
+perl _qadungeon/tests/generic/qt_project_test.pl
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covc.args b/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covc.args
new file mode 100644
index 00000000..a514e18e
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covc.args
@@ -0,0 +1 @@
+-t!tst_qgalleryfilter.cpp
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covselect.args b/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covselect.args
new file mode 100644
index 00000000..d932d146
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/bullseye.covselect.args
@@ -0,0 +1 @@
+-a '!/' 'src/' 'plugins/'
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/incredibuild.enabled b/t/testdata/01_mixed_typical/projects/Mobility/properties/incredibuild.enabled
new file mode 100644
index 00000000..56a6051c
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/incredibuild.enabled
@@ -0,0 +1 @@
+1 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/qt.branch b/t/testdata/01_mixed_typical/projects/Mobility/properties/qt.branch
new file mode 100644
index 00000000..4b65d9df
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/qt.branch
@@ -0,0 +1 @@
+4.7 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/testr.branch b/t/testdata/01_mixed_typical/projects/Mobility/properties/testr.branch
new file mode 100644
index 00000000..8b25206f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/testr.branch
@@ -0,0 +1 @@
+master \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.testr b/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.testr
new file mode 100644
index 00000000..56a6051c
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.testr
@@ -0,0 +1 @@
+1 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.timeout b/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.timeout
new file mode 100644
index 00000000..0b7557de
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/properties/tests.timeout
@@ -0,0 +1 @@
+900000 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/repository b/t/testdata/01_mixed_typical/projects/Mobility/repository
new file mode 100644
index 00000000..bd4489f9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/repository
@@ -0,0 +1 @@
+qtgitreadonly:qa-dungeon/mainline.git _qadungeon
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/script b/t/testdata/01_mixed_typical/projects/Mobility/script
new file mode 100644
index 00000000..672f21fc
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/script
@@ -0,0 +1 @@
+perl _qadungeon/tests/mobility/mobility_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.enabled b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.enabled
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.enabled
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.publish b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.publish
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/bullseye.publish
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/platform b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/platform
new file mode 100644
index 00000000..e903b14f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/platform
@@ -0,0 +1 @@
+linux-g++-32
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/qt.use_binpkg b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/qt.use_binpkg
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/linux-g++-32_Ubuntu_9.10_x86/properties/qt.use_binpkg
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/mobility.configure.extra_args b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/mobility.configure.extra_args
new file mode 100644
index 00000000..22bdf47a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/mobility.configure.extra_args
@@ -0,0 +1 @@
+-maemo5 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/platform b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/platform
new file mode 100644
index 00000000..5198189a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/platform
@@ -0,0 +1 @@
+maemo5 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/run_tests b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/run_tests
new file mode 100644
index 00000000..c2270834
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/run_tests
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/xplatform b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/xplatform
new file mode 100644
index 00000000..5198189a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo5_armel/properties/xplatform
@@ -0,0 +1 @@
+maemo5 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/mobility.configure.extra_args b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/mobility.configure.extra_args
new file mode 100644
index 00000000..48ff75f2
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/mobility.configure.extra_args
@@ -0,0 +1 @@
+-maemo6
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/platform b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/platform
new file mode 100644
index 00000000..dfc97c05
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/platform
@@ -0,0 +1 @@
+maemo6
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/run_tests b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/run_tests
new file mode 100644
index 00000000..c2270834
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/run_tests
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/xplatform b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/xplatform
new file mode 100644
index 00000000..dfc97c05
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/maemo6_armel/properties/xplatform
@@ -0,0 +1 @@
+maemo6
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/environment/SYMBIANBUILD_DEPENDENCYOFF b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/environment/SYMBIANBUILD_DEPENDENCYOFF
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/environment/SYMBIANBUILD_DEPENDENCYOFF
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/incredibuild.enabled b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/incredibuild.enabled
new file mode 100644
index 00000000..573541ac
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/incredibuild.enabled
@@ -0,0 +1 @@
+0
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/mobility.configure_args b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/mobility.configure_args
new file mode 100644
index 00000000..1bc258f6
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/mobility.configure_args
@@ -0,0 +1 @@
+-prefix ${base.dir}\\_install -tests -examples -symbian-unfrozen
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/platform b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/platform
new file mode 100644
index 00000000..acfabfb5
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/platform
@@ -0,0 +1 @@
+win32-g++
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/qt.use_binpkg b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/qt.use_binpkg
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/qt.use_binpkg
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/s60sdk.forceinstall b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/s60sdk.forceinstall
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/s60sdk.forceinstall
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/testr.extra_mkspec b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/testr.extra_mkspec
new file mode 100644
index 00000000..3b2bbd54
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/testr.extra_mkspec
@@ -0,0 +1 @@
+_winscw-udeb_3.1
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/tss.install b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/tss.install
new file mode 100644
index 00000000..573541ac
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/tss.install
@@ -0,0 +1 @@
+0
diff --git a/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/xplatform b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/xplatform
new file mode 100644
index 00000000..0a0ec3cc
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Mobility/stages/symbian-abld_3.1/properties/xplatform
@@ -0,0 +1 @@
+symbian-abld
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/properties b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/properties
new file mode 120000
index 00000000..64119802
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/properties
@@ -0,0 +1 @@
+../Qt_Continuous_Integration/properties \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/repository b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/repository
new file mode 100644
index 00000000..bd4489f9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/repository
@@ -0,0 +1 @@
+qtgitreadonly:qa-dungeon/mainline.git _qadungeon
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/script b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/script
new file mode 100644
index 00000000..f315845a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/script
@@ -0,0 +1 @@
+perl _qadungeon/tests/qt/qt_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/configure.extra_args b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/configure.extra_args
new file mode 100644
index 00000000..d4c10aeb
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/configure.extra_args
@@ -0,0 +1 @@
+-silent -no-pch
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/make.args b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/make.args
new file mode 100644
index 00000000..8d960190
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/make.args
@@ -0,0 +1 @@
+-j30
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/memory_leak_tests.enabled b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/memory_leak_tests.enabled
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/memory_leak_tests.enabled
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/platform b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/platform
new file mode 100644
index 00000000..e903b14f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/platform
@@ -0,0 +1 @@
+linux-g++-32
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.branch b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.branch
new file mode 100644
index 00000000..9baf933f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.branch
@@ -0,0 +1 @@
+qt-4.7-memory-leak-trial
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.mkspec b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.mkspec
new file mode 100644
index 00000000..d4bec808
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/testr.mkspec
@@ -0,0 +1 @@
+pulse_linux-g++-32_ubuntu910
diff --git a/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/tests.enabled b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/tests.enabled
new file mode 100644
index 00000000..573541ac
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-4.7-memory-leak-trial/stages/linux-g++-32_Ubuntu_9.10_x86_memory_leaks/properties/tests.enabled
@@ -0,0 +1 @@
+0
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.covc.args b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.covc.args
new file mode 120000
index 00000000..fdeaafb3
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.covc.args
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/bullseye.covc.args \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.publish b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.publish
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/bullseye.publish
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/incredibuild.enabled b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/incredibuild.enabled
new file mode 120000
index 00000000..6e7bbdc6
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/incredibuild.enabled
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/incredibuild.enabled \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.branch b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.branch
new file mode 100644
index 00000000..4f8c6396
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.branch
@@ -0,0 +1 @@
+4.7
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.use_binpkg b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.use_binpkg
new file mode 120000
index 00000000..d4f1d784
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/qt.use_binpkg
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/qt.use_binpkg \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/testr.branch b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/testr.branch
new file mode 100644
index 00000000..16d25296
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/testr.branch
@@ -0,0 +1 @@
+creator-master
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/tests.testr b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/tests.testr
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/properties/tests.testr
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/repository b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/repository
new file mode 120000
index 00000000..ffb1623e
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/repository
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/repository \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/script b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/script
new file mode 120000
index 00000000..69e0f2b4
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/script
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/script \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/stages b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/stages
new file mode 120000
index 00000000..c89bab19
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt-Creator-master-4.7/stages
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/stages \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.covc.args b/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.covc.args
new file mode 120000
index 00000000..fdeaafb3
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.covc.args
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/bullseye.covc.args \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.publish b/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.publish
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/bullseye.publish
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/incredibuild.enabled b/t/testdata/01_mixed_typical/projects/Qt3d/properties/incredibuild.enabled
new file mode 120000
index 00000000..6e7bbdc6
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/incredibuild.enabled
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/incredibuild.enabled \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/property.with-dash b/t/testdata/01_mixed_typical/projects/Qt3d/properties/property.with-dash
new file mode 100644
index 00000000..6d4e1507
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/property.with-dash
@@ -0,0 +1 @@
+value
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.branch b/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.branch
new file mode 100644
index 00000000..4f8c6396
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.branch
@@ -0,0 +1 @@
+4.7
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.use_binpkg b/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.use_binpkg
new file mode 120000
index 00000000..d4f1d784
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/qt.use_binpkg
@@ -0,0 +1 @@
+../../../standard_projects/generic_qt/properties/qt.use_binpkg \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/testr.branch b/t/testdata/01_mixed_typical/projects/Qt3d/properties/testr.branch
new file mode 100644
index 00000000..c9eb30ec
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/testr.branch
@@ -0,0 +1 @@
+qt3d-master
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/properties/tests.testr b/t/testdata/01_mixed_typical/projects/Qt3d/properties/tests.testr
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/properties/tests.testr
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/repository b/t/testdata/01_mixed_typical/projects/Qt3d/repository
new file mode 120000
index 00000000..ffb1623e
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/repository
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/repository \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/script b/t/testdata/01_mixed_typical/projects/Qt3d/script
new file mode 120000
index 00000000..69e0f2b4
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/script
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/script \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt3d/stages b/t/testdata/01_mixed_typical/projects/Qt3d/stages
new file mode 120000
index 00000000..c89bab19
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt3d/stages
@@ -0,0 +1 @@
+../../standard_projects/generic_qt/stages \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/configure.args b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/configure.args
new file mode 100644
index 00000000..097905c8
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/configure.args
@@ -0,0 +1 @@
+-no-qt3support -nomake examples -nomake demos -nokia-developer
diff --git a/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/qt.fast_hacks b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/qt.fast_hacks
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/qt.fast_hacks
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/tests.enabled b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/tests.enabled
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_Continuous_Integration/properties/tests.enabled
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/projects/Qt_binaries/properties/configure.args b/t/testdata/01_mixed_typical/projects/Qt_binaries/properties/configure.args
new file mode 100644
index 00000000..7036181d
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_binaries/properties/configure.args
@@ -0,0 +1 @@
+-opensource -confirm-license -developer-build -no-multimedia
diff --git a/t/testdata/01_mixed_typical/projects/Qt_binaries/repository b/t/testdata/01_mixed_typical/projects/Qt_binaries/repository
new file mode 100644
index 00000000..bd4489f9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_binaries/repository
@@ -0,0 +1 @@
+qtgitreadonly:qa-dungeon/mainline.git _qadungeon
diff --git a/t/testdata/01_mixed_typical/projects/Qt_binaries/script b/t/testdata/01_mixed_typical/projects/Qt_binaries/script
new file mode 100644
index 00000000..f315845a
--- /dev/null
+++ b/t/testdata/01_mixed_typical/projects/Qt_binaries/script
@@ -0,0 +1 @@
+perl _qadungeon/tests/qt/qt_pulse_test.pl
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/bullseye.covc.args b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/bullseye.covc.args
new file mode 100644
index 00000000..01505591
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/bullseye.covc.args
@@ -0,0 +1 @@
+-t!ExpressionEvaluator::evaluate_expression
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/incredibuild.enabled b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/incredibuild.enabled
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/incredibuild.enabled
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/qt.use_binpkg b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/qt.use_binpkg
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/properties/qt.use_binpkg
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/repository b/t/testdata/01_mixed_typical/standard_projects/generic_qt/repository
new file mode 100644
index 00000000..bd4489f9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/repository
@@ -0,0 +1 @@
+qtgitreadonly:qa-dungeon/mainline.git _qadungeon
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/script b/t/testdata/01_mixed_typical/standard_projects/generic_qt/script
new file mode 100644
index 00000000..cf4d60bb
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/script
@@ -0,0 +1 @@
+perl _qadungeon/tests/generic/qt_project_test.pl
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/bullseye.enabled b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/bullseye.enabled
new file mode 100644
index 00000000..573541ac
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/bullseye.enabled
@@ -0,0 +1 @@
+0
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/platform b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/platform
new file mode 120000
index 00000000..6b3edf4f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/platform
@@ -0,0 +1 @@
+../../../../../standard_stages/linux-g++-32_Ubuntu_9.10/properties/platform \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/qmake.args b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/qmake.args
new file mode 100644
index 00000000..fa0f8a9c
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/qmake.args
@@ -0,0 +1 @@
+CONFIG+=silent
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec
new file mode 120000
index 00000000..0f07cbe9
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec
@@ -0,0 +1 @@
+../../../../../standard_stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/tests.enabled b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/tests.enabled
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/linux-g++-32_Ubuntu_9.10/properties/tests.enabled
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/platform b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/platform
new file mode 120000
index 00000000..26ded014
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/platform
@@ -0,0 +1 @@
+../../../../../standard_stages/win32-msvc2008_Windows_7/properties/platform \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/testr.mkspec b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/testr.mkspec
new file mode 120000
index 00000000..4d97941e
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/testr.mkspec
@@ -0,0 +1 @@
+../../../../../standard_stages/win32-msvc2008_Windows_7/properties/testr.mkspec \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/tests.enabled b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/tests.enabled
new file mode 100644
index 00000000..56a6051c
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_projects/generic_qt/stages/win32-msvc2008_Windows_7/properties/tests.enabled
@@ -0,0 +1 @@
+1 \ No newline at end of file
diff --git a/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/platform b/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/platform
new file mode 100644
index 00000000..e903b14f
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/platform
@@ -0,0 +1 @@
+linux-g++-32
diff --git a/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec b/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec
new file mode 100644
index 00000000..d4bec808
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_stages/linux-g++-32_Ubuntu_9.10/properties/testr.mkspec
@@ -0,0 +1 @@
+pulse_linux-g++-32_ubuntu910
diff --git a/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/platform b/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/platform
new file mode 100644
index 00000000..39c85df5
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/platform
@@ -0,0 +1 @@
+win32-msvc2008
diff --git a/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/testr.mkspec b/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/testr.mkspec
new file mode 100644
index 00000000..23b45f29
--- /dev/null
+++ b/t/testdata/01_mixed_typical/standard_stages/win32-msvc2008_Windows_7/properties/testr.mkspec
@@ -0,0 +1 @@
+pulse_win32-msvc2008_windows_7
diff --git a/t/testdata/02_property_substitution_simple/expected/projects/testproject/stages/teststage b/t/testdata/02_property_substitution_simple/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..6f430e19
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/expected/projects/testproject/stages/teststage
@@ -0,0 +1,7 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_SOURCE_PROPERTY='string from source property'
+PULSE_USING_NONEXISTENT_PROPERTY='this should be empty: ""'
+PULSE_USING_NONEXISTENT_PROPERTY_WITH_BACKSLASH='this should be empty: "\foo\bar"'
+PULSE_USING_PROPERTY='This property uses another property: "string from source property"'
+export PULSE_BASE_DIR PULSE_SOURCE_PROPERTY PULSE_USING_NONEXISTENT_PROPERTY PULSE_USING_NONEXISTENT_PROPERTY_WITH_BACKSLASH PULSE_USING_PROPERTY
+testscript
diff --git a/t/testdata/02_property_substitution_simple/projects/testproject/script b/t/testdata/02_property_substitution_simple/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/source_property b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/source_property
new file mode 100644
index 00000000..9269ec95
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/source_property
@@ -0,0 +1 @@
+string from source property
diff --git a/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property
new file mode 100644
index 00000000..e7dca296
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property
@@ -0,0 +1 @@
+this should be empty: "$(does_not_exist)"
diff --git a/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property_with_backslash b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property_with_backslash
new file mode 100644
index 00000000..4da0d5e4
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_nonexistent_property_with_backslash
@@ -0,0 +1 @@
+this should be empty: "$(does_not_exist)\\foo\\bar"
diff --git a/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_property b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_property
new file mode 100644
index 00000000..cec8b6f8
--- /dev/null
+++ b/t/testdata/02_property_substitution_simple/projects/testproject/stages/teststage/properties/using_property
@@ -0,0 +1 @@
+This property uses another property: "${source_property}"
diff --git a/t/testdata/03_property_substitution_worstcase_order/expected/projects/testproject/stages/teststage b/t/testdata/03_property_substitution_worstcase_order/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..8af66468
--- /dev/null
+++ b/t/testdata/03_property_substitution_worstcase_order/expected/projects/testproject/stages/teststage
@@ -0,0 +1,5 @@
+PULSE_00_USING_PROPERTY='This property uses another property: "string from source property"'
+PULSE_01_SOURCE_PROPERTY='string from source property'
+PULSE_BASE_DIR=BASE_DIR
+export PULSE_00_USING_PROPERTY PULSE_01_SOURCE_PROPERTY PULSE_BASE_DIR
+testscript
diff --git a/t/testdata/03_property_substitution_worstcase_order/projects/testproject/script b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/00_using_property b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/00_using_property
new file mode 100644
index 00000000..43d8a3d2
--- /dev/null
+++ b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/00_using_property
@@ -0,0 +1 @@
+This property uses another property: "$(01_source_property)"
diff --git a/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/01_source_property b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/01_source_property
new file mode 100644
index 00000000..9269ec95
--- /dev/null
+++ b/t/testdata/03_property_substitution_worstcase_order/projects/testproject/stages/teststage/properties/01_source_property
@@ -0,0 +1 @@
+string from source property
diff --git a/t/testdata/04_property_substitution_many/expected/projects/testproject/stages/teststage b/t/testdata/04_property_substitution_many/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..cd93a629
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/expected/projects/testproject/stages/teststage
@@ -0,0 +1,13 @@
+PULSE_00=value00
+PULSE_00_REFERENCES_BUNCH_OF_STUFF='all over the place: value01 value00 nested value:"value00 value02" value03 value05'
+PULSE_01=value01
+PULSE_02=value02
+PULSE_03=value03
+PULSE_04=value04
+PULSE_05=value05
+PULSE_BASE_DIR=BASE_DIR
+PULSE_REFERENCES_00_02='value:"value00 value02"'
+PULSE_REFERENCES_REFERENCES_00_02_03='nested value:"value00 value02" value03'
+ENV_USES_01='uses 01: value01'
+export PULSE_00 PULSE_00_REFERENCES_BUNCH_OF_STUFF PULSE_01 PULSE_02 PULSE_03 PULSE_04 PULSE_05 PULSE_BASE_DIR PULSE_REFERENCES_00_02 PULSE_REFERENCES_REFERENCES_00_02_03 ENV_USES_01
+testscript
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/environment/ENV_USES_01 b/t/testdata/04_property_substitution_many/projects/testproject/environment/ENV_USES_01
new file mode 100644
index 00000000..2f80b4e5
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/environment/ENV_USES_01
@@ -0,0 +1 @@
+uses 01: $(01)
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/00 b/t/testdata/04_property_substitution_many/projects/testproject/properties/00
new file mode 100644
index 00000000..63c12cec
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/00
@@ -0,0 +1 @@
+value00
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/01 b/t/testdata/04_property_substitution_many/projects/testproject/properties/01
new file mode 100644
index 00000000..9508b7c0
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/01
@@ -0,0 +1 @@
+value01
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/02 b/t/testdata/04_property_substitution_many/projects/testproject/properties/02
new file mode 100644
index 00000000..b58ed30d
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/02
@@ -0,0 +1 @@
+value02
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/03 b/t/testdata/04_property_substitution_many/projects/testproject/properties/03
new file mode 100644
index 00000000..479183ca
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/03
@@ -0,0 +1 @@
+value03
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/04 b/t/testdata/04_property_substitution_many/projects/testproject/properties/04
new file mode 100644
index 00000000..4622fd7d
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/04
@@ -0,0 +1 @@
+value04
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/properties/05 b/t/testdata/04_property_substitution_many/projects/testproject/properties/05
new file mode 100644
index 00000000..fa13a5cf
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/properties/05
@@ -0,0 +1 @@
+value05
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/script b/t/testdata/04_property_substitution_many/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/00_references_bunch_of_stuff b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/00_references_bunch_of_stuff
new file mode 100644
index 00000000..3a60b4db
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/00_references_bunch_of_stuff
@@ -0,0 +1 @@
+all over the place: $(01) $(00) ${references_references_00_02_03} $(05)
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_00_02 b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_00_02
new file mode 100644
index 00000000..fce67ced
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_00_02
@@ -0,0 +1 @@
+value:"$(00) $(02)"
diff --git a/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_references_00_02_03 b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_references_00_02_03
new file mode 100644
index 00000000..2c202cc0
--- /dev/null
+++ b/t/testdata/04_property_substitution_many/projects/testproject/stages/teststage/properties/references_references_00_02_03
@@ -0,0 +1 @@
+nested ${references_00_02} $(03)
diff --git a/t/testdata/05_property_substitution_escapecharacters/expected/projects/testproject/stages/teststage b/t/testdata/05_property_substitution_escapecharacters/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..32c310fc
--- /dev/null
+++ b/t/testdata/05_property_substitution_escapecharacters/expected/projects/testproject/stages/teststage
@@ -0,0 +1,6 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_CONTAINING_ESCAPE_CHARACTERS_AND_NO_SUBSTITUTION='Here'"'"'s a thing: $(source_property) and backslash: `\'"'"' and dollar sign: $'
+PULSE_PROPERTY_CONTAINING_ESCAPE_CHARACTERS_AND_SUBSTITUTION='here'"'"'s a thing: string from source property and again: string from source property and backslash: \ and dollar sign: $'
+PULSE_SOURCE_PROPERTY='string from source property'
+export PULSE_BASE_DIR PULSE_PROPERTY_CONTAINING_ESCAPE_CHARACTERS_AND_NO_SUBSTITUTION PULSE_PROPERTY_CONTAINING_ESCAPE_CHARACTERS_AND_SUBSTITUTION PULSE_SOURCE_PROPERTY
+testscript
diff --git a/t/testdata/05_property_substitution_escapecharacters/projects/testproject/script b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_no_substitution b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_no_substitution
new file mode 100644
index 00000000..0d4b2574
--- /dev/null
+++ b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_no_substitution
@@ -0,0 +1 @@
+Here's a thing: \$(source_property) and backslash: `\\' and dollar sign: \$
diff --git a/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_substitution b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_substitution
new file mode 100644
index 00000000..54e7bbb5
--- /dev/null
+++ b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/property_containing_escape_characters_and_substitution
@@ -0,0 +1 @@
+here's a thing: $(source_property) and again: ${source_property} and backslash: \\ and dollar sign: \$
diff --git a/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/source_property b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/source_property
new file mode 100644
index 00000000..9269ec95
--- /dev/null
+++ b/t/testdata/05_property_substitution_escapecharacters/projects/testproject/stages/teststage/properties/source_property
@@ -0,0 +1 @@
+string from source property
diff --git a/t/testdata/06_property_substitution_cyclic_dependency/expected/projects/testproject/stages/teststage.fail b/t/testdata/06_property_substitution_cyclic_dependency/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..d59ba214
--- /dev/null
+++ b/t/testdata/06_property_substitution_cyclic_dependency/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of testproject stage teststage:
+ cyclic dependency detected between these properties: property_01 (from file CONFDIR/projects/testproject/stages/teststage/properties/property_01), property_02 (from file CONFDIR/projects/testproject/stages/teststage/properties/property_02) at SCRIPT line LINE.
diff --git a/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/script b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_01 b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_01
new file mode 100644
index 00000000..cf1b7eeb
--- /dev/null
+++ b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_01
@@ -0,0 +1 @@
+i use 02: $(property_02)
diff --git a/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_02 b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_02
new file mode 100644
index 00000000..7907bb12
--- /dev/null
+++ b/t/testdata/06_property_substitution_cyclic_dependency/projects/testproject/stages/teststage/properties/property_02
@@ -0,0 +1 @@
+i use 01: $(property_01)
diff --git a/t/testdata/07_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/07_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..d4240cd8
--- /dev/null
+++ b/t/testdata/07_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,5 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+here is an unclosed reference: $(foobar
+ ^
+error: got end of string, expected `)' at SCRIPT line LINE.
diff --git a/t/testdata/07_parse_error/projects/testproject/script b/t/testdata/07_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/07_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..1f1550b4
--- /dev/null
+++ b/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+here is an unclosed reference: $(foobar
diff --git a/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/07_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/08_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/08_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..e2ff0c41
--- /dev/null
+++ b/t/testdata/08_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,5 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+here is an unclosed reference: ${foobar
+ ^
+error: got end of string, expected `}' at SCRIPT line LINE.
diff --git a/t/testdata/08_parse_error/projects/testproject/script b/t/testdata/08_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/08_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..3987a2f2
--- /dev/null
+++ b/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+here is an unclosed reference: ${foobar
diff --git a/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/08_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/09_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/09_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..143a76f5
--- /dev/null
+++ b/t/testdata/09_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,6 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+ends with dollar sign: $
+ ^
+error: got end of string, expected `(' or `{'
+(last character in string was $, did you mean \$ ?) at SCRIPT line LINE.
diff --git a/t/testdata/09_parse_error/projects/testproject/script b/t/testdata/09_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/09_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..1def9fad
--- /dev/null
+++ b/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+ends with dollar sign: $
diff --git a/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/09_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/10_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/10_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..2abd2b2c
--- /dev/null
+++ b/t/testdata/10_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,6 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+ends with backslash: \
+ ^
+error: got end of string, expected some character
+(last character in string was \, did you mean \\ ?) at SCRIPT line LINE.
diff --git a/t/testdata/10_parse_error/projects/testproject/script b/t/testdata/10_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/10_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..694371ef
--- /dev/null
+++ b/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+ends with backslash: \
diff --git a/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/10_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/11_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/11_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..ee60dfe4
--- /dev/null
+++ b/t/testdata/11_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,6 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+invalid property marker: $foo
+ ^
+error: expected { or (, got f
+(maybe you need \$f instead of $f ?) at SCRIPT line LINE.
diff --git a/t/testdata/11_parse_error/projects/testproject/script b/t/testdata/11_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/11_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..0b7b7fb2
--- /dev/null
+++ b/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+invalid property marker: $foo
diff --git a/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/11_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/12_parse_error/expected/projects/testproject/stages/teststage.fail b/t/testdata/12_parse_error/expected/projects/testproject/stages/teststage.fail
new file mode 100644
index 00000000..3939c4e0
--- /dev/null
+++ b/t/testdata/12_parse_error/expected/projects/testproject/stages/teststage.fail
@@ -0,0 +1,6 @@
+While attempting to do a dry run of testproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/teststage/properties/bad_property):
+wrong\\use\\of\backslash
+ ^
+error: useless use of \
+(I saw \b; if you wanted b then put b; if you wanted \b then put \\b) at SCRIPT line LINE.
diff --git a/t/testdata/12_parse_error/projects/testproject/script b/t/testdata/12_parse_error/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/12_parse_error/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/bad_property b/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..2aefa283
--- /dev/null
+++ b/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+wrong\\use\\of\backslash
diff --git a/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/12_parse_error/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/13_manual_overrides/expected/projects/testproject/stages/teststage b/t/testdata/13_manual_overrides/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..0a7b3c41
--- /dev/null
+++ b/t/testdata/13_manual_overrides/expected/projects/testproject/stages/teststage
@@ -0,0 +1,6 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_TEST_OVERRIDE_PROPERTY=1
+PULSE_TESTPROPERTY=1
+test_override_environment=1
+export PULSE_BASE_DIR PULSE_TEST_OVERRIDE_PROPERTY PULSE_TESTPROPERTY test_override_environment
+testscript
diff --git a/t/testdata/13_manual_overrides/manual_overrides/environment/test_override_environment b/t/testdata/13_manual_overrides/manual_overrides/environment/test_override_environment
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/13_manual_overrides/manual_overrides/environment/test_override_environment
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/13_manual_overrides/manual_overrides/properties/test_override_property b/t/testdata/13_manual_overrides/manual_overrides/properties/test_override_property
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/13_manual_overrides/manual_overrides/properties/test_override_property
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/13_manual_overrides/projects/testproject/script b/t/testdata/13_manual_overrides/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/13_manual_overrides/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/13_manual_overrides/projects/testproject/stages/teststage/properties/testproperty b/t/testdata/13_manual_overrides/projects/testproject/stages/teststage/properties/testproperty
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/13_manual_overrides/projects/testproject/stages/teststage/properties/testproperty
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/14_no_manual_overrides/expected/projects/testproject/stages/teststage b/t/testdata/14_no_manual_overrides/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..d7304d30
--- /dev/null
+++ b/t/testdata/14_no_manual_overrides/expected/projects/testproject/stages/teststage
@@ -0,0 +1,6 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_BUILD_NUMBER=123
+PULSE_BUILD_REASON='faked by test script'
+PULSE_TESTPROPERTY=1
+export PULSE_BASE_DIR PULSE_BUILD_NUMBER PULSE_BUILD_REASON PULSE_TESTPROPERTY
+testscript
diff --git a/t/testdata/14_no_manual_overrides/manual_overrides/environment/test_override_environment b/t/testdata/14_no_manual_overrides/manual_overrides/environment/test_override_environment
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/14_no_manual_overrides/manual_overrides/environment/test_override_environment
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/14_no_manual_overrides/manual_overrides/properties/test_override_property b/t/testdata/14_no_manual_overrides/manual_overrides/properties/test_override_property
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/14_no_manual_overrides/manual_overrides/properties/test_override_property
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/14_no_manual_overrides/projects/testproject/script b/t/testdata/14_no_manual_overrides/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/14_no_manual_overrides/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/14_no_manual_overrides/projects/testproject/stages/teststage/properties/testproperty b/t/testdata/14_no_manual_overrides/projects/testproject/stages/teststage/properties/testproperty
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/14_no_manual_overrides/projects/testproject/stages/teststage/properties/testproperty
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/15_inheritance/expected/projects/Base/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Base/stages/stage1
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Base/stages/stage1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Base/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Base/stages/stage2
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Base/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Base/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Base/stages/stage3
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Base/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/stage1 b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/stage1
new file mode 100644
index 00000000..35cb5a9c
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/stage1
@@ -0,0 +1,14 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_add b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_add
new file mode 100644
index 00000000..21116240
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_add
@@ -0,0 +1,15 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_override b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_override
new file mode 100644
index 00000000..c4fe2138
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_override
@@ -0,0 +1,14 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: sub_value_05'
+PULSE_STAGE_PROPERTY_05=sub_value_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_sub_add b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_sub_add
new file mode 100644
index 00000000..234ab1c2
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/BetweenStages/stages/sub_sub_add
@@ -0,0 +1,16 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_NEW_PROPERTY_02=new_value_02
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_NEW_PROPERTY_02 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Cycle1/stages/stage1.fail b/t/testdata/15_inheritance/expected/projects/Cycle1/stages/stage1.fail
new file mode 100644
index 00000000..d567c449
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Cycle1/stages/stage1.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of Cycle1 stage stage1:
+ Cyclic inheritance detected between CONFDIR/projects/Cycle1, CONFDIR/projects/Cycle2, CONFDIR/projects/Cycle3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/Cycle2/stages/stage1.fail b/t/testdata/15_inheritance/expected/projects/Cycle2/stages/stage1.fail
new file mode 100644
index 00000000..58e6901f
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Cycle2/stages/stage1.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of Cycle2 stage stage1:
+ Cyclic inheritance detected between CONFDIR/projects/Cycle1, CONFDIR/projects/Cycle2, CONFDIR/projects/Cycle3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/Cycle3/stages/stage1.fail b/t/testdata/15_inheritance/expected/projects/Cycle3/stages/stage1.fail
new file mode 100644
index 00000000..4821d4b5
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Cycle3/stages/stage1.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of Cycle3 stage stage1:
+ Cyclic inheritance detected between CONFDIR/projects/Cycle1, CONFDIR/projects/Cycle2, CONFDIR/projects/Cycle3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage1.fail b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage1.fail
new file mode 100644
index 00000000..d8e9c5b7
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage1.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of StageCycle1 stage stage1:
+ Cyclic inheritance detected between CONFDIR/projects/StageCycle1/stages/stage1, CONFDIR/projects/StageCycle1/stages/stage2, CONFDIR/projects/StageCycle1/stages/stage3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage2.fail b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage2.fail
new file mode 100644
index 00000000..d370249c
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage2.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of StageCycle1 stage stage2:
+ Cyclic inheritance detected between CONFDIR/projects/StageCycle1/stages/stage1, CONFDIR/projects/StageCycle1/stages/stage2, CONFDIR/projects/StageCycle1/stages/stage3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage3.fail b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage3.fail
new file mode 100644
index 00000000..463111bd
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/StageCycle1/stages/stage3.fail
@@ -0,0 +1,2 @@
+While attempting to do a dry run of StageCycle1 stage stage3:
+ Cyclic inheritance detected between CONFDIR/projects/StageCycle1/stages/stage1, CONFDIR/projects/StageCycle1/stages/stage2, CONFDIR/projects/StageCycle1/stages/stage3 at SCRIPT line LINE.
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage1
new file mode 100644
index 00000000..e093ccf1
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage1
@@ -0,0 +1,20 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage2
new file mode 100644
index 00000000..e093ccf1
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage2
@@ -0,0 +1,20 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage3
new file mode 100644
index 00000000..e093ccf1
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition/stages/stage3
@@ -0,0 +1,20 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage1
new file mode 100644
index 00000000..e093ccf1
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage1
@@ -0,0 +1,20 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=new_value_01
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage2
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage3
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_addition_stage/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage1
new file mode 100644
index 00000000..fbdf5932
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=sub_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage2
new file mode 100644
index 00000000..fbdf5932
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=sub_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage3
new file mode 100644
index 00000000..fbdf5932
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=sub_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage1
new file mode 100644
index 00000000..60144917
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=sub_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage2
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage3
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_stage/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage1
new file mode 100644
index 00000000..34879345
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: new_value_05'
+PULSE_PROPERTY_05=new_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: new_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage2
new file mode 100644
index 00000000..34879345
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: new_value_05'
+PULSE_PROPERTY_05=new_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: new_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage3
new file mode 100644
index 00000000..34879345
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: new_value_05'
+PULSE_PROPERTY_05=new_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: new_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage1
new file mode 100644
index 00000000..ecf78007
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage1
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: new_value_05'
+PULSE_STAGE_PROPERTY_05=new_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage2 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage2
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage2
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage3 b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage3
new file mode 100644
index 00000000..914334fa
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_single_override_substitution_stage/stages/stage3
@@ -0,0 +1,19 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_PROPERTY_01=base_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: base_value_05'
+PULSE_PROPERTY_05=base_value_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: base_stage_value_05'
+PULSE_STAGE_PROPERTY_05=base_stage_value_05
+base_env_01=env_01
+base_env_02=env_02
+base_env_03=env_03
+base_env_04='subst: base_value_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/expected/projects/Sub_sub_mixed/stages/stage1 b/t/testdata/15_inheritance/expected/projects/Sub_sub_mixed/stages/stage1
new file mode 100644
index 00000000..6901639a
--- /dev/null
+++ b/t/testdata/15_inheritance/expected/projects/Sub_sub_mixed/stages/stage1
@@ -0,0 +1,21 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_NEW_PROPERTY_01=subsubmixed_new_01
+PULSE_PROPERTY_01=sub_value_01
+PULSE_PROPERTY_02=base_value_02
+PULSE_PROPERTY_03=base_value_03
+PULSE_PROPERTY_04='subst: subsubmixed_05'
+PULSE_PROPERTY_05=subsubmixed_05
+PULSE_STAGE_PROPERTY_01=base_stage_value_01
+PULSE_STAGE_PROPERTY_02=base_stage_value_02
+PULSE_STAGE_PROPERTY_03=base_stage_value_03
+PULSE_STAGE_PROPERTY_04='subst: sub_value_05'
+PULSE_STAGE_PROPERTY_05=sub_value_05
+PULSE_SUBSUBMIXED_STAGE1_01=subsubmixed_stage1_value_01
+base_env_01=env_01
+base_env_02=override_02
+base_env_03=env_03
+base_env_04='subst: subsubmixed_05'
+base_env_05=env_05
+export PULSE_BASE_DIR PULSE_NEW_PROPERTY_01 PULSE_PROPERTY_01 PULSE_PROPERTY_02 PULSE_PROPERTY_03 PULSE_PROPERTY_04 PULSE_PROPERTY_05 PULSE_STAGE_PROPERTY_01 PULSE_STAGE_PROPERTY_02 PULSE_STAGE_PROPERTY_03 PULSE_STAGE_PROPERTY_04 PULSE_STAGE_PROPERTY_05 PULSE_SUBSUBMIXED_STAGE1_01 base_env_01 base_env_02 base_env_03 base_env_04 base_env_05
+git clone baserepo _basedir
+_basedir/script
diff --git a/t/testdata/15_inheritance/projects/Base/environment/base_env_01 b/t/testdata/15_inheritance/projects/Base/environment/base_env_01
new file mode 100644
index 00000000..c9c154d9
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/environment/base_env_01
@@ -0,0 +1 @@
+env_01
diff --git a/t/testdata/15_inheritance/projects/Base/environment/base_env_02 b/t/testdata/15_inheritance/projects/Base/environment/base_env_02
new file mode 100644
index 00000000..59572819
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/environment/base_env_02
@@ -0,0 +1 @@
+env_02
diff --git a/t/testdata/15_inheritance/projects/Base/environment/base_env_03 b/t/testdata/15_inheritance/projects/Base/environment/base_env_03
new file mode 100644
index 00000000..70a63018
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/environment/base_env_03
@@ -0,0 +1 @@
+env_03
diff --git a/t/testdata/15_inheritance/projects/Base/environment/base_env_04 b/t/testdata/15_inheritance/projects/Base/environment/base_env_04
new file mode 100644
index 00000000..730e1a64
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/environment/base_env_04
@@ -0,0 +1 @@
+subst: $(property_05)
diff --git a/t/testdata/15_inheritance/projects/Base/environment/base_env_05 b/t/testdata/15_inheritance/projects/Base/environment/base_env_05
new file mode 100644
index 00000000..2babd46e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/environment/base_env_05
@@ -0,0 +1 @@
+env_05
diff --git a/t/testdata/15_inheritance/projects/Base/properties/property_01 b/t/testdata/15_inheritance/projects/Base/properties/property_01
new file mode 100644
index 00000000..81293896
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/properties/property_01
@@ -0,0 +1 @@
+base_value_01
diff --git a/t/testdata/15_inheritance/projects/Base/properties/property_02 b/t/testdata/15_inheritance/projects/Base/properties/property_02
new file mode 100644
index 00000000..32c3624e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/properties/property_02
@@ -0,0 +1 @@
+base_value_02
diff --git a/t/testdata/15_inheritance/projects/Base/properties/property_03 b/t/testdata/15_inheritance/projects/Base/properties/property_03
new file mode 100644
index 00000000..59f22e4a
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/properties/property_03
@@ -0,0 +1 @@
+base_value_03
diff --git a/t/testdata/15_inheritance/projects/Base/properties/property_04 b/t/testdata/15_inheritance/projects/Base/properties/property_04
new file mode 100644
index 00000000..730e1a64
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/properties/property_04
@@ -0,0 +1 @@
+subst: $(property_05)
diff --git a/t/testdata/15_inheritance/projects/Base/properties/property_05 b/t/testdata/15_inheritance/projects/Base/properties/property_05
new file mode 100644
index 00000000..32a9bf84
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/properties/property_05
@@ -0,0 +1 @@
+base_value_05
diff --git a/t/testdata/15_inheritance/projects/Base/repository b/t/testdata/15_inheritance/projects/Base/repository
new file mode 100644
index 00000000..15326e4e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/repository
@@ -0,0 +1 @@
+baserepo _basedir
diff --git a/t/testdata/15_inheritance/projects/Base/script b/t/testdata/15_inheritance/projects/Base/script
new file mode 100644
index 00000000..3079008e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/script
@@ -0,0 +1 @@
+_basedir/script
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_01 b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_01
new file mode 100644
index 00000000..943fcdcb
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_01
@@ -0,0 +1 @@
+base_stage_value_01
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_02 b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_02
new file mode 100644
index 00000000..ddf39034
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_02
@@ -0,0 +1 @@
+base_stage_value_02
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_03 b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_03
new file mode 100644
index 00000000..3ac99f1b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_03
@@ -0,0 +1 @@
+base_stage_value_03
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_04 b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_04
new file mode 100644
index 00000000..dc3412fe
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_04
@@ -0,0 +1 @@
+subst: $(stage_property_05)
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_05 b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_05
new file mode 100644
index 00000000..1749fff1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage1/properties/stage_property_05
@@ -0,0 +1 @@
+base_stage_value_05
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_01 b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_01
new file mode 100644
index 00000000..943fcdcb
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_01
@@ -0,0 +1 @@
+base_stage_value_01
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_02 b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_02
new file mode 100644
index 00000000..ddf39034
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_02
@@ -0,0 +1 @@
+base_stage_value_02
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_03 b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_03
new file mode 100644
index 00000000..3ac99f1b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_03
@@ -0,0 +1 @@
+base_stage_value_03
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_04 b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_04
new file mode 100644
index 00000000..dc3412fe
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_04
@@ -0,0 +1 @@
+subst: $(stage_property_05)
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_05 b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_05
new file mode 100644
index 00000000..1749fff1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage2/properties/stage_property_05
@@ -0,0 +1 @@
+base_stage_value_05
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_01 b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_01
new file mode 100644
index 00000000..943fcdcb
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_01
@@ -0,0 +1 @@
+base_stage_value_01
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_02 b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_02
new file mode 100644
index 00000000..ddf39034
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_02
@@ -0,0 +1 @@
+base_stage_value_02
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_03 b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_03
new file mode 100644
index 00000000..3ac99f1b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_03
@@ -0,0 +1 @@
+base_stage_value_03
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_04 b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_04
new file mode 100644
index 00000000..dc3412fe
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_04
@@ -0,0 +1 @@
+subst: $(stage_property_05)
diff --git a/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_05 b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_05
new file mode 100644
index 00000000..1749fff1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Base/stages/stage3/properties/stage_property_05
@@ -0,0 +1 @@
+base_stage_value_05
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/properties/property_01 b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_01
new file mode 100644
index 00000000..81293896
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_01
@@ -0,0 +1 @@
+base_value_01
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/properties/property_02 b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_02
new file mode 100644
index 00000000..32c3624e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_02
@@ -0,0 +1 @@
+base_value_02
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/properties/property_03 b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_03
new file mode 100644
index 00000000..59f22e4a
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_03
@@ -0,0 +1 @@
+base_value_03
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/properties/property_04 b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_04
new file mode 100644
index 00000000..730e1a64
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_04
@@ -0,0 +1 @@
+subst: $(property_05)
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/properties/property_05 b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_05
new file mode 100644
index 00000000..32a9bf84
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/properties/property_05
@@ -0,0 +1 @@
+base_value_05
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/repository b/t/testdata/15_inheritance/projects/BetweenStages/repository
new file mode 100644
index 00000000..15326e4e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/repository
@@ -0,0 +1 @@
+baserepo _basedir
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/script b/t/testdata/15_inheritance/projects/BetweenStages/script
new file mode 100644
index 00000000..3079008e
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/script
@@ -0,0 +1 @@
+_basedir/script
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_01 b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_01
new file mode 100644
index 00000000..943fcdcb
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_01
@@ -0,0 +1 @@
+base_stage_value_01
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_02 b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_02
new file mode 100644
index 00000000..ddf39034
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_02
@@ -0,0 +1 @@
+base_stage_value_02
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_03 b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_03
new file mode 100644
index 00000000..3ac99f1b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_03
@@ -0,0 +1 @@
+base_stage_value_03
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_04 b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_04
new file mode 100644
index 00000000..dc3412fe
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_04
@@ -0,0 +1 @@
+subst: $(stage_property_05)
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_05 b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_05
new file mode 100644
index 00000000..1749fff1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/stage1/properties/stage_property_05
@@ -0,0 +1 @@
+base_stage_value_05
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/inherits b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/inherits
new file mode 120000
index 00000000..e61718ba
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/inherits
@@ -0,0 +1 @@
+../stage1 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/properties/new_property_01 b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/properties/new_property_01
new file mode 100644
index 00000000..6850315c
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_add/properties/new_property_01
@@ -0,0 +1 @@
+new_value_01
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/inherits b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/inherits
new file mode 120000
index 00000000..e61718ba
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/inherits
@@ -0,0 +1 @@
+../stage1 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/properties/stage_property_05 b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/properties/stage_property_05
new file mode 100644
index 00000000..0ed584b1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_override/properties/stage_property_05
@@ -0,0 +1 @@
+sub_value_05
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/inherits b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/inherits
new file mode 120000
index 00000000..7768a012
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/inherits
@@ -0,0 +1 @@
+../sub_add \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/properties/new_property_02 b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/properties/new_property_02
new file mode 100644
index 00000000..f221f00c
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/BetweenStages/stages/sub_sub_add/properties/new_property_02
@@ -0,0 +1 @@
+new_value_02
diff --git a/t/testdata/15_inheritance/projects/Cycle1/inherits b/t/testdata/15_inheritance/projects/Cycle1/inherits
new file mode 120000
index 00000000..0ba3fea1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle1/inherits
@@ -0,0 +1 @@
+../Cycle2 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Cycle1/stages/stage1/dummy b/t/testdata/15_inheritance/projects/Cycle1/stages/stage1/dummy
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle1/stages/stage1/dummy
diff --git a/t/testdata/15_inheritance/projects/Cycle2/inherits b/t/testdata/15_inheritance/projects/Cycle2/inherits
new file mode 120000
index 00000000..d8882c44
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle2/inherits
@@ -0,0 +1 @@
+../Cycle3 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Cycle2/stages/stage1/dummy b/t/testdata/15_inheritance/projects/Cycle2/stages/stage1/dummy
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle2/stages/stage1/dummy
diff --git a/t/testdata/15_inheritance/projects/Cycle3/inherits b/t/testdata/15_inheritance/projects/Cycle3/inherits
new file mode 120000
index 00000000..c3dcfdca
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle3/inherits
@@ -0,0 +1 @@
+../Cycle1 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Cycle3/stages/stage1/dummy b/t/testdata/15_inheritance/projects/Cycle3/stages/stage1/dummy
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Cycle3/stages/stage1/dummy
diff --git a/t/testdata/15_inheritance/projects/StageCycle1/repository b/t/testdata/15_inheritance/projects/StageCycle1/repository
new file mode 100644
index 00000000..ab63d9f9
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/StageCycle1/repository
@@ -0,0 +1 @@
+foo foo
diff --git a/t/testdata/15_inheritance/projects/StageCycle1/script b/t/testdata/15_inheritance/projects/StageCycle1/script
new file mode 100644
index 00000000..028f2efd
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/StageCycle1/script
@@ -0,0 +1 @@
+foo/script
diff --git a/t/testdata/15_inheritance/projects/StageCycle1/stages/stage1/inherits b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage1/inherits
new file mode 120000
index 00000000..20049a9c
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage1/inherits
@@ -0,0 +1 @@
+../stage2 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/StageCycle1/stages/stage2/inherits b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage2/inherits
new file mode 120000
index 00000000..fb8b6b38
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage2/inherits
@@ -0,0 +1 @@
+../stage3 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/StageCycle1/stages/stage3/inherits b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage3/inherits
new file mode 120000
index 00000000..e61718ba
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/StageCycle1/stages/stage3/inherits
@@ -0,0 +1 @@
+../stage1 \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_addition/inherits b/t/testdata/15_inheritance/projects/Sub_single_addition/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_addition/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_addition/properties/new_property_01 b/t/testdata/15_inheritance/projects/Sub_single_addition/properties/new_property_01
new file mode 100644
index 00000000..6850315c
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_addition/properties/new_property_01
@@ -0,0 +1 @@
+new_value_01
diff --git a/t/testdata/15_inheritance/projects/Sub_single_addition_stage/inherits b/t/testdata/15_inheritance/projects/Sub_single_addition_stage/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_addition_stage/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_addition_stage/stages/stage1/properties/new_property_01 b/t/testdata/15_inheritance/projects/Sub_single_addition_stage/stages/stage1/properties/new_property_01
new file mode 100644
index 00000000..6850315c
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_addition_stage/stages/stage1/properties/new_property_01
@@ -0,0 +1 @@
+new_value_01
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override/inherits b/t/testdata/15_inheritance/projects/Sub_single_override/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override/properties/property_01 b/t/testdata/15_inheritance/projects/Sub_single_override/properties/property_01
new file mode 100644
index 00000000..50c3294b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override/properties/property_01
@@ -0,0 +1 @@
+sub_value_01
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_stage/inherits b/t/testdata/15_inheritance/projects/Sub_single_override_stage/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_stage/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_stage/stages/stage1/properties/stage_property_01 b/t/testdata/15_inheritance/projects/Sub_single_override_stage/stages/stage1/properties/stage_property_01
new file mode 100644
index 00000000..50c3294b
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_stage/stages/stage1/properties/stage_property_01
@@ -0,0 +1 @@
+sub_value_01
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_substitution/inherits b/t/testdata/15_inheritance/projects/Sub_single_override_substitution/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_substitution/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_substitution/properties/property_05 b/t/testdata/15_inheritance/projects/Sub_single_override_substitution/properties/property_05
new file mode 100644
index 00000000..c74e13f5
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_substitution/properties/property_05
@@ -0,0 +1 @@
+new_value_05
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/inherits b/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/inherits
new file mode 120000
index 00000000..e87748e1
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/inherits
@@ -0,0 +1 @@
+../Base \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/stages/stage1/properties/stage_property_05 b/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/stages/stage1/properties/stage_property_05
new file mode 100644
index 00000000..c74e13f5
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_single_override_substitution_stage/stages/stage1/properties/stage_property_05
@@ -0,0 +1 @@
+new_value_05
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/inherits b/t/testdata/15_inheritance/projects/Sub_sub_mixed/inherits
new file mode 120000
index 00000000..1c814311
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/inherits
@@ -0,0 +1 @@
+../Sub_single_override \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/new_property_01 b/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/new_property_01
new file mode 100644
index 00000000..456a68f6
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/new_property_01
@@ -0,0 +1 @@
+subsubmixed_new_01
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/property_05 b/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/property_05
new file mode 100644
index 00000000..5622097d
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/properties/property_05
@@ -0,0 +1 @@
+subsubmixed_05
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/environment/base_env_02 b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/environment/base_env_02
new file mode 100644
index 00000000..2ff5c307
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/environment/base_env_02
@@ -0,0 +1 @@
+override_02
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/inherits b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/inherits
new file mode 120000
index 00000000..64cfac29
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/inherits
@@ -0,0 +1 @@
+../../../BetweenStages/stages/sub_override \ No newline at end of file
diff --git a/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/properties/subsubmixed_stage1_01 b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/properties/subsubmixed_stage1_01
new file mode 100644
index 00000000..c0d98304
--- /dev/null
+++ b/t/testdata/15_inheritance/projects/Sub_sub_mixed/stages/stage1/properties/subsubmixed_stage1_01
@@ -0,0 +1 @@
+subsubmixed_stage1_value_01
diff --git a/t/testdata/16_forcesuccess/expected/projects/forcesuccessproject/stages/teststage b/t/testdata/16_forcesuccess/expected/projects/forcesuccessproject/stages/teststage
new file mode 100644
index 00000000..ad923a50
--- /dev/null
+++ b/t/testdata/16_forcesuccess/expected/projects/forcesuccessproject/stages/teststage
@@ -0,0 +1,9 @@
+While attempting to do a dry run of forcesuccessproject stage teststage:
+ while parsing property `bad_property' (sourced from file projects/forcesuccessproject/stages/teststage/properties/bad_property):
+here is an unclosed reference: $(foobar
+ ^
+error: got end of string, expected `)' at SCRIPT line LINE.
+
+Normally I would now fail. However, `forcesuccess' was set in CONFDIR/projects/forcesuccessproject/forcesuccess.
+Therefore I'm going to exit successfully.
+This probably indicates that this test is known to not yet be stable.
diff --git a/t/testdata/16_forcesuccess/expected/projects/testproject/stages/forcestage b/t/testdata/16_forcesuccess/expected/projects/testproject/stages/forcestage
new file mode 100644
index 00000000..d425048f
--- /dev/null
+++ b/t/testdata/16_forcesuccess/expected/projects/testproject/stages/forcestage
@@ -0,0 +1,9 @@
+While attempting to do a dry run of testproject stage forcestage:
+ while parsing property `bad_property' (sourced from file projects/testproject/stages/forcestage/properties/bad_property):
+here is an unclosed reference: $(foobar
+ ^
+error: got end of string, expected `)' at SCRIPT line LINE.
+
+Normally I would now fail. However, `forcesuccess' was set in CONFDIR/projects/testproject/stages/forcestage/forcesuccess.
+Therefore I'm going to exit successfully.
+This probably indicates that this test is known to not yet be stable.
diff --git a/t/testdata/16_forcesuccess/expected/projects/testproject/stages/teststage b/t/testdata/16_forcesuccess/expected/projects/testproject/stages/teststage
new file mode 100644
index 00000000..451a0f8b
--- /dev/null
+++ b/t/testdata/16_forcesuccess/expected/projects/testproject/stages/teststage
@@ -0,0 +1,4 @@
+PULSE_BASE_DIR=BASE_DIR
+PULSE_OK_PROPERTY=ok
+export PULSE_BASE_DIR PULSE_OK_PROPERTY
+testscript
diff --git a/t/testdata/16_forcesuccess/projects/forcesuccessproject/forcesuccess b/t/testdata/16_forcesuccess/projects/forcesuccessproject/forcesuccess
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/forcesuccessproject/forcesuccess
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/16_forcesuccess/projects/forcesuccessproject/script b/t/testdata/16_forcesuccess/projects/forcesuccessproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/forcesuccessproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/bad_property b/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/bad_property
new file mode 100644
index 00000000..1f1550b4
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/bad_property
@@ -0,0 +1 @@
+here is an unclosed reference: $(foobar
diff --git a/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/ok_property b/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/forcesuccessproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/16_forcesuccess/projects/testproject/script b/t/testdata/16_forcesuccess/projects/testproject/script
new file mode 100644
index 00000000..0fc57d42
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/testproject/script
@@ -0,0 +1 @@
+testscript
diff --git a/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/forcesuccess b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/forcesuccess
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/forcesuccess
@@ -0,0 +1 @@
+1
diff --git a/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/bad_property b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/bad_property
new file mode 100644
index 00000000..1f1550b4
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/bad_property
@@ -0,0 +1 @@
+here is an unclosed reference: $(foobar
diff --git a/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/ok_property b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/testproject/stages/forcestage/properties/ok_property
@@ -0,0 +1 @@
+ok
diff --git a/t/testdata/16_forcesuccess/projects/testproject/stages/teststage/properties/ok_property b/t/testdata/16_forcesuccess/projects/testproject/stages/teststage/properties/ok_property
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/t/testdata/16_forcesuccess/projects/testproject/stages/teststage/properties/ok_property
@@ -0,0 +1 @@
+ok