/+ dub.json: { "name": "environment_variables" } +/ module environment_variables; import std; void main() { auto currDir = environment.get("CURR_DIR", __FILE_FULL_PATH__.dirName()); // preGenerateCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.preGenerateEnvironments < root.preGenerateEnvironments // preBuildCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.buildEnvironments < root.buildEnvironments < deppkg.preBuildEnvironments < root.preBuildEnvironments // Build tools uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.buildEnvironments < root.buildEnvironments // postBuildCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.buildEnvironments < root.buildEnvironments < deppkg.postBuildEnvironments < root.postBuildEnvironments // postGenerateCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.postGenerateEnvironments < root.postGenerateEnvironments // preRunCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.runEnvironments < root.runEnvironments < deppkg.preRunEnvironments < root.preRunEnvironments // User application uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.runEnvironments < root.runEnvironments // postRunCommands uses system.environments < settings.environments < deppkg.environments < root.environments < deppkg.runEnvironments < root.runEnvironments < deppkg.postRunEnvironments < root.postRunEnvironments // Test cases covers: // preGenerateCommands [in root] // priority check: system.environments < settings.environments // priority check: settings.environments < deppkg.environments // priority check: deppkg.environments < root.environments // priority check: root.environments < deppkg.preGenerateEnvironments // priority check: deppkg.preGenerateEnvironments < root.preGenerateEnvironments // postGenerateCommands [in root] // expantion check: deppkg.VAR4 // preBuildCommands [in deppkg] // root.environments < deppkg.buildEnvironments // deppkg.buildEnvironments < root.buildEnvironments // root.buildEnvironments < deppkg.postBuildEnvironments // deppkg.preBuildEnvironments < root.preBuildEnvironments // postBuildCommands [in deppkg] // expantion check: deppkg.VAR4 // preRunCommands [in deppkg][in root] // expantion check: deppkg.VAR4 // Application run // expantion check: root.VAR1 // expantion check: settings.VAR2 // expantion check: root.VAR3 // expantion check: deppkg.VAR4 // expantion check: system.VAR5 // expantion check: system.SYSENVVAREXPCHECK // postRunCommands [in deppkg][in root] // expantion check: deppkg.VAR4 auto res = execute([environment.get("DUB", "dub"), "run", "-f"], [ "PRIORITYCHECK_SYS_SET": "system.PRIORITYCHECK_SYS_SET", "SYSENVVAREXPCHECK": "system.SYSENVVAREXPCHECK", "VAR5": "system.VAR5" ], Config.none, size_t.max, currDir.buildPath("environment-variables")); scope (failure) writeln("environment-variables test failed... Testing stdout is:\n-----\n", res.output); // preGenerateCommands [in root] assert(res.output.canFind("root.preGenerate: setting.PRIORITYCHECK_SYS_SET"), "preGenerate environment variables priority check is failed."); assert(res.output.canFind("root.preGenerate: deppkg.PRIORITYCHECK_SET_DEP"), "preGenerate environment variables priority check is failed."); assert(res.output.canFind("root.preGenerate: deppkg.PRIORITYCHECK_DEP_ROOT"), "preGenerate environment variables priority check is failed."); assert(res.output.canFind("root.preGenerate: deppkg.PRIORITYCHECK_ROOT_DEPSPEC"), "preGenerate environment variables priority check is failed."); assert(res.output.canFind("root.preGenerate: root.PRIORITYCHECK_DEPSPEC_ROOTSPEC"), "preGenerate environment variables priority check is failed."); // postGenerateCommands [in root] assert(res.output.canFind("root.postGenerate: deppkg.VAR4", "postGenerate environment variables expantion check is failed.")); // preBuildCommands [in deppkg] assert(res.output.canFind("deppkg.preBuild: deppkg.PRIORITYCHECK_ROOT_DEPBLDSPEC"), "preBuild environment variables priority check is failed."); assert(res.output.canFind("deppkg.preBuild: root.PRIORITYCHECK_DEPBLDSPEC_ROOTBLDSPEC"), "preBuild environment variables priority check is failed."); assert(res.output.canFind("deppkg.preBuild: deppkg.PRIORITYCHECK_ROOTBLDSPEC_DEPSPEC"), "preBuild environment variables priority check is failed."); assert(res.output.canFind("deppkg.preBuild: root.PRIORITYCHECK_DEPSPEC_ROOTSPEC"), "preBuild environment variables priority check is failed."); // postBuildCommands [in deppkg] assert(res.output.canFind("deppkg.postBuild: deppkg.VAR4"), "postBuild environment variables expantion check is failed."); // preRunCommands [in deppkg][in root] assert(!res.output.canFind("deppkg.preRun: deppkg.VAR4"), "preRun that is defined dependent library does not call."); assert(res.output.canFind("root.preRun: deppkg.VAR4"), "preRun environment variables expantion check is failed."); // Application run assert(res.output.canFind("app.run: root.VAR1"), "run environment variables expantion check is failed."); assert(res.output.canFind("app.run: settings.VAR2"), "run environment variables expantion check is failed."); assert(res.output.canFind("app.run: root.VAR3"), "run environment variables expantion check is failed."); assert(res.output.canFind("app.run: deppkg.VAR4"), "run environment variables expantion check is failed."); assert(res.output.canFind("app.run: system.VAR5"), "run environment variables expantion check is failed."); assert(res.output.canFind("app.run: system.SYSENVVAREXPCHECK"), "run environment variables expantion check is failed."); // postRunCommands [in deppkg][in root] assert(!res.output.canFind("deppkg.postRun: deppkg.VAR4"), "postRunCommands that is defined dependent library does not call."); assert(res.output.canFind("root.postRun: deppkg.VAR4"), "postRun environment variables expantion check is failed."); }