diff --git a/.gitignore b/.gitignore index 70f8ac5..2cdc5e6 100644 --- a/.gitignore +++ b/.gitignore @@ -475,4 +475,7 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -result \ No newline at end of file + +# project specific +result +MyTestConsoleApp \ No newline at end of file diff --git a/alias.sh b/alias.sh index 569598c..6e0ec1a 100644 --- a/alias.sh +++ b/alias.sh @@ -4,4 +4,5 @@ alias nixe='nix --experimental-features "nix-command flakes"' alias nulock='nixe run .#devTasks.updateNugetLock' alias fllock='nixe run .#devTasks.updateFlakeLock' alias ulock='nulock && fllock' -alias restore-on-current-source='nixe build && dotnet nuget locals all -c && dotnet restore -s result/share -s https://api.nuget.org/v3/index.json $1' \ No newline at end of file +alias .net='nixe run .#devTasks.runDotNet -- $@' +alias rat='nixe run .#devTasks.runAllTests' \ No newline at end of file diff --git a/flake.nix b/flake.nix index a1508ff..8f9cea5 100644 --- a/flake.nix +++ b/flake.nix @@ -29,10 +29,7 @@ updateLogicResourceFile = nixpkgsFor.${system}.writeScript "update_logic_resource_file.sh" '' dotnet run --project ResourceString.Net.App.Console ResourceString.Net.Logic/Properties/Resources.resx ResourceString.Net.Logic.Properties > ResourceString.Net.Logic/Properties/Resources.cs.tmp mv ResourceString.Net.Logic/Properties/Resources.cs.tmp ResourceString.Net.Logic/Properties/Resources.cs - ''; - runAllTests = nixpkgsFor.${system}.writeScript "run_all_tests.sh" '' - dotnet test *.Tests - ''; + ''; buildAllAssemblies = nixpkgsFor.${system}.writeScript "build_all_assemblies.sh" '' # Find all .csproj files below the current folder csproj_files=$(find . -name '*.csproj') @@ -76,8 +73,124 @@ runDefaultApp = nixpkgsFor.${system}.writeScript "run_default_app.sh" '' dotnet run --project ResourceString.Net.App.Console $@ ''; - createNugetPackage = nixpkgsFor.${system}.writeScript "run_default_app.sh" '' - dotnet run --project ResourceString.Net.App.Console $@ + runDotNet = nixpkgsFor.${system}.writeScript "dotnet.sh" '' + if [ ! -d "result/share" ]; then + nix --experimental-features 'nix-command flakes' build + fi + + injectable_commands="restore$2 addpackage" + + for value in $injectable_commands; do + if [ "$value" = "$1$2" ] || [ "$value" = "$1$3" ]; then + dotnet nuget locals all -c + dotnet $@ -s "result/share;https://api.nuget.org/v3/index.json" + exit $? + fi + done + + dotnet $@ + ''; + + runAllTests = nixpkgsFor.${system}.writeScript "run_all_tests.sh" '' + dotnet test *.Tests + + echo "# test package intregation" + + echo "## test example app" + + ${scripts.${system}.runDotNet} restore example/Example.App/ + ${scripts.${system}.runDotNet} build example/Example.App/ + output=$(${scripts.${system}.runDotNet} run --project example/Example.App/ --no-build | tr '\n' ' ') + + expected_output="Hello Value1 2Value21{2} " + if [ "$output" = "$expected_output" ]; then + echo "Output matches the expected value." + else + echo "expected output is:" + echo $expected_output + + echo "but was:" + echo $output + + exit 1 + fi + + echo "## test MyTestConsoleApp" + + rm -rf MyTestConsoleApp + dotnet new console --name MyTestConsoleApp + + echo " + + Exe + net6.0 + enable + enable + + + + $(AdditionalFileItemNames);EmbeddedResource + + + + " > MyTestConsoleApp/MyTestConsoleApp.csproj + + ${scripts.${system}.runDotNet} add MyTestConsoleApp package "System.Resources.Extensions" + ${scripts.${system}.runDotNet} add MyTestConsoleApp package "ResourceString.Net" + + echo " + + + Hello {0} + 0 = name + + + World + + + " > MyTestConsoleApp/Resources.resx + + echo "var message = MyTestConsoleApp.Resources.Greetings.From( + MyTestConsoleApp.Resources.World + ); + + Console.WriteLine(message.Value); + " > MyTestConsoleApp/Program.cs + + echo " + + + Hallo {0} + 0 = name + + + Welt + + + " > MyTestConsoleApp/Resources.de.resx + + echo " + Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(\"de-DE\"); + + Console.WriteLine(message.Value); + " >> MyTestConsoleApp/Program.cs + + ${scripts.${system}.runDotNet} restore MyTestConsoleApp + ${scripts.${system}.runDotNet} build MyTestConsoleApp + output=$(${scripts.${system}.runDotNet} run --project MyTestConsoleApp --no-build | tr '\n' ' ') + + expected_output="Hello World Hallo Welt " + if [ "$output" = "$expected_output" ]; then + echo "Output matches the expected value." + else + echo "expected output is:" + echo $expected_output + + echo "but was:" + echo $output + + exit 1 + fi ''; }); @@ -140,6 +253,10 @@ type = "app"; program = "${scripts.${system}.cleanAllAssemblies}"; }; + runDotNet = { + type = "app"; + program = "${scripts.${system}.runDotNet}"; + }; }; }); @@ -149,7 +266,7 @@ packages = [ nixpkgsFor.${system}.dotnet-sdk nixpkgsFor.${system}.nixfmt ]; shellHook = '' - alias nixe="nix --experimental-features 'nix-command flakes'" + . ./alias.sh ''; }; });