diff --git a/.bee/desperatedevs.sh b/.bee/desperatedevs.sh deleted file mode 100644 index 4545a016..00000000 --- a/.bee/desperatedevs.sh +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env bash - -BUILD_SRC=Build/src - -desperatedevs::cover() { - rm -rf coverage - find src -type d -name TestResults -exec rm -rf {} + - dotnet test --collect:"XPlat Code Coverage" || true - reportgenerator "-Title:Desperate Devs" "-reports:src/**/coverage.cobertura.xml" "-targetDir:coverage" - find src -type d -name TestResults -exec rm -rf {} + - open coverage/index.html -} - -desperatedevs::clear() { - find . -type d -name obj -exec rm -rf {} + - find . -type d -name bin -exec rm -rf {} + -} - -desperatedevs::collect_jenny() { - log_func - local jenny_dir="${BUILD_SRC}/Jenny" - local codegenerator_dir="${jenny_dir}/Jenny" - local plugins_dir="${codegenerator_dir}/Plugins/DesperateDevs" - utils::clean_dir "${jenny_dir}" "${codegenerator_dir}" "${plugins_dir}" - - local projects=( - "DesperateDevs.CodeGeneration.CodeGenerator.CLI" - "DesperateDevs.CodeGeneration.Plugins" - "DesperateDevs.CodeGeneration.Unity.Plugins" - ) - local to_plugins=( - "DesperateDevs.CodeGeneration.Plugins.dll" - "DesperateDevs.CodeGeneration.Unity.Plugins.dll" - ) - - for p in "${projects[@]}"; do utils::sync "${p}/bin/Release/" "${codegenerator_dir}"; done - for f in "${to_plugins[@]}"; do mv "${codegenerator_dir}/${f}" "${plugins_dir}"; done - - mv "${codegenerator_dir}/DesperateDevs.CodeGeneration.CodeGenerator.CLI.exe" "${codegenerator_dir}/Jenny.exe" - cp "DesperateDevs.CodeGeneration.CodeGenerator.CLI/Jenny-Server" "${jenny_dir}" - cp "DesperateDevs.CodeGeneration.CodeGenerator.CLI/Jenny-Server.bat" "${jenny_dir}" - cp "DesperateDevs.CodeGeneration.CodeGenerator.CLI/Jenny-Auto-Import" "${jenny_dir}" - cp "DesperateDevs.CodeGeneration.CodeGenerator.CLI/Jenny-Auto-Import.bat" "${jenny_dir}" -} - -desperatedevs::collect_jenny_unity() { - log_func - local codegenerator_dir="${BUILD_SRC}/Unity/Jenny/Assets/Jenny" - local editor_dir="${codegenerator_dir}/Editor" - local images_dir="${editor_dir}/Images" - local plugins_dir="${editor_dir}/Plugins/DesperateDevs" - utils::clean_dir "${codegenerator_dir}" "${editor_dir}" "${images_dir}" "${plugins_dir}" - - local projects=( - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor" - "DesperateDevs.CodeGeneration.Plugins" - "DesperateDevs.CodeGeneration.Unity.Plugins" - ) - local to_editor=( - "DesperateDevs.Analytics.dll" - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll" - "DesperateDevs.CodeGeneration.CodeGenerator.dll" - "DesperateDevs.CodeGeneration.dll" - "DesperateDevs.Networking.dll" - "DesperateDevs.Serialization.dll" - "DesperateDevs.Unity.Editor.dll" - ) - local images=( - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/Images/" - ) - local to_plugins=( - "DesperateDevs.CodeGeneration.Plugins.dll" - "DesperateDevs.CodeGeneration.Unity.Plugins.dll" - ) - - for p in "${projects[@]}"; do utils::sync "${p}/bin/Release/" "${codegenerator_dir}"; done - for f in "${to_editor[@]}"; do mv "${codegenerator_dir}/${f}" "${editor_dir}"; done - for f in "${images[@]}"; do utils::sync "${f}" "${images_dir}"; done - for f in "${to_plugins[@]}"; do mv "${codegenerator_dir}/${f}" "${plugins_dir}"; done -} - -desperatedevs::collect_desperatedevs_unity() { - log_func - local desperatedevs_dir="${BUILD_SRC}/DesperateDevs" - local editor_dir="${desperatedevs_dir}/Editor" - local images_dir="${editor_dir}/Images" - local plugins_dir="${editor_dir}/Plugins/DesperateDevs" - utils::clean_dir "${desperatedevs_dir}" "${editor_dir}" "${images_dir}" "${plugins_dir}" - - local projects=( - # all - "DesperateDevs.Logging" - "DesperateDevs.Logging.Appenders" - "DesperateDevs.Logging.Formatters" - "DesperateDevs.Networking" - "DesperateDevs.Serialization" - "DesperateDevs.Threading" - "DesperateDevs.Threading.Promises" - "DesperateDevs.Threading.Promises.Unity" - "DesperateDevs.Utils" - - # editor - "DesperateDevs.Analytics" - "DesperateDevs.CodeGeneration" - "DesperateDevs.CodeGeneration.CodeGenerator" - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor" - "DesperateDevs.Unity.Editor" - - # plugins - "DesperateDevs.CodeGeneration.Plugins" - "DesperateDevs.CodeGeneration.Unity.Plugins" - ) - local to_editor=( - "DesperateDevs.Analytics.dll" - "DesperateDevs.CodeGeneration.dll" - "DesperateDevs.CodeGeneration.CodeGenerator.dll" - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll" - "DesperateDevs.Unity.Editor.dll" - ) - local images=( - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/Images/" - ) - local to_plugins=( - "DesperateDevs.CodeGeneration.Plugins.dll" - "DesperateDevs.CodeGeneration.Unity.Plugins.dll" - ) - - for p in "${projects[@]}"; do utils::sync "${p}/bin/Release/" "${desperatedevs_dir}"; done - for f in "${to_editor[@]}"; do mv "${desperatedevs_dir}/${f}" "${editor_dir}"; done - for f in "${images[@]}"; do utils::sync "${f}" "${images_dir}"; done - for f in "${to_plugins[@]}"; do mv "${desperatedevs_dir}/${f}" "${plugins_dir}"; done -} - -desperatedevs::collect() { - desperatedevs::collect_desperatedevs_unity - desperatedevs::collect_jenny - desperatedevs::collect_jenny_unity -} - -desperatedevs::sync_unity_codegenerator() { - log_func - - desperatedevs::collect_jenny - local cli="Tests/Unity/CodeGenerator/Jenny" - utils::clean_dir "${cli}" - utils::sync "${BUILD_SRC}/Jenny/" "${cli}/.." - - desperatedevs::collect_jenny_unity - local unity_libs="Tests/Unity/CodeGenerator/Assets/Libraries" - utils::clean_dir "${unity_libs}" - utils::sync "${BUILD_SRC}/Unity/Jenny/Assets/Jenny" "${unity_libs}" -} - -desperatedevs::sync() { - desperatedevs::sync_unity_codegenerator -} - -desperatedevs::pack() { - log_func - desperatedevs::rebuild - desperatedevs::run_tests - desperatedevs::collect -} - -desperatedevs::rebuild() { - log_func - msbuild /t:Clean /p:Configuration=Release /v:m - msbuild -t:restore - msbuild /p:Configuration=Release /v:m -} - -desperatedevs::run_tests() { - log_func - msbuild /p:Configuration=Release /v:m Tests/Tests.csproj - mono Tests/bin/Release/Tests.exe "$@" -} diff --git a/.bee/desperatedevs/.bashrc b/.bee/desperatedevs/.bashrc new file mode 100644 index 00000000..142e8b74 --- /dev/null +++ b/.bee/desperatedevs/.bashrc @@ -0,0 +1,3 @@ +PROMPT_COMMAND='(($?)) && +PS1="\033[1;33mdesperatedevs\033[1;31m@\\s-\\v \033[1;36m\\W\033[1;31m\\$ \033[0m" || +PS1="\033[1;33mdesperatedevs\033[1;31m@\\s-\\v \033[1;36m\\W\033[1;32m\\$ \033[0m"' diff --git a/.bee/desperatedevs/rsync_exclude.txt b/.bee/desperatedevs/rsync_exclude.txt new file mode 100644 index 00000000..cf81b5ce --- /dev/null +++ b/.bee/desperatedevs/rsync_exclude.txt @@ -0,0 +1,16 @@ +.DS_Store +Thumbs.db +*.pdb +*.config +*.json +*.xml +Bee.BeeDriver.dll +BeeBuildProgramCommon.Data.dll +ExCSS.Unity.dll +PlayerBuildProgramLibrary.Data.dll +ScriptCompilationBuildProgram.Data.dll +Unity.Cecil.dll +Unity.CompilationPipeline.Common.dll +Unity.IL2CPP.BeeSettings.dll +UnityEditor.dll +UnityEngine.dll diff --git a/.bee/desperatedevs/rsync_exclude_unity.txt b/.bee/desperatedevs/rsync_exclude_unity.txt new file mode 100644 index 00000000..803d3c0b --- /dev/null +++ b/.bee/desperatedevs/rsync_exclude_unity.txt @@ -0,0 +1,3 @@ +bin/ +obj/ +*.csproj diff --git a/.bee/desperatedevs/rsync_include.txt b/.bee/desperatedevs/rsync_include.txt new file mode 100644 index 00000000..a12fae27 --- /dev/null +++ b/.bee/desperatedevs/rsync_include.txt @@ -0,0 +1 @@ +*.runtimeconfig.json diff --git a/.bee/desperatedevs/rsync_include_unity.txt b/.bee/desperatedevs/rsync_include_unity.txt new file mode 100644 index 00000000..e69de29b diff --git a/.bee/plugins/desperatedevs/desperatedevs.bash b/.bee/plugins/desperatedevs/desperatedevs.bash new file mode 100644 index 00000000..d748a2e1 --- /dev/null +++ b/.bee/plugins/desperatedevs/desperatedevs.bash @@ -0,0 +1,451 @@ +: "${BUILD:=build}" + +BUILD_SRC="${BUILD}/src" + +desperatedevs::help() { + cat << 'EOF' +template: + DESPERATE_DEVS_NUGET_LOCAL=~/.nuget/local + DESPERATE_DEVS_UNITY_PACKAGES_VERSION=https://github.com/sschmid/Unity-2021.3.git + DESPERATE_DEVS_UNITY_PROJECTS=() + DESPERATE_DEVS_RESTORE_UNITY=([key]=value) + +usage: + docker build and run desperatedevs docker image + new add new src and test project + e.g. bee desperatedevs new DesperateDevs.Xyz + new_benchmark add benchmark project + e.g. bee desperatedevs new_benchmark DesperateDevs.Xyz + clean delete build directory and all bin and obj directories + build build solution + rebuild clean and build solution + test [args] run unit tests + coverage run unit tests and generate coverage report + restore_unity copy source code and samples to all unity projects + sync_unity_solutions generate C# project for all unity projects + publish publish nupkg to nuget.org + publish_local publish nupkg locally to disk + pack_jenny pack Jenny + pack_unity pack projects for Unity + generate_unity_packages generate unity packages + +EOF +} + +desperatedevs::comp() { + if ((!$# || $# == 1 && COMP_PARTIAL)); then + bee::comp_plugin desperatedevs + elif (($# == 1 || $# == 2 && COMP_PARTIAL)); then + case "$1" in + new|new_benchmark) echo "DesperateDevs."; return ;; + esac + fi +} + +desperatedevs::docker() { + if [[ ! -f .unitypath ]]; then + cat << EOF +Before running docker, please provide the full path to your Unity installation. +This is required to resolve dependencies to dlls like UnityEngine.dll or UnityEditor.dll. + +Example (this may be different on your machine): + + Windows: C:/Program Files/Unity/Hub/Editor//Editor/Data + macOS: /Applications/Unity/Hub/Editor//Unity.app/Contents + Linux: ~/Unity/Hub/Editor//Editor/Data + +EOF + + local path + read -rp "Path to Unity dlls: " path; echo + [[ -z "${path}" || ! -d "${path}" ]] && echo "No such directory. Abort." && exit 1 + echo "${path}" > .unitypath + fi + + mkdir -p "${BUILD}" + cp -r "$(cat .unitypath)/Managed" "${BUILD}/" + + DOCKER_BUILDKIT=1 docker build --target bee -t desperatedevs . + docker run -it -v "$(pwd)":/DesperateDevs -w /DesperateDevs desperatedevs "$@" +} + +desperatedevs::new() { + local name="$1" path + path="src/${name}/src" + dotnet new classlib -n "${name}" -o "${path}" + cat << 'EOF' > "${path}/${name}.csproj" + + + + $(DefaultTargetFramework) + 0.1.0 + + + +EOF + dotnet sln add -s "${name}" "${path}/${name}.csproj" + + local test_name="${name}.Tests" path="src/${name}/tests" + dotnet new xunit -n "${test_name}" -o "${path}" + cat << 'EOF' > "${path}/${test_name}.csproj" + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + +EOF + dotnet sln add -s "${name}" "${path}/${test_name}.csproj" +} + +desperatedevs::new_benchmark() { + local name="$1" + local benchmark_name="${name}.Benchmarks" path="src/${name}/benchmarks" + dotnet new console -n "${benchmark_name}" -o "${path}" + cat << 'EOF' > "${path}/${benchmark_name}.csproj" + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + +EOF + dotnet sln add -s "${name}" "${path}/${benchmark_name}.csproj" +} + +desperatedevs::clean() { + find . -type d -name obj -exec rm -rf {} + + find . -type d -name bin -exec rm -rf {} + + rm -rf "${BUILD}" +} + +desperatedevs::build() { + dotnet build -c Release +} + +desperatedevs::rebuild() { + desperatedevs::clean + dotnet build -c Release +} + +desperatedevs::test() { + dotnet test -c Release "$@" +} + +desperatedevs::coverage() { + local coverage_dir="${BUILD}/coverage" + rm -rf "${coverage_dir}" + find src -type d -name TestResults -exec rm -rf {} + + dotnet test --collect:"XPlat Code Coverage" || true + reportgenerator "-Title:${BEE_PROJECT}" "-reports:src/**/coverage.cobertura.xml" "-targetDir:${coverage_dir}" + find src -type d -name TestResults -exec rm -rf {} + + echo "To see the test coverage results, please open ${coverage_dir}/index.html" +} + +desperatedevs::restore_unity() { + desperatedevs::rebuild + local project_path + for unity_project_path in "${DESPERATE_DEVS_UNITY_PROJECTS[@]}"; do + bee::log_echo "Restore Samples: ${unity_project_path}" + _clean_dir "${unity_project_path}/Assets" "${unity_project_path}/Assets/Samples" + _sync_unity src/DesperateDevs.Tests/unity/Samples "${unity_project_path}/Assets" + mv "${unity_project_path}/Assets/Samples/Jenny.properties" "${unity_project_path}/Jenny.properties" + mv "${unity_project_path}/Assets/Samples/Sample.properties" "${unity_project_path}/Sample.properties" + + bee::log_echo "Restore DesperateDevs: ${unity_project_path}" + + for project in "${!DESPERATE_DEVS_RESTORE_UNITY[@]}"; do + bee::log_echo "Restore ${project}: ${unity_project_path}" + project_path="${unity_project_path}/${DESPERATE_DEVS_RESTORE_UNITY["${project}"]}" + mkdir -p "${project_path}" + + # sources + # _sync_unity "src/${project}/src/" "${project_path}/${project}" + + # dlls + _sync "src/${project}/src/bin/Release/${project}.dll" "${project_path}" + done + + bee::log_echo "Restore Dotfiles: ${unity_project_path}" + cp DesperateDevs.sln.DotSettings "${unity_project_path}/$(basename "${unity_project_path}").sln.DotSettings" + cp CodeStyle.DotSettings "${unity_project_path}" + cp PatternsAndTemplates.DotSettings "${unity_project_path}" + done +} + +desperatedevs::sync_unity_solutions() { + local version + local -A projects_pids=() + for unity_project_path in "${DESPERATE_DEVS_UNITY_PROJECTS[@]}" ; do + UNITY_PROJECT_PATH="${unity_project_path}" + version="$(grep "m_EditorVersion:" "${unity_project_path}/ProjectSettings/ProjectVersion.txt" | awk '{print $2}')" + UNITY="${UNITY_PATH}/${version}/${UNITY_APP}" + unity::sync_solution & + projects_pids["${unity_project_path}"]=$! + done + + for unity_project_path in "${!projects_pids[@]}"; do + if wait ${projects_pids["${unity_project_path}"]} + then projects_pids["${unity_project_path}"]=1 + else projects_pids["${unity_project_path}"]=0 + fi + done + + for project in "${!projects_pids[@]}"; do + if ((projects_pids["${project}"])) + then bee::log_echo "🟒 ${project}" + else bee::log_echo "πŸ”΄ ${project}" + fi + done | LC_ALL=C sort +} + +desperatedevs::publish() { + desperatedevs::clean + dotnet pack -c Release + dotnet nuget push "**/*.nupkg" \ + --api-key "${NUGET_API_KEY}" \ + --skip-duplicate \ + --source https://api.nuget.org/v3/index.json +} + +desperatedevs::publish_local() { + desperatedevs::clean + dotnet pack -c Release + _clean_dir "${DESPERATE_DEVS_NUGET_LOCAL}" + find . -type f -name "*.nupkg" -exec nuget add {} -Source "${DESPERATE_DEVS_NUGET_LOCAL}" \; +} + +desperatedevs::pack_jenny() { + desperatedevs::build + local project_dir="${BUILD_SRC}/Jenny" + local jenny_dir="${project_dir}/Jenny" + local plugins_dir="${jenny_dir}/Plugins/Jenny" + _clean_dir "${project_dir}" "${jenny_dir}" "${plugins_dir}" + + local -a projects=( + Jenny.Generator.Cli + ) + local -a plugins=( + Jenny.Plugins + Jenny.Plugins.Roslyn + Jenny.Plugins.Unity + ) + local -a exclude + mapfile -t exclude < <(for project in "${projects[@]}"; do + _get_project_references "src/${project}/src/${project}.csproj" ".dll" + done | sort -u && cat "${BEE_RESOURCES}/desperatedevs/rsync_exclude.txt") + + for p in "${projects[@]}"; do _sync "src/${p}/src/bin/Release/" "${jenny_dir}"; done + for p in "${plugins[@]}"; do + rsync \ + --archive \ + --recursive \ + --prune-empty-dirs \ + --exclude-from <(echo "${exclude[*]}") \ + "src/${p}/src/bin/Release/" "${plugins_dir}" + done + + ln -s "Jenny.Generator.Cli" "${jenny_dir}/Jenny" + cp src/Jenny.Generator.Cli/scripts/Jenny-Server "${project_dir}" + cp src/Jenny.Generator.Cli/scripts/Jenny-Server.bat "${project_dir}" + cp src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import "${project_dir}" + cp src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import.bat "${project_dir}" +} + +desperatedevs::pack_unity() { + desperatedevs::build + local project_dir editor_dir jenny_dir images_dir + local -a projects to_editor to_plugins images + + ############################################################################## + # Desperate Devs + ############################################################################## + project_dir="${BUILD_SRC}/Unity/Assets/DesperateDevs" + editor_dir="${project_dir}/Editor" + _clean_dir "${project_dir}" "${editor_dir}" + + projects=( + DesperateDevs.Caching + DesperateDevs.Extensions + DesperateDevs.Reflection + DesperateDevs.Serialization + DesperateDevs.Threading + DesperateDevs.Unity + DesperateDevs.Unity.Editor + ) + to_editor=( + DesperateDevs.Unity.Editor + ) + + for p in "${projects[@]}"; do _sync "src/${p}/src/bin/Release/${p}.dll" "${project_dir}"; done + for f in "${to_editor[@]}"; do mv "${project_dir}/${f}.dll" "${editor_dir}"; done + + ############################################################################## + # Jenny + ############################################################################## + project_dir="${BUILD_SRC}/Unity/Assets/Jenny" + editor_dir="${project_dir}/Editor" + jenny_dir="${editor_dir}/Jenny" + images_dir="${editor_dir}/Images" + _clean_dir "${project_dir}" "${editor_dir}" "${jenny_dir}" "${images_dir}" + + projects=( + # editor + Jenny + Jenny.Generator + Jenny.Generator.Unity.Editor + + # plugins + Jenny.Plugins + Jenny.Plugins.Unity + ) + to_editor=( + Jenny + Jenny.Generator + Jenny.Generator.Unity.Editor + ) + to_plugins=( + Jenny.Plugins + Jenny.Plugins.Unity + ) + images=( + Jenny.Generator.Unity.Editor + ) + + for p in "${projects[@]}"; do _sync "src/${p}/src/bin/Release/${p}.dll" "${project_dir}"; done + for f in "${to_editor[@]}"; do mv "${project_dir}/${f}.dll" "${editor_dir}"; done + for f in "${to_plugins[@]}"; do mv "${project_dir}/${f}.dll" "${jenny_dir}"; done + for f in "${images[@]}"; do _sync "src/${f}/src/Images/" "${images_dir}"; done + + ############################################################################## + # Sherlog + ############################################################################## + project_dir="${BUILD_SRC}/Unity/Assets/Sherlog" + _clean_dir "${project_dir}" + + projects=( + Sherlog + Sherlog.Appenders + Sherlog.Formatters + ) + for p in "${projects[@]}"; do _sync "src/${p}/src/bin/Release/${p}.dll" "${project_dir}"; done + + ############################################################################## + # TCPeasy + ############################################################################## + + project_dir="${BUILD_SRC}/Unity/Assets/TCPeasy" + _clean_dir "${project_dir}" + + projects=( + TCPeasy + ) + for p in "${projects[@]}"; do _sync "src/${p}/src/bin/Release/${p}.dll" "${project_dir}"; done +} + +desperatedevs::generate_unity_packages() { + local unity_project_path="${BUILD}/UnityPackages" csproj reference references platforms version + local -a project_references + _clean_dir "${unity_project_path}" + git clone "${DESPERATE_DEVS_UNITY_PACKAGES_VERSION}" "${unity_project_path}" + + for project in "${!DESPERATE_DEVS_RESTORE_UNITY[@]}"; do + bee::log_echo "Update ${project}" + rm -f "${unity_project_path}/${DESPERATE_DEVS_RESTORE_UNITY["${project}"]}/${project}/"*.cs + mkdir -p "${unity_project_path}/${DESPERATE_DEVS_RESTORE_UNITY["${project}"]}" + _sync_unity "src/${project}/src/" "${unity_project_path}/${DESPERATE_DEVS_RESTORE_UNITY["${project}"]}/${project}" + csproj="src/${project}/src/${project}.csproj" + + mapfile -t project_references < <(_get_project_references "${csproj}" | sort -u) + references="" + for reference in "${project_references[@]}"; do + references+=", \"${reference}\"" + done + + if [[ ${DESPERATE_DEVS_RESTORE_UNITY["${project}"]} == "Assets/Editor" ]] + then platforms="\"Editor\"" + else platforms="" + fi + + cat << EOF > "${unity_project_path}/${DESPERATE_DEVS_RESTORE_UNITY["${project}"]}/${project}/${project}.asmdef" +{ + "name": "${project}", + "rootNamespace": "", + "references": [${references:2}], + "includePlatforms": [${platforms}], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} +EOF + done + + pushd "${unity_project_path}" > /dev/null || exit 1 + ln -sf ../../DesperateDevs.sln.DotSettings UnityPackages.sln.DotSettings + ln -sf ../../CodeStyle.DotSettings CodeStyle.DotSettings + ln -sf ../../PatternsAndTemplates.DotSettings PatternsAndTemplates.DotSettings + popd > /dev/null || exit 1 + + UNITY_PROJECT_PATH="${unity_project_path}" + version="$(grep "m_EditorVersion:" "${unity_project_path}/ProjectSettings/ProjectVersion.txt" | awk '{print $2}')" + UNITY="${UNITY_PATH}/${version}/${UNITY_APP}" + unity::sync_solution +} + +_get_project_references() { + local reference ext="${2:-}" + while read -r reference; do + reference="$(basename "${reference}" .csproj)" + echo "${reference}${ext}" + _get_project_references "src/${reference}/src/${reference}.csproj" "${ext}" + done < <(dotnet list "$1" reference | tail -n +3) +} + +_clean_dir() { + rm -rf "$@" + mkdir -p "$@" +} + +_sync() { + rsync \ + --archive \ + --recursive \ + --prune-empty-dirs \ + --include-from "${BEE_RESOURCES}/desperatedevs/rsync_include.txt" \ + --exclude-from "${BEE_RESOURCES}/desperatedevs/rsync_exclude.txt" \ + "$@" +} + +_sync_unity() { + rsync \ + --archive \ + --recursive \ + --prune-empty-dirs \ + --exclude-from "${BEE_RESOURCES}/desperatedevs/rsync_exclude_unity.txt" \ + "$@" +} diff --git a/.bee/plugins/desperatedevs/plugin.json b/.bee/plugins/desperatedevs/plugin.json new file mode 100644 index 00000000..e68407ae --- /dev/null +++ b/.bee/plugins/desperatedevs/plugin.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "unity" + ] +} diff --git a/.beerc b/.beerc deleted file mode 100644 index 62c593ad..00000000 --- a/.beerc +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash -BEE_PROJECT="DesperateDevs" -BEE_VERSION=0.39.1 - -[[ -f ~/.bee/user.bash ]] && source ~/.bee/user.bash - -DEDE_UNITY_VERSIONS=( - 2018_4 - 2019_4 - 2020_3 -) - -DEDE_UNITY_DEPENDENCIES=( - DesperateDevs.Analytics - DesperateDevs.CodeGeneration - DesperateDevs.CodeGeneration.CodeGenerator - DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor - DesperateDevs.CodeGeneration.Plugins - DesperateDevs.CodeGeneration.Unity.Plugins - DesperateDevs.Logging - DesperateDevs.Networking - DesperateDevs.Serialization - DesperateDevs.Unity.Editor - DesperateDevs.Utils -) - -DEDE_UNITY_DIRS=( - DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images -) - -dede::clean() { - find . -type d -name obj -exec rm -rf {} + - find . -type d -name bin -exec rm -rf {} + -} - -dede::rebuild() { - dede::clean - dotnet build -c Release -} - -dede::coverage() { - rm -rf coverage - find src -type d -name TestResults -exec rm -rf {} + - dotnet test --collect:"XPlat Code Coverage" || true - reportgenerator "-Title:${BEE_PROJECT}" "-reports:src/**/coverage.cobertura.xml" "-targetDir:coverage" - find src -type d -name TestResults -exec rm -rf {} + -} - -dede::restore_unity() { - _symlink_unity_src - _symlink_unity_dependencies -} - -dede::publish() { - dede::clean - dotnet pack -c Release - dotnet nuget push "**/*.nupkg" \ - --api-key "${NUGET_API_KEY}" \ - --skip-duplicate \ - --source https://api.nuget.org/v3/index.json -} - -_symlink_unity_src() { - local source_files assets_dir - mapfile -t source_files < <(find src/DesperateDevs.Tests/unity/src -type f -name "*.cs") - for unity_version in "${DEDE_UNITY_VERSIONS[@]}"; do - assets_dir="src/DesperateDevs.Tests/unity/${unity_version}/Assets" - _clean_dir "${assets_dir}" "${assets_dir}/src" - pushd "${assets_dir}/src" > /dev/null || exit 1 - for f in "${source_files[@]}"; do - ln -s "../../../src/${f##*/}" "${f##*/}" - done - ln -sf "../src/Jenny.properties" "../../Jenny.properties" - popd > /dev/null || exit 1 - done -} - -_symlink_unity_dependencies() { - local source_files assets_dir target_dir - for unity_version in "${DEDE_UNITY_VERSIONS[@]}"; do - _clean_dir "src/DesperateDevs.Tests/unity/${unity_version}/Assets/DesperateDevs" - done - for dep in "${DEDE_UNITY_DEPENDENCIES[@]}"; do - mapfile -t source_files < <(find "src/${dep}/src" -name "*.cs" -not -path "*src/obj*") - for f in "${source_files[@]}"; do - for unity_version in "${DEDE_UNITY_VERSIONS[@]}"; do - assets_dir="src/DesperateDevs.Tests/unity/${unity_version}/Assets" - mkdir -p "${assets_dir}/DesperateDevs/${dep}" - pushd "${assets_dir}/DesperateDevs/${dep}" > /dev/null || exit 1 - ln -s "../../../../../../../${f}" "${f##*/}" - popd > /dev/null || exit 1 - done - done - done - for dir in "${DEDE_UNITY_DIRS[@]}"; do - for unity_version in "${DEDE_UNITY_VERSIONS[@]}"; do - assets_dir="src/DesperateDevs.Tests/unity/${unity_version}/Assets" - pushd "${assets_dir}/DesperateDevs" > /dev/null || exit 1 - target_dir="$(dirname "${dir}")" - mkdir -p "${target_dir}" - pushd "${target_dir}" > /dev/null || exit 1 - ln -s "../../../../../../../${dir}" "$(basename "${dir}")" - popd > /dev/null || exit 1 - popd > /dev/null || exit 1 - done - done -} - -_clean_dir() { - rm -rf "$@" - mkdir -p "$@" -} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..79b5594d --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +**/.DS_Store diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..72790871 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +charset=utf-8 +end_of_line=lf +trim_trailing_whitespace=true +insert_final_newline=true +indent_style=space diff --git a/.gitignore b/.gitignore index 2a8bd481..46a98705 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # OS -Thumbs.db .DS_Store +Thumbs.db # Solution obj @@ -8,25 +8,18 @@ bin *.userprefs *.user TestResults -coverage # IDEs -packages .vs .vscode .idea **/Assets/Plugins/Editor/JetBrains **/Assets/Plugins/Editor/JetBrains.meta -# Unity -!**/unity/*/Packages -**/unity/*/Library -**/unity/*/Temp -**/unity/*/Logs -**/unity/*/UserSettings -**/unity/*/*.sln -*.unitypackage -Assembly-CSharp*.csproj - # Jenny *.userproperties + +# Project +.unitypath +build +src/**/tests/fixtures/temp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..fa6feb39 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "src/DesperateDevs.Tests/unity/Unity-2020.3"] + path = src/DesperateDevs.Tests/unity/Unity-2020.3 + url = https://github.com/sschmid/Unity-2020.3.git +[submodule "src/DesperateDevs.Tests/unity/Unity-2021.3"] + path = src/DesperateDevs.Tests/unity/Unity-2021.3 + url = https://github.com/sschmid/Unity-2021.3.git diff --git a/Beefile b/Beefile new file mode 100644 index 00000000..942f12a1 --- /dev/null +++ b/Beefile @@ -0,0 +1,36 @@ +BEE_PROJECT=DesperateDevs +BEE_VERSION=1.1.0 +BEE_PLUGINS_PATHS=("${BEE_RESOURCES}/plugins") +BEE_PLUGINS=(desperatedevs) + +[[ -f ~/.bee/desperatedevs.bash ]] && source ~/.bee/desperatedevs.bash + +DESPERATE_DEVS_NUGET_LOCAL=~/.nuget/local +DESPERATE_DEVS_UNITY_PACKAGES_VERSION=https://github.com/sschmid/Unity-2021.3.git + +DESPERATE_DEVS_UNITY_PROJECTS=( + src/DesperateDevs.Tests/unity/Unity-2020.3 + src/DesperateDevs.Tests/unity/Unity-2021.3 +) + +declare -A DESPERATE_DEVS_RESTORE_UNITY=( + [DesperateDevs.Caching]=Assets + [DesperateDevs.Extensions]=Assets + [DesperateDevs.Reflection]=Assets + [DesperateDevs.Serialization]=Assets + [DesperateDevs.Threading]=Assets + [DesperateDevs.Unity]=Assets + [DesperateDevs.Unity.Editor]=Assets/Editor + [Jenny]=Assets/Editor + [Jenny.Generator]=Assets/Editor + [Jenny.Generator.Unity.Editor]=Assets/Editor + [Jenny.Plugins]=Assets/Editor + [Jenny.Plugins.Unity]=Assets/Editor + [Sherlog]=Assets + [Sherlog.Appenders]=Assets + [Sherlog.Formatters]=Assets + [TCPeasy]=Assets +) + +UNITY_PATH="/Applications/Unity/Hub/Editor" +UNITY_APP="Unity.app/Contents/MacOS/Unity" diff --git a/Beefile.lock b/Beefile.lock new file mode 100644 index 00000000..c711058a --- /dev/null +++ b/Beefile.lock @@ -0,0 +1 @@ + └── unity:2.0.0 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..5b000d25 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,148 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.0.0] - 2022-09-01 +### Notes +- Desperate Devs 1.0 is now open-source +- The whole project has been updated to use the official [Microsoft C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions) resulting in breaking changes. Most common breaking changes are due to using uppercase for fields and properties +- The migration to a modern SDK-style project structure using [.NET project SDKs](https://docs.microsoft.com/en-us/dotnet/core/project-sdk/overview) is complete +- All projects have been updated to `.NET 6.0` and `.NET Standard 2.1`. +- All unit tests have been fully migrated to [xunit](https://xunit.net) away from [nspec](http://nspec.org) + +### Upgrade +- Remove all `using DesperateDevs.Utils;` and fix imports by using `DesperateDevs.Caching`, `DesperateDevs.Extensions` or `DesperateDevs.Reflection` +- `AppDomainExtension` is now under the `DesperateDevs.DesperateDevs.Reflection` namespace +- Update calls to `ToCSV()` to `string.ToCSV(bool minified, bool removeEmptyEntries)` +- Update calls to `FromCSV()` to `string.FromCSV(bool removeEmptyEntries)` +- Remove `` when calling `CoroutineRunner.Run()` without `onComplete` parameter +- Update `Jenny.properties` and rename to `UpdateCsprojPostProcessor` +- Rename `fabl` to `Sherlog` +- Rename to `Logger.ClearAppenders()` and `Logger.ClearLoggers()` +- Rename `ICodeGenerationPlugin.priority` to `ICodeGenerationPlugin.Order` +- Rename `string.LowercaseFirst()` to `string.ToLowerFirst()` +- Rename `string.UppercaseFirst()` to `string.ToUpperFirst()` +- Create explicit logger because static logger (e.g. `fabl.Debug()`) has been removed +- Some namespaces have been renamed, some have been extracted to their own namespace, see table: + +| Desperate Devs 0.1.0 | Desperate Devs 1.0.0 | +|:--------------------------------------------------------|:--------------------------------------| +| DesperateDevs.Analytics | - | +| DesperateDevs.CLI.Utils | DesperateDevs.Cli.Utils | +| DesperateDevs.CodeGeneration | Jenny | +| DesperateDevs.CodeGeneration.CodeGenerator | Jenny.Generator | +| DesperateDevs.CodeGeneration.CodeGenerator.CLI | Jenny.Generator.Cli | +| DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor | Jenny.Generator.Unity.Editor | +| DesperateDevs.CodeGeneration.Plugins | Jenny.Plugins | +| DesperateDevs.Roslyn.CodeGeneration.Plugins | Jenny.Plugins.Roslyn | +| DesperateDevs.CodeGeneration.Unity.Plugins | Jenny.Plugins.Unity | +| DesperateDevs.Logging | Sherlog | +| DesperateDevs.Logging.Appenders | Sherlog.Appenders | +| DesperateDevs.Logging.Formatters | Sherlog.Formatters | +| DesperateDevs.Networking | TCPeasy | +| DesperateDevs.Networking.CLI | TCPeasy.Cli | +| DesperateDevs.Serialization.CLI.Utils | DesperateDevs.Serialization.Cli.Utils | +| DesperateDevs.Utils | DesperateDevs.Caching | +| DesperateDevs.Utils | DesperateDevs.Extensions | +| DesperateDevs.Utils | DesperateDevs.Reflection | + +### DesperateDevs.Caching +- Add `objectPool.Clear()` +- Add `ObjectCache.ObjectPools` to get all object pools + +### DesperateDevs.Cli.Utils +- Add `args.IsYes` and `args.IsNo` + +### DesperateDevs.Extensions +- Rename `string.LowercaseFirst()` to `string.ToLowerFirst()` +- Rename `string.UppercaseFirst()` to `string.ToUpperFirst()` +- Move `AppDomainExtension` to `DesperateDevs.DesperateDevs.Reflection` + +### DesperateDevs.Reflection +- Move `AppDomainExtension` from `DesperateDevs.DesperateDevs.Extensions` + +### DesperateDevs.Roslyn +- Add `Microsoft.Build.Locator` 1.4.1 +- Update to `Microsoft.CodeAnalysis.CSharp.Workspaces` 4.1.0 +- Update to `Microsoft.CodeAnalysis.Workspaces.MSBuild` 4.1.0 +- Remove `Sherlog` dependencies + +### DesperateDevs.Serialization +- Change to `string.ToCSV(thibool minified, bool removeEmptyEntries)` +- Change to `string.FromCSV(bool removeEmptyEntries)` + +### DesperateDevs.Serialization.Cli.Utils +- Change `DumpCommand` format +- Add empty value support in `DumpCommand` +- Remove `SetKeyValueCommand` + +### DesperateDevs.Unity +- Add `CoroutineRunner.StopAll()` +- Add non-generic `CoroutineRunner.Run()` without `onComplete` parameter +- Use `UnityEditor.TypeCache.GetTypesDerivedFrom` + +### DesperateDevs.Unity.Editor +- Add section state indicator to `PreferencesDrawer` +- Add `ScriptingDefineSymbols.Add` +- Rename to `ScriptingDefineSymbols.AddForAll` +- Add `ScriptingDefineSymbols.Remove` +- Rename to `ScriptingDefineSymbols.RemoveForAll` + +### Jenny.Generator.Unity.Editor +- Fix properties path being shared between projects +- Automatically add missing keys to `Jenny.properties` + +### Jenny +- Rename `ICodeGenerationPlugin.priority` to `ICodeGenerationPlugin.Order` + +### Jenny.Plugins +- Rename to `UpdateCsprojPostProcessor` +- Use unix path separator in `UpdateCsprojPostProcessor` + +### Sherlog +- Add `ConditionalAttribute` to `Logger` +- Fix `Logger.ResetAppenders()` not being applied to existing loggers +- Rename to `Logger.ClearAppenders()` and `Logger.ClearLoggers()` +- Remove static logger + +### Other +- Move project configuration to `Directory.Build.targets` +- Add .editorconfig +- Add `InspectionSettings.DotSettings` +- Add solution tests +- Update to `FluentAssertions` 6.5.1 +- Update Unity version to 2021.3.0f1 +- Update CodeStyle +- Update Dockerfile +- Use multi-stage docker builds +- Simplify `Unity3D.props` +- Move `*.CLI` to `*.Cli` namespace +- Remove Unity-2018.4 +- Remove Unity-2019.4 +- Remove `DesperateDevs.Analytics` +- Remove mono hosted msbuild + +### bee +- Migrate to bee 1.1.0 +- Add `desperatedevs::help` +- Add `desperatedevs::build` +- Add `desperatedevs::new` +- Add `desperatedevs::new_benchmark` +- Add `desperatedevs::sync_unity_solutions` +- Add `desperatedevs::generate_unity_packages` +- Add `desperatedevs::publish_local` +- Rename many desperatedevs functions (see help) +- Restore Unity with dlls instead of source code +- Move plugins to `Jenny` folder instead of `Plugins` +- Move coverage to build +- Delete symlink in Unity test projects and copy and ignore instead + +## [0.1.0] - 2021-09-16 + +[Unreleased]: https://github.com/sschmid/DesperateDevs/compare/1.0.0...HEAD +[1.0.0]: https://github.com/sschmid/DesperateDevs/compare/0.1.0...1.0.0 +[0.1.0]: https://github.com/sschmid/DesperateDevs/releases/tag/0.1.0 diff --git a/CodeStyle.DotSettings b/CodeStyle.DotSettings index 1d677b26..6ab84a2f 100644 --- a/CodeStyle.DotSettings +++ b/CodeStyle.DotSettings @@ -1,11 +1,16 @@ ο»Ώ Implicit Implicit + ExplicitlyTyped + ExplicitlyTyped TOGETHER_SAME_LINE 1 True True + False False + False + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"><ExtraRule Prefix="_" Suffix="" Style="aaBb" /></Policy> True True True diff --git a/DesperateDevs.sln b/DesperateDevs.sln index a388f871..c4590cb6 100644 --- a/DesperateDevs.sln +++ b/DesperateDevs.sln @@ -1,121 +1,142 @@ ο»ΏMicrosoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Tests", "src\DesperateDevs.Tests\tests\DesperateDevs.Tests.csproj", "{B7C2667F-E5E5-4278-BBC3-5A5F21E7D9D0}" +# +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Benchmarks", "DesperateDevs.Benchmarks", "{DECEBAB5-EC26-44E2-B633-939BEB78FB11}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Analytics", "DesperateDevs.Analytics", "{3AB7CF55-BBEF-4B8F-ACD0-B8DCE3FCE402}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Benchmarks", "src/DesperateDevs.Benchmarks/benchmarks/DesperateDevs.Benchmarks.csproj", "{EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Analytics", "src\DesperateDevs.Analytics\src\DesperateDevs.Analytics.csproj", "{308324E6-E9AF-4404-829F-F0259DA5E453}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Caching", "DesperateDevs.Caching", "{8BA88C37-B258-4DD6-941F-4913FB7F96C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Analytics.Tests", "src\DesperateDevs.Analytics\tests\DesperateDevs.Analytics.Tests.csproj", "{8AA70911-EA93-415A-9128-8CC6BF9091B0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Caching", "src/DesperateDevs.Caching/src/DesperateDevs.Caching.csproj", "{0E668B24-A62C-4AE3-A725-27A05238A403}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CLI.Utils", "DesperateDevs.CLI.Utils", "{C69CDE77-3860-4BC8-9ABD-A7F5C2416ECD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Caching.Tests", "src/DesperateDevs.Caching/tests/DesperateDevs.Caching.Tests.csproj", "{E3EEF33E-D536-4084-9AD7-C4654E0A3857}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CLI.Utils", "src\DesperateDevs.CLI.Utils\src\DesperateDevs.CLI.Utils.csproj", "{8867EE00-6581-4EE0-AC50-F1946D3B852B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Cli.Utils", "DesperateDevs.Cli.Utils", "{C69CDE77-3860-4BC8-9ABD-A7F5C2416ECD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CLI.Utils.Tests", "src\DesperateDevs.CLI.Utils\tests\DesperateDevs.CLI.Utils.Tests.csproj", "{ACD14402-AAF4-4875-A94C-E4137F037E34}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Cli.Utils", "src/DesperateDevs.Cli.Utils/src/DesperateDevs.Cli.Utils.csproj", "{8867EE00-6581-4EE0-AC50-F1946D3B852B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CLI.Utils.Tests.Program", "src\DesperateDevs.CLI.Utils\fixtures\DesperateDevs.CLI.Utils.Tests.Program\DesperateDevs.CLI.Utils.Tests.Program.csproj", "{5169F477-31B7-40C2-B8CE-A5BE9D6318D5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Cli.Utils.Tests", "src/DesperateDevs.Cli.Utils/tests/DesperateDevs.Cli.Utils.Tests.csproj", "{ACD14402-AAF4-4875-A94C-E4137F037E34}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration.CodeGenerator.CLI", "DesperateDevs.CodeGeneration.CodeGenerator.CLI", "{B6F14DE9-1EC2-435D-8864-020E6BB2D1F5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Cli.Utils.Tests.Program", "src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/DesperateDevs.Cli.Utils.Tests.Program.csproj", "{5169F477-31B7-40C2-B8CE-A5BE9D6318D5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.CodeGenerator.CLI", "src\DesperateDevs.CodeGeneration.CodeGenerator.CLI\src\DesperateDevs.CodeGeneration.CodeGenerator.CLI.csproj", "{A45BF04B-61D4-4AA8-B829-3F891C13B6DB}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Extensions", "DesperateDevs.Extensions", "{C843B1D1-C099-4486-AF34-A5D8412244F6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor", "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor", "{35C88A6B-8460-4EBF-A3F7-E3980F5A444A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Extensions", "src/DesperateDevs.Extensions/src/DesperateDevs.Extensions.csproj", "{091EB29B-5064-4D0C-93FA-E55DB331BAAA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor", "src\DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor\src\DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.csproj", "{C9B6C39B-D714-49FD-AE7D-5FB186412D8A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Extensions.Benchmarks", "src/DesperateDevs.Extensions/benchmarks/DesperateDevs.Extensions.Benchmarks.csproj", "{9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration.CodeGenerator", "DesperateDevs.CodeGeneration.CodeGenerator", "{B26FE6BE-C6CB-4617-965E-6CB9A8EA9749}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Extensions.Tests", "src/DesperateDevs.Extensions/tests/DesperateDevs.Extensions.Tests.csproj", "{AF455105-4F9D-4CB1-BB3F-08F8E5EB7188}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.CodeGenerator", "src\DesperateDevs.CodeGeneration.CodeGenerator\src\DesperateDevs.CodeGeneration.CodeGenerator.csproj", "{9B95FD72-70DD-4CB5-8620-466C5201B8BD}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Reflection", "DesperateDevs.Reflection", "{55AA5FC3-2145-4CCB-891E-F2FF721883C0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.CodeGenerator.Tests", "src\DesperateDevs.CodeGeneration.CodeGenerator\tests\DesperateDevs.CodeGeneration.CodeGenerator.Tests.csproj", "{CDA1CF66-E39F-418F-A275-1BBD6A077453}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Reflection", "src/DesperateDevs.Reflection/src/DesperateDevs.Reflection.csproj", "{7D21F6F8-BEE6-4166-9782-5C7CA9B790BA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration.Plugins", "DesperateDevs.CodeGeneration.Plugins", "{33DF30BE-2045-4A4D-9145-0E7000C922FD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Reflection.Tests", "src/DesperateDevs.Reflection/tests/DesperateDevs.Reflection.Tests.csproj", "{BB5985FE-10A5-4D6E-B961-D93F19EBCB23}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.Plugins", "src\DesperateDevs.CodeGeneration.Plugins\src\DesperateDevs.CodeGeneration.Plugins.csproj", "{20D63131-A16E-4C0A-96FB-ECBFA7E95448}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Reflection.Tests.Project1", "src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/DesperateDevs.Reflection.Tests.Project1.csproj", "{8BFDF954-F135-48FF-AFC0-6E41B5B68573}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.Plugins.Tests", "src\DesperateDevs.CodeGeneration.Plugins\tests\DesperateDevs.CodeGeneration.Plugins.Tests.csproj", "{7C883191-2FBD-403B-892A-14FF1654918D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Reflection.Tests.Project2", "src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/DesperateDevs.Reflection.Tests.Project2.csproj", "{61D2E6FF-E421-44EA-9C67-F67ADDD9B249}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration.Unity.Plugins", "DesperateDevs.CodeGeneration.Unity.Plugins", "{8C2B0C2B-E565-49F3-9C29-BD5108B0F6A9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Roslyn", "DesperateDevs.Roslyn", "{C046596C-9429-454B-AEAE-D558D6E8158F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.Unity.Plugins", "src\DesperateDevs.CodeGeneration.Unity.Plugins\src\DesperateDevs.CodeGeneration.Unity.Plugins.csproj", "{E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn", "src/DesperateDevs.Roslyn/src/DesperateDevs.Roslyn.csproj", "{9F87BF24-577F-426E-B308-F4E93A33FE02}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.CodeGeneration", "DesperateDevs.CodeGeneration", "{B9CB9EEA-2AC9-439A-A957-B09FE93383EB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn.Tests", "src/DesperateDevs.Roslyn/tests/DesperateDevs.Roslyn.Tests.csproj", "{3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration", "src\DesperateDevs.CodeGeneration\src\DesperateDevs.CodeGeneration.csproj", "{370ABE75-8DBF-453F-8435-719F6ED545E3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Serialization", "DesperateDevs.Serialization", "{88C9719D-3D76-4027-86E1-AD64B28962BA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.CodeGeneration.Tests", "src\DesperateDevs.CodeGeneration\tests\DesperateDevs.CodeGeneration.Tests.csproj", "{63F8DC8A-C976-4B14-91AA-12BB0E6227D4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization", "src/DesperateDevs.Serialization/src/DesperateDevs.Serialization.csproj", "{36AC311F-34FF-4BF0-B144-AA50A2A19EB3}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Logging.Appenders", "DesperateDevs.Logging.Appenders", "{BE3F49D7-F5F9-4238-9376-DC9F597CF4F5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.Benchmarks", "src/DesperateDevs.Serialization/benchmarks/DesperateDevs.Serialization.Benchmarks.csproj", "{77C42B7C-AEAE-411B-9335-F4A521AAD879}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Logging.Appenders", "src\DesperateDevs.Logging.Appenders\src\DesperateDevs.Logging.Appenders.csproj", "{2D3ED000-175F-4C57-BF48-281C90BAE86B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.Tests", "src/DesperateDevs.Serialization/tests/DesperateDevs.Serialization.Tests.csproj", "{ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Logging.Formatters", "DesperateDevs.Logging.Formatters", "{7F03FBC5-827C-4909-974A-4BA8C3080BDD}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Serialization.Cli.Utils", "DesperateDevs.Serialization.Cli.Utils", "{9CB0FB67-2D69-43AE-ADC4-2330419B2B1A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Logging.Formatters", "src\DesperateDevs.Logging.Formatters\src\DesperateDevs.Logging.Formatters.csproj", "{963C2CE9-71BC-4C54-9E5F-B26D3E029B42}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.Cli.Utils", "src/DesperateDevs.Serialization.Cli.Utils/src/DesperateDevs.Serialization.Cli.Utils.csproj", "{687A13C7-5996-455A-83F2-D8CAA28A9032}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Logging.Formatters.Tests", "src\DesperateDevs.Logging.Formatters\tests\DesperateDevs.Logging.Formatters.Tests.csproj", "{16227F1E-AFD6-450F-97CC-2F963356B183}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.Cli.Utils.Tests", "src/DesperateDevs.Serialization.Cli.Utils/tests/DesperateDevs.Serialization.Cli.Utils.Tests.csproj", "{861C22D7-05F5-4AC9-ADE8-B18CD6101516}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Logging", "DesperateDevs.Logging", "{AF7FEE7A-25BD-4242-8775-65F777AABA23}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Tests", "DesperateDevs.Tests", "{1B55844B-7723-456A-8BF8-A2E9B5F0BE96}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Logging", "src\DesperateDevs.Logging\src\DesperateDevs.Logging.csproj", "{2912859E-F962-41F6-B5A7-34072DF43BC5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Tests", "src/DesperateDevs.Tests/tests/DesperateDevs.Tests.csproj", "{15D39FB6-5102-4405-B969-3FEE2F03A26A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Logging.Tests", "src\DesperateDevs.Logging\tests\DesperateDevs.Logging.Tests.csproj", "{A4E5103A-F671-44BD-9159-7F9EDD929E29}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Threading", "DesperateDevs.Threading", "{BFF493EC-5867-42F0-AC3A-C0701B92B552}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Networking.CLI", "DesperateDevs.Networking.CLI", "{C70ADC4B-47D4-4EA0-A514-0A10393B58D0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Threading", "src/DesperateDevs.Threading/src/DesperateDevs.Threading.csproj", "{E412A694-B7BF-4633-B612-60137D401363}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Networking.CLI", "src\DesperateDevs.Networking.CLI\src\DesperateDevs.Networking.CLI.csproj", "{587D0761-B70A-49DC-A202-2CCA8C99BC3A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Threading.Tests", "src/DesperateDevs.Threading/tests/DesperateDevs.Threading.Tests.csproj", "{C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Networking", "DesperateDevs.Networking", "{5707896A-553E-42BC-BB94-82247346C362}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Unity", "DesperateDevs.Unity", "{D986BA75-F59B-499A-ADC5-D917765BC68D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Networking", "src\DesperateDevs.Networking\src\DesperateDevs.Networking.csproj", "{10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Unity", "src/DesperateDevs.Unity/src/DesperateDevs.Unity.csproj", "{8C153439-05B7-4446-BF7F-437775B9521B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Networking.Tests", "src\DesperateDevs.Networking\tests\DesperateDevs.Networking.Tests.csproj", "{CFA75523-9940-4366-A863-5C9F69195995}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Unity.Editor", "DesperateDevs.Unity.Editor", "{BE1641D9-9D6C-4B7C-96F1-5E6B09BC7816}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Roslyn.CodeGeneration.Plugins", "DesperateDevs.Roslyn.CodeGeneration.Plugins", "{B006BB08-6CDD-4420-81CE-0297942659C4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Unity.Editor", "src/DesperateDevs.Unity.Editor/src/DesperateDevs.Unity.Editor.csproj", "{7E8275B1-672A-46F8-91F3-8803C1E46306}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn.CodeGeneration.Plugins", "src\DesperateDevs.Roslyn.CodeGeneration.Plugins\src\DesperateDevs.Roslyn.CodeGeneration.Plugins.csproj", "{27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny", "Jenny", "{B9CB9EEA-2AC9-439A-A957-B09FE93383EB}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Roslyn", "DesperateDevs.Roslyn", "{C046596C-9429-454B-AEAE-D558D6E8158F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny", "src/Jenny/src/Jenny.csproj", "{370ABE75-8DBF-453F-8435-719F6ED545E3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn", "src\DesperateDevs.Roslyn\src\DesperateDevs.Roslyn.csproj", "{9F87BF24-577F-426E-B308-F4E93A33FE02}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Benchmarks", "src/Jenny/benchmarks/Jenny.Benchmarks.csproj", "{9BE401A1-2214-47F1-8A19-AC9AD76C0098}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn.Tests", "src\DesperateDevs.Roslyn\tests\DesperateDevs.Roslyn.Tests.csproj", "{3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Tests", "src/Jenny/tests/Jenny.Tests.csproj", "{63F8DC8A-C976-4B14-91AA-12BB0E6227D4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Roslyn.Tests.Project", "src\DesperateDevs.Roslyn\fixtures\DesperateDevs.Roslyn.Tests.Project\DesperateDevs.Roslyn.Tests.Project.csproj", "{76312EA7-323F-450F-9753-3F3484D7584F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Generator", "Jenny.Generator", "{B26FE6BE-C6CB-4617-965E-6CB9A8EA9749}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Serialization.CLI.Utils", "DesperateDevs.Serialization.CLI.Utils", "{9CB0FB67-2D69-43AE-ADC4-2330419B2B1A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Generator", "src/Jenny.Generator/src/Jenny.Generator.csproj", "{9B95FD72-70DD-4CB5-8620-466C5201B8BD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.CLI.Utils", "src\DesperateDevs.Serialization.CLI.Utils\src\DesperateDevs.Serialization.CLI.Utils.csproj", "{687A13C7-5996-455A-83F2-D8CAA28A9032}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Generator.Tests", "src/Jenny.Generator/tests/Jenny.Generator.Tests.csproj", "{CDA1CF66-E39F-418F-A275-1BBD6A077453}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Serialization", "DesperateDevs.Serialization", "{88C9719D-3D76-4027-86E1-AD64B28962BA}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Generator.Cli", "Jenny.Generator.Cli", "{B6F14DE9-1EC2-435D-8864-020E6BB2D1F5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization", "src\DesperateDevs.Serialization\src\DesperateDevs.Serialization.csproj", "{36AC311F-34FF-4BF0-B144-AA50A2A19EB3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Generator.Cli", "src/Jenny.Generator.Cli/src/Jenny.Generator.Cli.csproj", "{A45BF04B-61D4-4AA8-B829-3F891C13B6DB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Serialization.Tests", "src\DesperateDevs.Serialization\tests\DesperateDevs.Serialization.Tests.csproj", "{ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Generator.Unity.Editor", "Jenny.Generator.Unity.Editor", "{35C88A6B-8460-4EBF-A3F7-E3980F5A444A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Threading", "DesperateDevs.Threading", "{BFF493EC-5867-42F0-AC3A-C0701B92B552}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Generator.Unity.Editor", "src/Jenny.Generator.Unity.Editor/src/Jenny.Generator.Unity.Editor.csproj", "{C9B6C39B-D714-49FD-AE7D-5FB186412D8A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Threading", "src\DesperateDevs.Threading\src\DesperateDevs.Threading.csproj", "{E412A694-B7BF-4633-B612-60137D401363}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Plugins", "Jenny.Plugins", "{33DF30BE-2045-4A4D-9145-0E7000C922FD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Threading.Tests", "src\DesperateDevs.Threading\tests\DesperateDevs.Threading.Tests.csproj", "{C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Plugins", "src/Jenny.Plugins/src/Jenny.Plugins.csproj", "{20D63131-A16E-4C0A-96FB-ECBFA7E95448}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Unity.Editor", "DesperateDevs.Unity.Editor", "{BE1641D9-9D6C-4B7C-96F1-5E6B09BC7816}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Plugins.Tests", "src/Jenny.Plugins/tests/Jenny.Plugins.Tests.csproj", "{7C883191-2FBD-403B-892A-14FF1654918D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Unity.Editor", "src\DesperateDevs.Unity.Editor\src\DesperateDevs.Unity.Editor.csproj", "{7E8275B1-672A-46F8-91F3-8803C1E46306}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Plugins.Roslyn", "Jenny.Plugins.Roslyn", "{B006BB08-6CDD-4420-81CE-0297942659C4}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Unity", "DesperateDevs.Unity", "{D986BA75-F59B-499A-ADC5-D917765BC68D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Plugins.Roslyn", "src/Jenny.Plugins.Roslyn/src/Jenny.Plugins.Roslyn.csproj", "{27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jenny.Plugins.Unity", "Jenny.Plugins.Unity", "{8C2B0C2B-E565-49F3-9C29-BD5108B0F6A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jenny.Plugins.Unity", "src/Jenny.Plugins.Unity/src/Jenny.Plugins.Unity.csproj", "{E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sherlog", "Sherlog", "{AF7FEE7A-25BD-4242-8775-65F777AABA23}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog", "src/Sherlog/src/Sherlog.csproj", "{2912859E-F962-41F6-B5A7-34072DF43BC5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Unity", "src\DesperateDevs.Unity\src\DesperateDevs.Unity.csproj", "{8C153439-05B7-4446-BF7F-437775B9521B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog.Benchmarks", "src/Sherlog/benchmarks/Sherlog.Benchmarks.csproj", "{64232612-86C3-4405-99F8-0611A396F9FB}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesperateDevs.Utils", "DesperateDevs.Utils", "{1B55844B-7723-456A-8BF8-A2E9B5F0BE96}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog.Tests", "src/Sherlog/tests/Sherlog.Tests.csproj", "{A4E5103A-F671-44BD-9159-7F9EDD929E29}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Utils", "src\DesperateDevs.Utils\src\DesperateDevs.Utils.csproj", "{723C23A2-3F14-448E-85EA-F4A8D7081F04}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sherlog.Appenders", "Sherlog.Appenders", "{BE3F49D7-F5F9-4238-9376-DC9F597CF4F5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Utils.Tests", "src\DesperateDevs.Utils\tests\DesperateDevs.Utils.Tests.csproj", "{15D39FB6-5102-4405-B969-3FEE2F03A26A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog.Appenders", "src/Sherlog.Appenders/src/Sherlog.Appenders.csproj", "{2D3ED000-175F-4C57-BF48-281C90BAE86B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Utils.Tests.Project1", "src\DesperateDevs.Utils\fixtures\DesperateDevs.Utils.Tests.Project1\DesperateDevs.Utils.Tests.Project1.csproj", "{8BFDF954-F135-48FF-AFC0-6E41B5B68573}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sherlog.Formatters", "Sherlog.Formatters", "{7F03FBC5-827C-4909-974A-4BA8C3080BDD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DesperateDevs.Utils.Tests.Project2", "src\DesperateDevs.Utils\fixtures\DesperateDevs.Utils.Tests.Project2\DesperateDevs.Utils.Tests.Project2.csproj", "{61D2E6FF-E421-44EA-9C67-F67ADDD9B249}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog.Formatters", "src/Sherlog.Formatters/src/Sherlog.Formatters.csproj", "{963C2CE9-71BC-4C54-9E5F-B26D3E029B42}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sherlog.Formatters.Tests", "src/Sherlog.Formatters/tests/Sherlog.Formatters.Tests.csproj", "{16227F1E-AFD6-450F-97CC-2F963356B183}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TCPeasy", "TCPeasy", "{5707896A-553E-42BC-BB94-82247346C362}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TCPeasy", "src/TCPeasy/src/TCPeasy.csproj", "{10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TCPeasy.Tests", "src/TCPeasy/tests/TCPeasy.Tests.csproj", "{CFA75523-9940-4366-A863-5C9F69195995}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TCPeasy.Cli", "TCPeasy.Cli", "{C70ADC4B-47D4-4EA0-A514-0A10393B58D0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TCPeasy.Cli", "src/TCPeasy.Cli/src/TCPeasy.Cli.csproj", "{587D0761-B70A-49DC-A202-2CCA8C99BC3A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -123,18 +144,18 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B7C2667F-E5E5-4278-BBC3-5A5F21E7D9D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7C2667F-E5E5-4278-BBC3-5A5F21E7D9D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7C2667F-E5E5-4278-BBC3-5A5F21E7D9D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7C2667F-E5E5-4278-BBC3-5A5F21E7D9D0}.Release|Any CPU.Build.0 = Release|Any CPU - {308324E6-E9AF-4404-829F-F0259DA5E453}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {308324E6-E9AF-4404-829F-F0259DA5E453}.Debug|Any CPU.Build.0 = Debug|Any CPU - {308324E6-E9AF-4404-829F-F0259DA5E453}.Release|Any CPU.ActiveCfg = Release|Any CPU - {308324E6-E9AF-4404-829F-F0259DA5E453}.Release|Any CPU.Build.0 = Release|Any CPU - {8AA70911-EA93-415A-9128-8CC6BF9091B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AA70911-EA93-415A-9128-8CC6BF9091B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AA70911-EA93-415A-9128-8CC6BF9091B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AA70911-EA93-415A-9128-8CC6BF9091B0}.Release|Any CPU.Build.0 = Release|Any CPU + {EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB}.Release|Any CPU.Build.0 = Release|Any CPU + {0E668B24-A62C-4AE3-A725-27A05238A403}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E668B24-A62C-4AE3-A725-27A05238A403}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E668B24-A62C-4AE3-A725-27A05238A403}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E668B24-A62C-4AE3-A725-27A05238A403}.Release|Any CPU.Build.0 = Release|Any CPU + {E3EEF33E-D536-4084-9AD7-C4654E0A3857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3EEF33E-D536-4084-9AD7-C4654E0A3857}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3EEF33E-D536-4084-9AD7-C4654E0A3857}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3EEF33E-D536-4084-9AD7-C4654E0A3857}.Release|Any CPU.Build.0 = Release|Any CPU {8867EE00-6581-4EE0-AC50-F1946D3B852B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8867EE00-6581-4EE0-AC50-F1946D3B852B}.Debug|Any CPU.Build.0 = Debug|Any CPU {8867EE00-6581-4EE0-AC50-F1946D3B852B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -147,14 +168,94 @@ Global {5169F477-31B7-40C2-B8CE-A5BE9D6318D5}.Debug|Any CPU.Build.0 = Debug|Any CPU {5169F477-31B7-40C2-B8CE-A5BE9D6318D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {5169F477-31B7-40C2-B8CE-A5BE9D6318D5}.Release|Any CPU.Build.0 = Release|Any CPU - {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Release|Any CPU.Build.0 = Release|Any CPU - {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Release|Any CPU.Build.0 = Release|Any CPU + {091EB29B-5064-4D0C-93FA-E55DB331BAAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {091EB29B-5064-4D0C-93FA-E55DB331BAAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {091EB29B-5064-4D0C-93FA-E55DB331BAAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {091EB29B-5064-4D0C-93FA-E55DB331BAAA}.Release|Any CPU.Build.0 = Release|Any CPU + {9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA}.Release|Any CPU.Build.0 = Release|Any CPU + {AF455105-4F9D-4CB1-BB3F-08F8E5EB7188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF455105-4F9D-4CB1-BB3F-08F8E5EB7188}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF455105-4F9D-4CB1-BB3F-08F8E5EB7188}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF455105-4F9D-4CB1-BB3F-08F8E5EB7188}.Release|Any CPU.Build.0 = Release|Any CPU + {7D21F6F8-BEE6-4166-9782-5C7CA9B790BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D21F6F8-BEE6-4166-9782-5C7CA9B790BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D21F6F8-BEE6-4166-9782-5C7CA9B790BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D21F6F8-BEE6-4166-9782-5C7CA9B790BA}.Release|Any CPU.Build.0 = Release|Any CPU + {BB5985FE-10A5-4D6E-B961-D93F19EBCB23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB5985FE-10A5-4D6E-B961-D93F19EBCB23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB5985FE-10A5-4D6E-B961-D93F19EBCB23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB5985FE-10A5-4D6E-B961-D93F19EBCB23}.Release|Any CPU.Build.0 = Release|Any CPU + {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Release|Any CPU.Build.0 = Release|Any CPU + {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Release|Any CPU.Build.0 = Release|Any CPU + {9F87BF24-577F-426E-B308-F4E93A33FE02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F87BF24-577F-426E-B308-F4E93A33FE02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F87BF24-577F-426E-B308-F4E93A33FE02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F87BF24-577F-426E-B308-F4E93A33FE02}.Release|Any CPU.Build.0 = Release|Any CPU + {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Release|Any CPU.Build.0 = Release|Any CPU + {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Release|Any CPU.Build.0 = Release|Any CPU + {77C42B7C-AEAE-411B-9335-F4A521AAD879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77C42B7C-AEAE-411B-9335-F4A521AAD879}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77C42B7C-AEAE-411B-9335-F4A521AAD879}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77C42B7C-AEAE-411B-9335-F4A521AAD879}.Release|Any CPU.Build.0 = Release|Any CPU + {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Release|Any CPU.Build.0 = Release|Any CPU + {687A13C7-5996-455A-83F2-D8CAA28A9032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {687A13C7-5996-455A-83F2-D8CAA28A9032}.Debug|Any CPU.Build.0 = Debug|Any CPU + {687A13C7-5996-455A-83F2-D8CAA28A9032}.Release|Any CPU.ActiveCfg = Release|Any CPU + {687A13C7-5996-455A-83F2-D8CAA28A9032}.Release|Any CPU.Build.0 = Release|Any CPU + {861C22D7-05F5-4AC9-ADE8-B18CD6101516}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {861C22D7-05F5-4AC9-ADE8-B18CD6101516}.Debug|Any CPU.Build.0 = Debug|Any CPU + {861C22D7-05F5-4AC9-ADE8-B18CD6101516}.Release|Any CPU.ActiveCfg = Release|Any CPU + {861C22D7-05F5-4AC9-ADE8-B18CD6101516}.Release|Any CPU.Build.0 = Release|Any CPU + {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Release|Any CPU.Build.0 = Release|Any CPU + {E412A694-B7BF-4633-B612-60137D401363}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E412A694-B7BF-4633-B612-60137D401363}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E412A694-B7BF-4633-B612-60137D401363}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E412A694-B7BF-4633-B612-60137D401363}.Release|Any CPU.Build.0 = Release|Any CPU + {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Release|Any CPU.Build.0 = Release|Any CPU + {8C153439-05B7-4446-BF7F-437775B9521B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C153439-05B7-4446-BF7F-437775B9521B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C153439-05B7-4446-BF7F-437775B9521B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C153439-05B7-4446-BF7F-437775B9521B}.Release|Any CPU.Build.0 = Release|Any CPU + {7E8275B1-672A-46F8-91F3-8803C1E46306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E8275B1-672A-46F8-91F3-8803C1E46306}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E8275B1-672A-46F8-91F3-8803C1E46306}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E8275B1-672A-46F8-91F3-8803C1E46306}.Release|Any CPU.Build.0 = Release|Any CPU + {370ABE75-8DBF-453F-8435-719F6ED545E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {370ABE75-8DBF-453F-8435-719F6ED545E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {370ABE75-8DBF-453F-8435-719F6ED545E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {370ABE75-8DBF-453F-8435-719F6ED545E3}.Release|Any CPU.Build.0 = Release|Any CPU + {9BE401A1-2214-47F1-8A19-AC9AD76C0098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BE401A1-2214-47F1-8A19-AC9AD76C0098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BE401A1-2214-47F1-8A19-AC9AD76C0098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BE401A1-2214-47F1-8A19-AC9AD76C0098}.Release|Any CPU.Build.0 = Release|Any CPU + {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Release|Any CPU.Build.0 = Release|Any CPU {9B95FD72-70DD-4CB5-8620-466C5201B8BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B95FD72-70DD-4CB5-8620-466C5201B8BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {9B95FD72-70DD-4CB5-8620-466C5201B8BD}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -163,6 +264,14 @@ Global {CDA1CF66-E39F-418F-A275-1BBD6A077453}.Debug|Any CPU.Build.0 = Debug|Any CPU {CDA1CF66-E39F-418F-A275-1BBD6A077453}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDA1CF66-E39F-418F-A275-1BBD6A077453}.Release|Any CPU.Build.0 = Release|Any CPU + {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A45BF04B-61D4-4AA8-B829-3F891C13B6DB}.Release|Any CPU.Build.0 = Release|Any CPU + {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9B6C39B-D714-49FD-AE7D-5FB186412D8A}.Release|Any CPU.Build.0 = Release|Any CPU {20D63131-A16E-4C0A-96FB-ECBFA7E95448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20D63131-A16E-4C0A-96FB-ECBFA7E95448}.Debug|Any CPU.Build.0 = Debug|Any CPU {20D63131-A16E-4C0A-96FB-ECBFA7E95448}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -171,18 +280,26 @@ Global {7C883191-2FBD-403B-892A-14FF1654918D}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C883191-2FBD-403B-892A-14FF1654918D}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C883191-2FBD-403B-892A-14FF1654918D}.Release|Any CPU.Build.0 = Release|Any CPU + {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Release|Any CPU.Build.0 = Release|Any CPU {E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711}.Release|Any CPU.Build.0 = Release|Any CPU - {370ABE75-8DBF-453F-8435-719F6ED545E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {370ABE75-8DBF-453F-8435-719F6ED545E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {370ABE75-8DBF-453F-8435-719F6ED545E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {370ABE75-8DBF-453F-8435-719F6ED545E3}.Release|Any CPU.Build.0 = Release|Any CPU - {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63F8DC8A-C976-4B14-91AA-12BB0E6227D4}.Release|Any CPU.Build.0 = Release|Any CPU + {2912859E-F962-41F6-B5A7-34072DF43BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2912859E-F962-41F6-B5A7-34072DF43BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2912859E-F962-41F6-B5A7-34072DF43BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2912859E-F962-41F6-B5A7-34072DF43BC5}.Release|Any CPU.Build.0 = Release|Any CPU + {64232612-86C3-4405-99F8-0611A396F9FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {64232612-86C3-4405-99F8-0611A396F9FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {64232612-86C3-4405-99F8-0611A396F9FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {64232612-86C3-4405-99F8-0611A396F9FB}.Release|Any CPU.Build.0 = Release|Any CPU + {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Release|Any CPU.Build.0 = Release|Any CPU {2D3ED000-175F-4C57-BF48-281C90BAE86B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D3ED000-175F-4C57-BF48-281C90BAE86B}.Debug|Any CPU.Build.0 = Debug|Any CPU {2D3ED000-175F-4C57-BF48-281C90BAE86B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -195,18 +312,6 @@ Global {16227F1E-AFD6-450F-97CC-2F963356B183}.Debug|Any CPU.Build.0 = Debug|Any CPU {16227F1E-AFD6-450F-97CC-2F963356B183}.Release|Any CPU.ActiveCfg = Release|Any CPU {16227F1E-AFD6-450F-97CC-2F963356B183}.Release|Any CPU.Build.0 = Release|Any CPU - {2912859E-F962-41F6-B5A7-34072DF43BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2912859E-F962-41F6-B5A7-34072DF43BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2912859E-F962-41F6-B5A7-34072DF43BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2912859E-F962-41F6-B5A7-34072DF43BC5}.Release|Any CPU.Build.0 = Release|Any CPU - {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4E5103A-F671-44BD-9159-7F9EDD929E29}.Release|Any CPU.Build.0 = Release|Any CPU - {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Release|Any CPU.Build.0 = Release|Any CPU {10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B}.Debug|Any CPU.Build.0 = Debug|Any CPU {10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -215,104 +320,56 @@ Global {CFA75523-9940-4366-A863-5C9F69195995}.Debug|Any CPU.Build.0 = Debug|Any CPU {CFA75523-9940-4366-A863-5C9F69195995}.Release|Any CPU.ActiveCfg = Release|Any CPU {CFA75523-9940-4366-A863-5C9F69195995}.Release|Any CPU.Build.0 = Release|Any CPU - {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5}.Release|Any CPU.Build.0 = Release|Any CPU - {9F87BF24-577F-426E-B308-F4E93A33FE02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F87BF24-577F-426E-B308-F4E93A33FE02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F87BF24-577F-426E-B308-F4E93A33FE02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F87BF24-577F-426E-B308-F4E93A33FE02}.Release|Any CPU.Build.0 = Release|Any CPU - {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F}.Release|Any CPU.Build.0 = Release|Any CPU - {76312EA7-323F-450F-9753-3F3484D7584F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76312EA7-323F-450F-9753-3F3484D7584F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76312EA7-323F-450F-9753-3F3484D7584F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76312EA7-323F-450F-9753-3F3484D7584F}.Release|Any CPU.Build.0 = Release|Any CPU - {687A13C7-5996-455A-83F2-D8CAA28A9032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {687A13C7-5996-455A-83F2-D8CAA28A9032}.Debug|Any CPU.Build.0 = Debug|Any CPU - {687A13C7-5996-455A-83F2-D8CAA28A9032}.Release|Any CPU.ActiveCfg = Release|Any CPU - {687A13C7-5996-455A-83F2-D8CAA28A9032}.Release|Any CPU.Build.0 = Release|Any CPU - {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36AC311F-34FF-4BF0-B144-AA50A2A19EB3}.Release|Any CPU.Build.0 = Release|Any CPU - {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C}.Release|Any CPU.Build.0 = Release|Any CPU - {E412A694-B7BF-4633-B612-60137D401363}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E412A694-B7BF-4633-B612-60137D401363}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E412A694-B7BF-4633-B612-60137D401363}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E412A694-B7BF-4633-B612-60137D401363}.Release|Any CPU.Build.0 = Release|Any CPU - {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E}.Release|Any CPU.Build.0 = Release|Any CPU - {7E8275B1-672A-46F8-91F3-8803C1E46306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E8275B1-672A-46F8-91F3-8803C1E46306}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E8275B1-672A-46F8-91F3-8803C1E46306}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E8275B1-672A-46F8-91F3-8803C1E46306}.Release|Any CPU.Build.0 = Release|Any CPU - {8C153439-05B7-4446-BF7F-437775B9521B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C153439-05B7-4446-BF7F-437775B9521B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C153439-05B7-4446-BF7F-437775B9521B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C153439-05B7-4446-BF7F-437775B9521B}.Release|Any CPU.Build.0 = Release|Any CPU - {723C23A2-3F14-448E-85EA-F4A8D7081F04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {723C23A2-3F14-448E-85EA-F4A8D7081F04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {723C23A2-3F14-448E-85EA-F4A8D7081F04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {723C23A2-3F14-448E-85EA-F4A8D7081F04}.Release|Any CPU.Build.0 = Release|Any CPU - {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15D39FB6-5102-4405-B969-3FEE2F03A26A}.Release|Any CPU.Build.0 = Release|Any CPU - {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BFDF954-F135-48FF-AFC0-6E41B5B68573}.Release|Any CPU.Build.0 = Release|Any CPU - {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61D2E6FF-E421-44EA-9C67-F67ADDD9B249}.Release|Any CPU.Build.0 = Release|Any CPU + {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {587D0761-B70A-49DC-A202-2CCA8C99BC3A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution - {308324E6-E9AF-4404-829F-F0259DA5E453} = {3AB7CF55-BBEF-4B8F-ACD0-B8DCE3FCE402} - {8AA70911-EA93-415A-9128-8CC6BF9091B0} = {3AB7CF55-BBEF-4B8F-ACD0-B8DCE3FCE402} + {EFD59A69-F8E7-4E6A-8C97-71DD95F49ACB} = {DECEBAB5-EC26-44E2-B633-939BEB78FB11} + {0E668B24-A62C-4AE3-A725-27A05238A403} = {8BA88C37-B258-4DD6-941F-4913FB7F96C2} + {E3EEF33E-D536-4084-9AD7-C4654E0A3857} = {8BA88C37-B258-4DD6-941F-4913FB7F96C2} {8867EE00-6581-4EE0-AC50-F1946D3B852B} = {C69CDE77-3860-4BC8-9ABD-A7F5C2416ECD} {ACD14402-AAF4-4875-A94C-E4137F037E34} = {C69CDE77-3860-4BC8-9ABD-A7F5C2416ECD} {5169F477-31B7-40C2-B8CE-A5BE9D6318D5} = {C69CDE77-3860-4BC8-9ABD-A7F5C2416ECD} - {A45BF04B-61D4-4AA8-B829-3F891C13B6DB} = {B6F14DE9-1EC2-435D-8864-020E6BB2D1F5} - {C9B6C39B-D714-49FD-AE7D-5FB186412D8A} = {35C88A6B-8460-4EBF-A3F7-E3980F5A444A} + {091EB29B-5064-4D0C-93FA-E55DB331BAAA} = {C843B1D1-C099-4486-AF34-A5D8412244F6} + {9369C7F0-A0D7-4F0F-BACF-6A3E6CC8AEAA} = {C843B1D1-C099-4486-AF34-A5D8412244F6} + {AF455105-4F9D-4CB1-BB3F-08F8E5EB7188} = {C843B1D1-C099-4486-AF34-A5D8412244F6} + {7D21F6F8-BEE6-4166-9782-5C7CA9B790BA} = {55AA5FC3-2145-4CCB-891E-F2FF721883C0} + {BB5985FE-10A5-4D6E-B961-D93F19EBCB23} = {55AA5FC3-2145-4CCB-891E-F2FF721883C0} + {8BFDF954-F135-48FF-AFC0-6E41B5B68573} = {55AA5FC3-2145-4CCB-891E-F2FF721883C0} + {61D2E6FF-E421-44EA-9C67-F67ADDD9B249} = {55AA5FC3-2145-4CCB-891E-F2FF721883C0} + {9F87BF24-577F-426E-B308-F4E93A33FE02} = {C046596C-9429-454B-AEAE-D558D6E8158F} + {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F} = {C046596C-9429-454B-AEAE-D558D6E8158F} + {36AC311F-34FF-4BF0-B144-AA50A2A19EB3} = {88C9719D-3D76-4027-86E1-AD64B28962BA} + {77C42B7C-AEAE-411B-9335-F4A521AAD879} = {88C9719D-3D76-4027-86E1-AD64B28962BA} + {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C} = {88C9719D-3D76-4027-86E1-AD64B28962BA} + {687A13C7-5996-455A-83F2-D8CAA28A9032} = {9CB0FB67-2D69-43AE-ADC4-2330419B2B1A} + {861C22D7-05F5-4AC9-ADE8-B18CD6101516} = {9CB0FB67-2D69-43AE-ADC4-2330419B2B1A} + {15D39FB6-5102-4405-B969-3FEE2F03A26A} = {1B55844B-7723-456A-8BF8-A2E9B5F0BE96} + {E412A694-B7BF-4633-B612-60137D401363} = {BFF493EC-5867-42F0-AC3A-C0701B92B552} + {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E} = {BFF493EC-5867-42F0-AC3A-C0701B92B552} + {8C153439-05B7-4446-BF7F-437775B9521B} = {D986BA75-F59B-499A-ADC5-D917765BC68D} + {7E8275B1-672A-46F8-91F3-8803C1E46306} = {BE1641D9-9D6C-4B7C-96F1-5E6B09BC7816} + {370ABE75-8DBF-453F-8435-719F6ED545E3} = {B9CB9EEA-2AC9-439A-A957-B09FE93383EB} + {9BE401A1-2214-47F1-8A19-AC9AD76C0098} = {B9CB9EEA-2AC9-439A-A957-B09FE93383EB} + {63F8DC8A-C976-4B14-91AA-12BB0E6227D4} = {B9CB9EEA-2AC9-439A-A957-B09FE93383EB} {9B95FD72-70DD-4CB5-8620-466C5201B8BD} = {B26FE6BE-C6CB-4617-965E-6CB9A8EA9749} {CDA1CF66-E39F-418F-A275-1BBD6A077453} = {B26FE6BE-C6CB-4617-965E-6CB9A8EA9749} + {A45BF04B-61D4-4AA8-B829-3F891C13B6DB} = {B6F14DE9-1EC2-435D-8864-020E6BB2D1F5} + {C9B6C39B-D714-49FD-AE7D-5FB186412D8A} = {35C88A6B-8460-4EBF-A3F7-E3980F5A444A} {20D63131-A16E-4C0A-96FB-ECBFA7E95448} = {33DF30BE-2045-4A4D-9145-0E7000C922FD} {7C883191-2FBD-403B-892A-14FF1654918D} = {33DF30BE-2045-4A4D-9145-0E7000C922FD} + {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5} = {B006BB08-6CDD-4420-81CE-0297942659C4} {E8B94BBE-C1AF-44D1-95A1-FC1AAC79F711} = {8C2B0C2B-E565-49F3-9C29-BD5108B0F6A9} - {370ABE75-8DBF-453F-8435-719F6ED545E3} = {B9CB9EEA-2AC9-439A-A957-B09FE93383EB} - {63F8DC8A-C976-4B14-91AA-12BB0E6227D4} = {B9CB9EEA-2AC9-439A-A957-B09FE93383EB} + {2912859E-F962-41F6-B5A7-34072DF43BC5} = {AF7FEE7A-25BD-4242-8775-65F777AABA23} + {64232612-86C3-4405-99F8-0611A396F9FB} = {AF7FEE7A-25BD-4242-8775-65F777AABA23} + {A4E5103A-F671-44BD-9159-7F9EDD929E29} = {AF7FEE7A-25BD-4242-8775-65F777AABA23} {2D3ED000-175F-4C57-BF48-281C90BAE86B} = {BE3F49D7-F5F9-4238-9376-DC9F597CF4F5} {963C2CE9-71BC-4C54-9E5F-B26D3E029B42} = {7F03FBC5-827C-4909-974A-4BA8C3080BDD} {16227F1E-AFD6-450F-97CC-2F963356B183} = {7F03FBC5-827C-4909-974A-4BA8C3080BDD} - {2912859E-F962-41F6-B5A7-34072DF43BC5} = {AF7FEE7A-25BD-4242-8775-65F777AABA23} - {A4E5103A-F671-44BD-9159-7F9EDD929E29} = {AF7FEE7A-25BD-4242-8775-65F777AABA23} - {587D0761-B70A-49DC-A202-2CCA8C99BC3A} = {C70ADC4B-47D4-4EA0-A514-0A10393B58D0} {10E23D0D-B7DC-45FC-ADE0-AE87F4DA550B} = {5707896A-553E-42BC-BB94-82247346C362} {CFA75523-9940-4366-A863-5C9F69195995} = {5707896A-553E-42BC-BB94-82247346C362} - {27FF899D-5D0D-4E88-BE53-6AFC2940A3B5} = {B006BB08-6CDD-4420-81CE-0297942659C4} - {9F87BF24-577F-426E-B308-F4E93A33FE02} = {C046596C-9429-454B-AEAE-D558D6E8158F} - {3A8C7CA2-FDE1-49C6-9183-7E6A9ED2003F} = {C046596C-9429-454B-AEAE-D558D6E8158F} - {76312EA7-323F-450F-9753-3F3484D7584F} = {C046596C-9429-454B-AEAE-D558D6E8158F} - {687A13C7-5996-455A-83F2-D8CAA28A9032} = {9CB0FB67-2D69-43AE-ADC4-2330419B2B1A} - {36AC311F-34FF-4BF0-B144-AA50A2A19EB3} = {88C9719D-3D76-4027-86E1-AD64B28962BA} - {ADD0A13F-9D8E-4907-BBA1-0E4E89A7481C} = {88C9719D-3D76-4027-86E1-AD64B28962BA} - {E412A694-B7BF-4633-B612-60137D401363} = {BFF493EC-5867-42F0-AC3A-C0701B92B552} - {C23782BC-EF4C-4A94-BDE8-4A1B83FDFC7E} = {BFF493EC-5867-42F0-AC3A-C0701B92B552} - {7E8275B1-672A-46F8-91F3-8803C1E46306} = {BE1641D9-9D6C-4B7C-96F1-5E6B09BC7816} - {8C153439-05B7-4446-BF7F-437775B9521B} = {D986BA75-F59B-499A-ADC5-D917765BC68D} - {723C23A2-3F14-448E-85EA-F4A8D7081F04} = {1B55844B-7723-456A-8BF8-A2E9B5F0BE96} - {15D39FB6-5102-4405-B969-3FEE2F03A26A} = {1B55844B-7723-456A-8BF8-A2E9B5F0BE96} - {8BFDF954-F135-48FF-AFC0-6E41B5B68573} = {1B55844B-7723-456A-8BF8-A2E9B5F0BE96} - {61D2E6FF-E421-44EA-9C67-F67ADDD9B249} = {1B55844B-7723-456A-8BF8-A2E9B5F0BE96} + {587D0761-B70A-49DC-A202-2CCA8C99BC3A} = {C70ADC4B-47D4-4EA0-A514-0A10393B58D0} EndGlobalSection EndGlobal diff --git a/DesperateDevs.sln.DotSettings b/DesperateDevs.sln.DotSettings index 936c887a..b47e476a 100644 --- a/DesperateDevs.sln.DotSettings +++ b/DesperateDevs.sln.DotSettings @@ -3,6 +3,10 @@ True True 1 + ..\InspectionSettings.DotSettings + True + True + 1.5 ..\PatternsAndTemplates.DotSettings True True diff --git a/Directory.Build.props b/Directory.Build.props index 537ec491..19ffd2c2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,14 +1,17 @@ - netstandard2.0 - net472 - 9 + false + net6.0 + netstandard2.1 + net6.0 true + default + en-US - + @@ -23,23 +26,24 @@ - 2020.3.17f1 - $(UnityInstallRoot)\$(UnityVersion)\$(UnityEditorPath) - $(UnityInstallRoot)\$(UnityVersion)\$(UnityEnginePath) + 2021.3.0f1 + $(UnityHubPath)/$(UnityVersion)/$(UnityEditorPath) + $(UnityHubPath)/$(UnityVersion)/$(UnityEnginePath) - - net472 + + $(MSBuildStartupDirectory)/build/Managed/UnityEditor.dll + $(MSBuildStartupDirectory)/build/Managed/UnityEngine.dll - runtime; build; native; contentfiles; analyzers; buildtransitive all + runtime; build; native; contentfiles; analyzers; buildtransitive - runtime; build; native; contentfiles; analyzers; buildtransitive all + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Directory.Build.targets b/Directory.Build.targets index 02d3f920..dd409773 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,7 +1,6 @@ - 0.1.0 Simon Schmid MIT icon.png diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..d11214a5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM mcr.microsoft.com/dotnet/sdk AS base +RUN apt-get update && apt-get install -y --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + dirmngr \ + gnupg \ + && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ + && echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list \ + && apt-get update && apt-get upgrade -y \ + && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y --fix-missing \ + jq \ + mono-complete \ + nuget \ + tree \ + unzip \ + vim \ + && rm -rf /var/lib/apt/lists/* +COPY .bee/desperatedevs/.bashrc /root/.bashrc +RUN dotnet tool install -g dotnet-reportgenerator-globaltool \ + && dotnet tool install -g coverlet.console \ + && echo 'PATH="$HOME/.dotnet/tools:$PATH"' >> /root/.bashrc + +FROM base AS bee +RUN bash -c "$(curl -fsSL https://raw.githubusercontent.com/sschmid/bee/main/install)" \ + && echo "complete -C bee bee" >> /root/.bashrc \ + && bee bee::run pull +WORKDIR /DesperateDevs +COPY Beefile Beefile +COPY Beefile.lock Beefile.lock +COPY .bee .bee +RUN bee bee::run install diff --git a/InspectionSettings.DotSettings b/InspectionSettings.DotSettings new file mode 100644 index 00000000..a5f2b553 --- /dev/null +++ b/InspectionSettings.DotSettings @@ -0,0 +1,10 @@ +ο»Ώ + ERROR + ERROR + ERROR + ERROR + ERROR + ERROR + ERROR + ERROR + ERROR \ No newline at end of file diff --git a/Unity3D.props b/Unity3D.props index c6e010f9..c39aaaef 100644 --- a/Unity3D.props +++ b/Unity3D.props @@ -1,58 +1,33 @@ - - C:\Program Files - Editor\Data\Managed - Editor\Data\UnityExtensions\Unity + C:/Program Files + Editor/Data/Managed - /Applications - Unity.app\Contents\Managed - Unity.app\Contents\UnityExtensions\Unity + /Applications + Unity.app/Contents/Managed - $([System.Environment]::GetFolderPath('System.Environment+SpecialFolder.UserProfile')) - Editor\Data\Managed - Editor\Data\UnityExtensions\Unity + $([System.Environment]::GetFolderPath('System.Environment+SpecialFolder.UserProfile')) + Editor/Data/Managed - - $(OSInstallRoot)\Unity\Hub\Editor - $(UnityManagedPath)\UnityEngine - Editor\Data\PlaybackEngines - $(UnityPlaybackEnginesPath)\AndroidPlayer - $(UnityPlaybackEnginesPath)\iOSSupport - Editor\Data\Resources\PackageManager\BuiltInPackages - - Library\PackageCache - Library\ScriptAssemblies - - - $(UnityManagedPath)\UnityEngine.dll - $(UnityManagedPath)\UnityEditor.dll - $(UnityExtensionsPath)\GUISystem\UnityEngine.UI.dll - $(UnityExtensionsPath)\TestRunner\UnityEngine.TestRunner.dll + $(OSApplicationPath)/Unity/Hub/Editor - - $(UnityPackageCachePath)\com.unity.nuget.newtonsoft-json*\Runtime\Newtonsoft.Json.dll - $(UnityPackageCachePath)\com.unity.ext.nunit*\net35\unity-custom\nunit.framework.dll - $(UnityPackageCachePath)\nuget.moq*\Moq.dll - $(UnityPackageCachePath)\com.unity.analytics*\AnalyticsStandardEvents\Unity.Analytics.StandardEvents.dll - $(UnityAndroidPlayerPath)\UnityEditor.Android.Extensions.dll - $(UnityiOSSupportPath)\UnityEditor.iOS.Extensions.Common.dll - $(UnityiOSSupportPath)\UnityEditor.iOS.Extensions.Xcode.dll + $(UnityManagedPath)/UnityEngine.dll + $(UnityManagedPath)/UnityEditor.dll diff --git a/src/DesperateDevs.Analytics/src/DesperateDevs.Analytics.csproj b/src/DesperateDevs.Analytics/src/DesperateDevs.Analytics.csproj deleted file mode 100644 index 2f97ef00..00000000 --- a/src/DesperateDevs.Analytics/src/DesperateDevs.Analytics.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs b/src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs deleted file mode 100644 index 5b14f103..00000000 --- a/src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs +++ /dev/null @@ -1,22 +0,0 @@ -ο»Ώnamespace DesperateDevs.Analytics { - - public abstract class AbstractTrackingHook : ITrackingHook { - - protected virtual string host { get { return "http://desperatedevs.com"; } } - protected virtual string endPoint { get { return "a/" + name + ".php"; } } - protected virtual bool throwExceptions { get { return false; } } - - protected abstract string name { get; } - - protected Tracker _tracker; - - public void Track() { - if (_tracker == null) { - _tracker = new Tracker(host, endPoint, throwExceptions); - } - _tracker.Track(GetData()); - } - - protected abstract TrackingData GetData(); - } -} diff --git a/src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs b/src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs deleted file mode 100644 index 16c6c1cf..00000000 --- a/src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.Analytics { - - public interface ITrackingHook { - - void Track(); - } -} diff --git a/src/DesperateDevs.Analytics/src/Tracker.cs b/src/DesperateDevs.Analytics/src/Tracker.cs deleted file mode 100644 index 1e35cc34..00000000 --- a/src/DesperateDevs.Analytics/src/Tracker.cs +++ /dev/null @@ -1,130 +0,0 @@ -ο»Ώusing System; -using System.Linq; -using System.Net; -using DesperateDevs.Logging; - -namespace DesperateDevs.Analytics -{ - public class Tracker - { - readonly string _url; - readonly bool _throwExceptions; - readonly Logger _logger = fabl.GetLogger(typeof(Tracker)); - - public Tracker(string host, string endPoint, bool throwExceptions) - { - _url = host + "/" + endPoint; - _throwExceptions = throwExceptions; - } - - public virtual void Track(TrackingData data) - { - if (_throwExceptions) - { - getResponse(data); - return; - } - - try - { - getResponse(data); - } - catch (Exception) - { - // ignored - } - } - - public virtual void TrackAsync(TrackingData data, Action onComplete) - { - if (_throwExceptions) - { - getResponseAsync(data, onComplete); - } - else - { - try - { - getResponseAsync(data, onComplete); - } - catch (Exception) - { - // ignored - } - } - } - - HttpWebRequest createWebRequest(TrackingData data) - { - var request = (HttpWebRequest)WebRequest.Create(buildTrackingCall(data)); - request.Timeout = 3000; - return request; - } - - void getResponse(TrackingData data) - { - createWebRequest(data).GetResponse().Close(); - } - - void getResponseAsync(TrackingData data, Action onComplete) - { - var request = createWebRequest(data); - var state = new AsyncRequestState(request, onComplete); - request.BeginGetResponse(onResponse, state); - } - - void onResponse(IAsyncResult ar) - { - if (_throwExceptions) - { - endResponse(ar); - } - else - { - try - { - endResponse(ar); - } - catch (Exception) - { - // ignored - } - } - } - - void endResponse(IAsyncResult ar) - { - var state = (AsyncRequestState)ar.AsyncState; - state.request.EndGetResponse(ar).Close(); - if (state.onComplete != null) - { - state.onComplete(); - } - } - - protected string buildTrackingCall(TrackingData data) - { - var call = data.Count != 0 - ? _url + Uri.EscapeUriString("?" + string.Join("&", data - .Select(kv => kv.Key + "=" + kv.Value) - .ToArray())) - : _url; - - _logger.Trace(call); - - return call; - } - } - - class AsyncRequestState - { - public readonly HttpWebRequest request; - public readonly Action onComplete; - - public AsyncRequestState(HttpWebRequest request, Action onComplete) - { - this.request = request; - this.onComplete = onComplete; - } - } -} diff --git a/src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs b/src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs deleted file mode 100644 index 73b4a18d..00000000 --- a/src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώusing System.Collections.Generic; - -namespace DesperateDevs.Analytics { - - public class TrackingData : Dictionary { - } -} diff --git a/src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs b/src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs deleted file mode 100644 index 489b0b2d..00000000 --- a/src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.Analytics { - - public class UserTrackingData : TrackingData { - - public UserTrackingData() { - this["u"] = Environment.UserName + "@" + Environment.MachineName; - this["d"] = Environment.ProcessorCount + "@" + Environment.OSVersion; - } - } -} diff --git a/src/DesperateDevs.Analytics/src/TrackingDataException.cs b/src/DesperateDevs.Analytics/src/TrackingDataException.cs deleted file mode 100644 index 14cf8d77..00000000 --- a/src/DesperateDevs.Analytics/src/TrackingDataException.cs +++ /dev/null @@ -1,10 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.Analytics { - - public class TrackingDataException : Exception { - - public TrackingDataException(string message) : base(message) { - } - } -} diff --git a/src/DesperateDevs.Analytics/tests/DesperateDevs.Analytics.Tests.csproj b/src/DesperateDevs.Analytics/tests/DesperateDevs.Analytics.Tests.csproj deleted file mode 100644 index 30898852..00000000 --- a/src/DesperateDevs.Analytics/tests/DesperateDevs.Analytics.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Analytics/tests/TrackerTests.cs b/src/DesperateDevs.Analytics/tests/TrackerTests.cs deleted file mode 100644 index af36ccd7..00000000 --- a/src/DesperateDevs.Analytics/tests/TrackerTests.cs +++ /dev/null @@ -1,50 +0,0 @@ -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Analytics.Tests -{ - public class TestTracker : Tracker - { - public string Call { get; private set; } - public TestTracker() : base("host", "endPoint.php", true) { } - public override void Track(TrackingData data) => Call = buildTrackingCall(data); - } - - public class TrackerTests - { - readonly TestTracker _tracker = new(); - readonly TrackingData _trackingData = new(); - - [Fact] - public void CreatesTrackingCallWithoutArgs() - { - _tracker.Track(_trackingData); - _tracker.Call.Should().Be("host/endPoint.php"); - } - - [Fact] - public void CreatesTrackingCallWithArg() - { - _trackingData.Add("testKey", "testValue"); - _tracker.Track(_trackingData); - _tracker.Call.Should().Be("host/endPoint.php?testKey=testValue"); - } - - [Fact] - public void EscapesArg() - { - _trackingData.Add("testKey", "testValue1 testValue2"); - _tracker.Track(_trackingData); - _tracker.Call.Should().Be("host/endPoint.php?testKey=testValue1%20testValue2"); - } - - [Fact] - public void CreatesTrackingCallWithMultipleArgs() - { - _trackingData.Add("testKey1", "testValue1"); - _trackingData.Add("testKey2", "testValue2"); - _tracker.Track(_trackingData); - _tracker.Call.Should().Be("host/endPoint.php?testKey1=testValue1&testKey2=testValue2"); - } - } -} diff --git a/src/DesperateDevs.Analytics/tests/TrackingDataTests.cs b/src/DesperateDevs.Analytics/tests/TrackingDataTests.cs deleted file mode 100644 index ba52b933..00000000 --- a/src/DesperateDevs.Analytics/tests/TrackingDataTests.cs +++ /dev/null @@ -1,23 +0,0 @@ -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Analytics.Tests -{ - public class TrackingDataTests - { - readonly TrackingData _trackingData = new(); - - [Fact] - public void CreatesEmptyTrackingData() - { - _trackingData.Count.Should().Be(0); - } - - [Fact] - public void AddsKeyAndValue() - { - _trackingData.Add("key", "value"); - _trackingData["key"].Should().Be("value"); - } - } -} diff --git a/src/DesperateDevs.Benchmarks/benchmarks/CollectionBenchmarks.cs b/src/DesperateDevs.Benchmarks/benchmarks/CollectionBenchmarks.cs new file mode 100644 index 00000000..94bbb631 --- /dev/null +++ b/src/DesperateDevs.Benchmarks/benchmarks/CollectionBenchmarks.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Linq; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace DesperateDevs.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class CollectionBenchmarks + { + [Params(100, 10000)] + public int N { get; set; } + + string[] _values; + + [GlobalSetup] + public void GlobalSetup() + { + _values = new string[N]; + for (var i = 0; i < N; i++) _values[i] = i.ToString(); + } + + [Benchmark] + public void ReturnAsArray() + { + foreach (var unused in GetAsArray()) { } + } + + [Benchmark] + public void ReturnAsIEnumerable() + { + foreach (var unused in GetAsIEnumerable()) { } + } + + [Benchmark] + public void ReturnAsIEnumerableToArray() + { + foreach (var unused in GetAsIEnumerable().ToArray()) { } + } + + string[] GetAsArray() => _values; + IEnumerable GetAsIEnumerable() => _values; + } +} diff --git a/src/DesperateDevs.Benchmarks/benchmarks/DesperateDevs.Benchmarks.csproj b/src/DesperateDevs.Benchmarks/benchmarks/DesperateDevs.Benchmarks.csproj new file mode 100644 index 00000000..da2d61a4 --- /dev/null +++ b/src/DesperateDevs.Benchmarks/benchmarks/DesperateDevs.Benchmarks.csproj @@ -0,0 +1,14 @@ + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + diff --git a/src/DesperateDevs.Benchmarks/benchmarks/Program.cs b/src/DesperateDevs.Benchmarks/benchmarks/Program.cs new file mode 100644 index 00000000..40685eba --- /dev/null +++ b/src/DesperateDevs.Benchmarks/benchmarks/Program.cs @@ -0,0 +1,12 @@ +ο»Ώusing BenchmarkDotNet.Running; + +namespace DesperateDevs.Benchmarks +{ + static class Program + { + public static void Main(string[] args) + { + BenchmarkRunner.Run(typeof(CollectionBenchmarks)); + } + } +} diff --git a/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/DesperateDevs.CLI.Utils.Tests.Program.csproj b/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/DesperateDevs.CLI.Utils.Tests.Program.csproj deleted file mode 100644 index f3717dd4..00000000 --- a/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/DesperateDevs.CLI.Utils.Tests.Program.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - $(DefaultNetTargetFramework) - false - - - - - - - - diff --git a/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/Program.cs b/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/Program.cs deleted file mode 100644 index a5103e5d..00000000 --- a/src/DesperateDevs.CLI.Utils/fixtures/DesperateDevs.CLI.Utils.Tests.Program/Program.cs +++ /dev/null @@ -1,83 +0,0 @@ -ο»Ώusing System; -using System.Threading; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Utils; - -namespace DesperateDevs.CLI.Utils.Tests.Program -{ - static class Program - { - public static void Main(string[] args) - { - CLIHelper.consoleColors = new ConsoleColors(); - var menu = new CLIMenu("CLI Tester", CLIHelper.consoleColors); - menu.AddMenuEntry(new GreetMenuEntry()); - menu.AddMenuEntry(new SubMenuEntry(menu.title)); - menu.AddMenuEntry(new SelectionMenuEntry(menu.title)); - menu.AddMenuEntry(new StopMenuEntry(menu, "Exit", true)); - menu.Start(); - Console.Clear(); - } - } -} - -public sealed class GreetMenuEntry : IMenuEntry -{ - public string title => "Greet"; - public ConsoleKey[] triggers => new[] {ConsoleKey.G}; - public bool showTriggerInTitle => true; - - public Action action => () => - { - Console.WriteLine("Hello " + new Random().Next()); - Thread.Sleep(1000); - }; -} - -public sealed class SubMenuEntry : IMenuEntry -{ - public string title => "Sub menu"; - public ConsoleKey[] triggers => new[] {ConsoleKey.S}; - public bool showTriggerInTitle => true; - - readonly string _subtitle; - - public SubMenuEntry(string previous) - { - _subtitle = previous + " > " + title; - } - - public Action action => () => - { - var menu = new CLIMenu(_subtitle, CLIHelper.consoleColors); - menu.AddMenuEntry(new GreetMenuEntry()); - menu.AddMenuEntry(new SubMenuEntry(_subtitle)); - menu.AddMenuEntry(new StopMenuEntry(menu, "Back", true)); - menu.Start(); - }; -} - -public sealed class SelectionMenuEntry : IMenuEntry -{ - public string title => "Selection"; - public ConsoleKey[] triggers => new[] {ConsoleKey.X}; - public bool showTriggerInTitle => true; - - readonly string _subtitle; - - public SelectionMenuEntry(string previous) - { - _subtitle = previous + " > " + title; - } - - public Action action => () => - { - var menu = new CLIMenu(_subtitle, CLIHelper.consoleColors); - menu.AddMenuEntry(new SelectableMenuEntry("Desperate", false)); - menu.AddMenuEntry(new SelectableMenuEntry("Devs", false)); - menu.AddMenuEntry(new SelectableMenuEntry("Console", false)); - menu.AddMenuEntry(new SelectableMenuEntry("Menu", false)); - menu.AddMenuEntry(new StopMenuEntry(menu, "Back", true)); - menu.Start(); - }; -} diff --git a/src/DesperateDevs.CLI.Utils/src/AbstractCommand.cs b/src/DesperateDevs.CLI.Utils/src/AbstractCommand.cs deleted file mode 100644 index ca1169f8..00000000 --- a/src/DesperateDevs.CLI.Utils/src/AbstractCommand.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace DesperateDevs.CLI.Utils -{ - public abstract class AbstractCommand : ICommand - { - public abstract string trigger { get; } - public abstract string description { get; } - public abstract string group { get; } - public abstract string example { get; } - - protected CLIProgram _program; - protected string[] _rawArgs; - protected string[] _args; - - public virtual void Run(CLIProgram program, string[] args) - { - _program = program; - _rawArgs = args; - _args = args - .WithoutTrigger() - .WithoutDefaultParameter(); - - run(); - } - - protected abstract void run(); - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/ArgsExtension.cs b/src/DesperateDevs.CLI.Utils/src/ArgsExtension.cs deleted file mode 100644 index 4e5f78fc..00000000 --- a/src/DesperateDevs.CLI.Utils/src/ArgsExtension.cs +++ /dev/null @@ -1,48 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; - -namespace DesperateDevs.CLI.Utils { - - public static class ArgsExtension { - - static readonly HashSet _defaultParameter = new HashSet { - "-v", - "-s", - "-d" - }; - - public static bool IsVerbose(this string[] args) { - return HasParameter(args, "-v") || IsDebug(args); - } - - public static bool IsSilent(this string[] args) { - return HasParameter(args, "-s"); - } - - public static bool IsDebug(this string[] args) { - return HasParameter(args, "-d"); - } - - public static bool HasParameter(this string[] args, string parameter) { - return args.Any(arg => arg == parameter); - } - - // TODO rename to WithoutCommand - public static string[] WithoutTrigger(this string[] args) { - return args.Skip(1).ToArray(); - } - - public static string[] WithoutDefaultParameter(this string[] args) { - return args - .Where(arg => !_defaultParameter.Contains(arg)) - .ToArray(); - } - - public static string[] WithoutParameter(this string[] args) { - return args - .Where(arg => !arg.StartsWith("-", StringComparison.Ordinal)) - .ToArray(); - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/CLIHelper.cs b/src/DesperateDevs.CLI.Utils/src/CLIHelper.cs deleted file mode 100644 index 46c9ce49..00000000 --- a/src/DesperateDevs.CLI.Utils/src/CLIHelper.cs +++ /dev/null @@ -1,160 +0,0 @@ -ο»Ώusing System; -using System.Linq; -using DesperateDevs.Utils; - -namespace DesperateDevs.CLI.Utils -{ - public static class CLIHelper - { - public static ConsoleColors consoleColors; - - public static void WriteCentered(string value, bool centerEachLine) - { - writeMultiLine(value, centerEachLine, (line, length) => - { - Console.SetCursorPosition(Math.Max(0, (Console.BufferWidth - length) / 2), Console.CursorTop); - Console.WriteLine(line); - }); - } - - public static void WriteCenteredHighlighted(string value, bool centerEachLine) - { - Console.BackgroundColor = consoleColors.highlightedBackground; - Console.ForegroundColor = consoleColors.highlightedForeground; - - writeMultiLine(value, centerEachLine, (line, length) => - { - Console.SetCursorPosition(Math.Max(0, (Console.BufferWidth - length) / 2), Console.CursorTop); - Console.WriteLine(line); - }); - - Console.ResetColor(); - } - - public static void WriteCenteredHighlightedPadded(string value, bool centerEachLine) - { - Console.BackgroundColor = consoleColors.highlightedBackground; - Console.ForegroundColor = consoleColors.highlightedForeground; - - writeMultiLine(value, centerEachLine, (line, length) => - { - var pad = Math.Max(0, (Console.BufferWidth - length) / 2); - Console.WriteLine(line.PadLeft(line.Length + pad).PadRight(Console.BufferWidth - Console.CursorLeft - 1)); - }); - - Console.ResetColor(); - } - - public static void WriteRight(string value, bool centerEachLine) - { - writeMultiLine(value, centerEachLine, (line, length) => - { - Console.SetCursorPosition(Math.Max(0, Console.BufferWidth - length), Console.CursorTop); - Console.Write(line); - }); - } - - public static void WriteRightHighlighted(string value, bool centerEachLine) - { - Console.BackgroundColor = consoleColors.highlightedBackground; - Console.ForegroundColor = consoleColors.highlightedForeground; - - writeMultiLine(value, centerEachLine, (line, length) => - { - Console.SetCursorPosition(Math.Max(0, Console.BufferWidth - length), Console.CursorTop); - Console.Write(line); - }); - - Console.ResetColor(); - } - - public static void WriteRightHighlightedPadded(string value, bool centerEachLine) - { - Console.BackgroundColor = consoleColors.highlightedBackground; - Console.ForegroundColor = consoleColors.highlightedForeground; - - writeMultiLine(value, centerEachLine, (line, length) => - { - var pad = Math.Max(0, Console.BufferWidth - length); - Console.Write(line.PadLeft(length + pad)); - }); - - Console.ResetColor(); - } - - public static void WriteHighlighted(string value, bool padRight, int pad = -1) - { - Console.BackgroundColor = consoleColors.highlightedBackground; - Console.ForegroundColor = consoleColors.highlightedForeground; - - writeMultiLine(value, true, (line, length) => Console.WriteLine(padRight - ? line.PadRight(pad == -1 ? (Console.BufferWidth - Console.CursorLeft) : pad) - : line)); - - Console.ResetColor(); - } - - static void writeMultiLine(string value, bool lengthPerLine, Action logMethod) - { - var lines = value.Split('\n'); - if (lengthPerLine) - { - foreach (var line in lines) - logMethod(line, line.Length); - } - else - { - var longestLine = lines.Max(line => line.Length); - foreach (var line in lines) - { - logMethod(line, longestLine); - } - } - } - -// public static void TestWrite() -// { -// Console.Clear(); -// WriteCentered("xxx", false); -// WriteCentered("xxx", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteCentered("WriteCentered", false); -// WriteCentered("WriteCentered\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteCenteredHighlightedPadded("WriteCenteredHighlightedPadded", false); -// WriteCenteredHighlightedPadded("WriteCenteredHighlightedPadded\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteCenteredHighlighted("WriteCenteredHighlighted", false); -// WriteCenteredHighlighted("WriteCenteredHighlighted\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteRight("WriteRight", false); -// WriteRight("WriteRight\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteRightHighlightedPadded("WriteRightHighlightedPadded", false); -// WriteRightHighlightedPadded("WriteRightHighlightedPadded\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteRightHighlighted("WriteRightHighlighted", false); -// WriteRightHighlighted("WriteRightHighlighted\nper line", true); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// -// WriteHighlighted("WriteHighlighted", false); -// WriteHighlighted("WriteHighlighted\nPadded", true); -// WriteHighlighted("WriteHighlighted\nCustom Padd", true, 40); -// -// Console.WriteLine("--------------------------------------------------------------------------------"); -// } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/CLIProgram.cs b/src/DesperateDevs.CLI.Utils/src/CLIProgram.cs deleted file mode 100644 index 7a5e9325..00000000 --- a/src/DesperateDevs.CLI.Utils/src/CLIProgram.cs +++ /dev/null @@ -1,155 +0,0 @@ -ο»Ώusing System; -using System.IO; -using System.Linq; -using DesperateDevs.Logging; -using DesperateDevs.Logging.Formatters; -using DesperateDevs.Utils; - -namespace DesperateDevs.CLI.Utils -{ - public class CLIProgram - { - readonly Logger _logger; - readonly Type _defaultCommand; - readonly string[] _args; - readonly ICommand[] _commands; - - public CLIProgram(string applicationName, Type defaultCommand, string[] args, ConsoleColors consoleColors = null) - { - _logger = fabl.GetLogger(applicationName); - _defaultCommand = defaultCommand; - _args = args; - CLIHelper.consoleColors = consoleColors ?? new ConsoleColors(); - Console.Title = applicationName + string.Join(" ", args); - initializeLogging(args, CLIHelper.consoleColors); - _commands = loadCommands(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)); - } - - public void Run() - { - if (_args != null && _args.WithoutParameter().Length != 0) - { - runCommand(_args); - } - else - { - try - { - _commands - .Single(c => c.GetType() == _defaultCommand) - .Run(this, _args); - } - catch (Exception ex) - { - _logger.Error(_args.IsVerbose() ? ex.ToString() : ex.Message); - } - } - } - - ICommand[] loadCommands(string dir) - { - _logger.Debug("Loading assemblies from " + dir); - var resolver = AssemblyResolver.LoadAssemblies(false, dir); - - var commands = AppDomain.CurrentDomain - .GetInstancesOf() - .OrderBy(c => c.trigger) - .ToArray(); - - resolver.Close(); - - return commands; - } - - public ICommand GetCommand(string trigger) - { - var command = _commands.SingleOrDefault(c => c.trigger == trigger); - if (command == null) - { - throw new Exception("command not found: " + trigger); - } - - return command; - } - - public int GetCommandListPad() - { - return _commands.Length == 0 - ? 0 - : _commands.Max(c => c.example?.Length ?? 0); - } - - public string GetFormattedCommandList() - { - var pad = GetCommandListPad(); - - var groupedCommands = _commands - .Where(c => c.example != null) - .GroupBy(c => c.group ?? string.Empty) - .OrderBy(group => group.Key); - - return string.Join("\n", groupedCommands.Select(group => - { - var groupHeader = group.Key == string.Empty ? string.Empty : group.Key + ":\n"; - var commandInGroup = string.Join("\n", group - .Select(command => " " + command.example.PadRight(pad) + " - " + command.description)); - return groupHeader + "\n" + commandInGroup + "\n"; - })); - } - - void runCommand(string[] args) - { - try - { - GetCommand(args.WithoutDefaultParameter()[0]).Run(this, args); - } - catch (Exception ex) - { - _logger.Error(args.IsVerbose() ? ex.ToString() : ex.Message); - _logger.Info("Use -v to enable verbose logging"); - } - } - - void initializeLogging(string[] args, ConsoleColors consoleColors) - { - if (args.IsSilent()) - { - fabl.globalLogLevel = LogLevel.Error; - } - else if (args.IsVerbose()) - { - fabl.globalLogLevel = LogLevel.Debug; - } - else - { - fabl.globalLogLevel = LogLevel.Info; - } - - LogFormatter formatter; - if (args.IsDebug()) - { - formatter = new DefaultLogMessageFormatter().FormatMessage; - } - else - { - formatter = (logger, level, message) => message; - } - - fabl.ResetAppenders(); - fabl.AddAppender((logger, logLevel, message) => - { - message = formatter(logger, logLevel, message); - if (consoleColors.logLevelColors.ContainsKey(logLevel)) - { - Console.ForegroundColor = consoleColors.logLevelColors[logLevel]; - Console.WriteLine(message); - Console.ResetColor(); - } - else - { - Console.WriteLine(message); - } - }); - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/DesperateDevs.CLI.Utils.csproj b/src/DesperateDevs.CLI.Utils/src/DesperateDevs.CLI.Utils.csproj deleted file mode 100644 index 481b4014..00000000 --- a/src/DesperateDevs.CLI.Utils/src/DesperateDevs.CLI.Utils.csproj +++ /dev/null @@ -1,13 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - - diff --git a/src/DesperateDevs.CLI.Utils/src/ICommand.cs b/src/DesperateDevs.CLI.Utils/src/ICommand.cs deleted file mode 100644 index af1485c9..00000000 --- a/src/DesperateDevs.CLI.Utils/src/ICommand.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώnamespace DesperateDevs.CLI.Utils { - - public interface ICommand { - - string trigger { get; } - string description { get; } - string group { get; } - string example { get; } - - void Run(CLIProgram program, string[] args); - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/CLIMenu.cs b/src/DesperateDevs.CLI.Utils/src/Menu/CLIMenu.cs deleted file mode 100644 index 25ebe84d..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/CLIMenu.cs +++ /dev/null @@ -1,157 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.Utils; - -namespace DesperateDevs.CLI.Utils -{ - public class CLIMenu - { - public string title => _title; - public string indent = string.Empty; - - readonly string _title; - readonly MenuSelection _selection; - readonly List _menuEntries; - readonly ConsoleColors _colors; - - int _longestTitle; - bool _stopRequested; - - public CLIMenu(string title, ConsoleColors colors) - { - _title = title; - _selection = new MenuSelection(); - _menuEntries = new List(); - _colors = colors; - } - - public void AddMenuEntry(IMenuEntry entry) - { - _menuEntries.Add(entry); - } - - public void Start() - { - _longestTitle = _menuEntries.Max(e => e.title.Length) + indent.Length; - _stopRequested = false; - while (!_stopRequested) - { - drawMenu(); - processInput(); - tryRunMenuEntry(); - } - - Console.Clear(); - } - - public void Stop() - { - _stopRequested = true; - } - - void drawMenu() - { - Console.Clear(); - Console.WriteLine(_title); - - for (int i = 0; i < _menuEntries.Count; i++) - { - var entry = indent; - if (_menuEntries[i].showTriggerInTitle) - { - entry += _menuEntries[i].triggers != null - ? "[" + _menuEntries[i].triggers[0] + "] " - : string.Empty; - } - - entry += _menuEntries[i].title; - - if (i == _selection.index) - { - CLIHelper.WriteHighlighted(entry, true, _longestTitle); - } - else - { - Console.ResetColor(); - Console.WriteLine(entry); - } - } - } - - void tryRunMenuEntry() - { - if (_selection.runAction) - _menuEntries[_selection.index].action(); - - _selection.runAction = false; - } - - void processInput() - { - var key = Console.ReadKey(true); - selectionFromNavigation(key); - selectionFromTrigger(key); - } - - void selectionFromNavigation(ConsoleKeyInfo key) - { - switch (key.Key) - { - case ConsoleKey.DownArrow: - case ConsoleKey.RightArrow: - case ConsoleKey.J: - case ConsoleKey.L: - if (_selection.index < _menuEntries.Count - 1) - { - _selection.index += 1; - _selection.runAction = false; - } - break; - case ConsoleKey.UpArrow: - case ConsoleKey.LeftArrow: - case ConsoleKey.K: - case ConsoleKey.H: - if (_selection.index > 0) - { - _selection.index -= 1; - _selection.runAction = false; - } - break; - case ConsoleKey.Home: - case ConsoleKey.A: - _selection.index = 0; - _selection.runAction = false; - break; - case ConsoleKey.End: - case ConsoleKey.E: - _selection.index = _menuEntries.Count - 1; - _selection.runAction = false; - break; - case ConsoleKey.Enter: - case ConsoleKey.Spacebar: - _selection.runAction = true; - break; - } - } - - void selectionFromTrigger(ConsoleKeyInfo key) - { - for (var i = 0; i < _menuEntries.Count; i++) - { - if (_menuEntries[i].triggers != null) - { - foreach (var trigger in _menuEntries[i].triggers) - { - if (trigger == key.Key) - { - _selection.index = i; - _selection.runAction = true; - return; - } - } - } - } - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/IMenuEntry.cs b/src/DesperateDevs.CLI.Utils/src/Menu/IMenuEntry.cs deleted file mode 100644 index a16b1d61..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/IMenuEntry.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.CLI.Utils -{ - public interface IMenuEntry - { - string title { get; } - ConsoleKey[] triggers { get; } - bool showTriggerInTitle { get; } - Action action { get; } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/ExitMenuEntry.cs b/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/ExitMenuEntry.cs deleted file mode 100644 index abd59784..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/ExitMenuEntry.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.CLI.Utils -{ - public sealed class ExitMenuEntry : MenuEntry - { - public ExitMenuEntry(string title, bool showTriggerInTitle) : - base(title, new[] { ConsoleKey.Escape, ConsoleKey.Q }, showTriggerInTitle, () => Environment.Exit(0)) - { - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/MenuEntry.cs b/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/MenuEntry.cs deleted file mode 100644 index 3f4e79ff..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/MenuEntry.cs +++ /dev/null @@ -1,20 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.CLI.Utils -{ - public class MenuEntry : IMenuEntry - { - public string title { get; set; } - public ConsoleKey[] triggers { get; set; } - public bool showTriggerInTitle { get; set; } - public Action action { get; set; } - - public MenuEntry(string title, ConsoleKey[] triggers, bool showTriggerInTitle, Action action) - { - this.title = title; - this.triggers = triggers; - this.showTriggerInTitle = showTriggerInTitle; - this.action = action; - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/SelectableMenuEntry.cs b/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/SelectableMenuEntry.cs deleted file mode 100644 index 8fe50dde..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/SelectableMenuEntry.cs +++ /dev/null @@ -1,44 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.CLI.Utils -{ - public class SelectableMenuEntry : MenuEntry - { - public bool isSelected { - get { return _isSelected; } - set { - if (value != _isSelected) - { - _isSelected = value; - updateTitle(); - _onSelected?.Invoke(_isSelected); - } - } - } - - readonly string _title; - bool _isSelected; - readonly Action _onSelected; - - public SelectableMenuEntry(string title, bool isSelected, Action onSelected = null) : - base(title, null, false, null) - { - _title = title; - _isSelected = isSelected; - updateTitle(); - _onSelected = onSelected; - action = toggleSelected; - } - - void toggleSelected() - { - isSelected = !isSelected; - updateTitle(); - } - - void updateTitle() - { - title = (_isSelected ? "[x] " : "[ ] ") + _title; - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/StopMenuEntry.cs b/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/StopMenuEntry.cs deleted file mode 100644 index 2456ea6a..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/MenuEntries/StopMenuEntry.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.CLI.Utils -{ - public sealed class StopMenuEntry : MenuEntry - { - public StopMenuEntry(CLIMenu menu, string title, bool showTriggerInTitle) : - base(title, new[] { ConsoleKey.Escape, ConsoleKey.Q }, showTriggerInTitle, menu.Stop) - { - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/src/Menu/MenuSelection.cs b/src/DesperateDevs.CLI.Utils/src/Menu/MenuSelection.cs deleted file mode 100644 index c592ed49..00000000 --- a/src/DesperateDevs.CLI.Utils/src/Menu/MenuSelection.cs +++ /dev/null @@ -1,8 +0,0 @@ -ο»Ώnamespace DesperateDevs.CLI.Utils -{ - public sealed class MenuSelection - { - public int index; - public bool runAction; - } -} diff --git a/src/DesperateDevs.CLI.Utils/tests/ArgsExtensionTests.cs b/src/DesperateDevs.CLI.Utils/tests/ArgsExtensionTests.cs deleted file mode 100644 index 29af419e..00000000 --- a/src/DesperateDevs.CLI.Utils/tests/ArgsExtensionTests.cs +++ /dev/null @@ -1,60 +0,0 @@ -ο»Ώusing System; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.CLI.Utils.Tests -{ - public class ArgsExtensionTests - { - static void AssertArg(string parameter, Func method) - { - method(new[] {"value"}).Should().BeFalse(); - method(new[] {"value", parameter}).Should().BeTrue(); - } - - [Fact] - public void IsVerbose() => AssertArg("-v", ArgsExtension.IsVerbose); - - [Fact] - public void IsSilent() => AssertArg("-s", ArgsExtension.IsSilent); - - [Fact] - public void IsDebug() => AssertArg("-d", ArgsExtension.IsDebug); - - [Fact] - public void IsDebugSetsIsVerbose() => AssertArg("-d", ArgsExtension.IsVerbose); - - [Fact] - public void FiltersDefaultParameter() - { - var filtered = new[] {"-v", "-s", "-d", "value"}.WithoutDefaultParameter(); - filtered.Length.Should().Be(1); - filtered.Should().Contain("value"); - } - - [Fact] - public void KeepsCustomParameter() - { - var filtered = new[] {"-v", "-s", "-d", "-f"}.WithoutDefaultParameter(); - filtered.Length.Should().Be(1); - filtered.Should().Contain("-f"); - } - - [Fact] - public void FiltersAllParameter() - { - var filtered = new[] {"-v", "-s", "-d", "-x", "-y", "value"}.WithoutParameter(); - filtered.Length.Should().Be(1); - filtered.Should().Contain("value"); - } - - [Fact] - public void FiltersTrigger() - { - var filtered = new[] {"value1", "-p", "value2"}.WithoutTrigger(); - filtered.Length.Should().Be(2); - filtered.Should().Contain("-p"); - filtered.Should().Contain("value2"); - } - } -} diff --git a/src/DesperateDevs.CLI.Utils/tests/DesperateDevs.CLI.Utils.Tests.csproj b/src/DesperateDevs.CLI.Utils/tests/DesperateDevs.CLI.Utils.Tests.csproj deleted file mode 100644 index d2b523ad..00000000 --- a/src/DesperateDevs.CLI.Utils/tests/DesperateDevs.CLI.Utils.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Caching/src/DesperateDevs.Caching.csproj b/src/DesperateDevs.Caching/src/DesperateDevs.Caching.csproj new file mode 100644 index 00000000..3458b685 --- /dev/null +++ b/src/DesperateDevs.Caching/src/DesperateDevs.Caching.csproj @@ -0,0 +1,8 @@ + + + + $(DefaultTargetFramework) + 1.0.0 + + + diff --git a/src/DesperateDevs.Caching/src/ObjectCache.cs b/src/DesperateDevs.Caching/src/ObjectCache.cs new file mode 100644 index 00000000..082b1871 --- /dev/null +++ b/src/DesperateDevs.Caching/src/ObjectCache.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace DesperateDevs.Caching +{ + public class ObjectCache + { + public IEnumerable ObjectPools => _objectPools.Values; + + readonly Dictionary _objectPools; + + public ObjectCache() + { + _objectPools = new Dictionary(); + } + + public ObjectPool GetObjectPool() where T : new() + { + var type = typeof(T); + if (!_objectPools.TryGetValue(type, out var objectPool)) + { + objectPool = new ObjectPool(() => new T()); + _objectPools.Add(type, objectPool); + } + + return (ObjectPool)objectPool; + } + + public T Get() where T : new() => GetObjectPool().Get(); + + public void Push(T obj) where T : new() => GetObjectPool().Push(obj); + + public void RegisterCustomObjectPool(ObjectPool objectPool) => + _objectPools.Add(typeof(T), objectPool); + + public void Clear() => _objectPools.Clear(); + } +} diff --git a/src/DesperateDevs.Caching/src/ObjectPool.cs b/src/DesperateDevs.Caching/src/ObjectPool.cs new file mode 100644 index 00000000..0c906626 --- /dev/null +++ b/src/DesperateDevs.Caching/src/ObjectPool.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace DesperateDevs.Caching +{ + public class ObjectPool + { + readonly Func _factoryMethod; + readonly Action _resetMethod; + readonly Stack _objectPool; + + public ObjectPool(Func factoryMethod, Action resetMethod = null) + { + _factoryMethod = factoryMethod; + _resetMethod = resetMethod; + _objectPool = new Stack(); + } + + public T Get() => _objectPool.Count == 0 + ? _factoryMethod() + : _objectPool.Pop(); + + public void Push(T obj) + { + _resetMethod?.Invoke(obj); + _objectPool.Push(obj); + } + + public T[] Drain() + { + var objects = _objectPool.ToArray(); + _objectPool.Clear(); + return objects; + } + + public void Clear() => _objectPool.Clear(); + } +} diff --git a/src/DesperateDevs.Caching/tests/DesperateDevs.Caching.Tests.csproj b/src/DesperateDevs.Caching/tests/DesperateDevs.Caching.Tests.csproj new file mode 100644 index 00000000..14b5d11f --- /dev/null +++ b/src/DesperateDevs.Caching/tests/DesperateDevs.Caching.Tests.csproj @@ -0,0 +1,22 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + diff --git a/src/DesperateDevs.Caching/tests/ObjectCacheTests.cs b/src/DesperateDevs.Caching/tests/ObjectCacheTests.cs new file mode 100644 index 00000000..638b3007 --- /dev/null +++ b/src/DesperateDevs.Caching/tests/ObjectCacheTests.cs @@ -0,0 +1,91 @@ +using System.Linq; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Caching.Tests +{ + public class ObjectCacheTests + { + readonly ObjectCache _cache = new ObjectCache(); + + [Fact] + public void CreatesNewObjectPoolWhenRequested() + { + _cache.GetObjectPool().Should().NotBeNull(); + } + + [Fact] + public void ReturnsSameObjectPoolAlreadyCreated() + { + _cache.GetObjectPool().Should().BeSameAs(_cache.GetObjectPool()); + } + + [Fact] + public void ReturnsNewInstance() + { + _cache.Get().Should().NotBeNull(); + } + + [Fact] + public void ReturnsPooledInstance() + { + var obj = _cache.Get(); + _cache.Push(obj); + _cache.Get().Should().BeSameAs(obj); + } + + [Fact] + public void ReturnsCustomPushedInstance() + { + var obj = new object(); + _cache.Push(obj); + _cache.Get().Should().BeSameAs(obj); + } + + [Fact] + public void RegistersCustomObjectPool() + { + var objectPool = new ObjectPool( + () => new TestClassWithField {Value = "test"}, + c => c.Value = null + ); + + _cache.RegisterCustomObjectPool(objectPool); + + _cache.GetObjectPool().Should().BeSameAs(objectPool); + + var obj = _cache.Get(); + obj.Value.Should().Be("test"); + + _cache.Push(obj); + obj.Value.Should().BeNull(); + } + + [Fact] + public void Clears() + { + var obj = _cache.Get(); + _cache.Push(obj); + _cache.Clear(); + _cache.Get().Should().NotBeSameAs(obj); + } + + [Fact] + public void GetsAllObjectPools() + { + var objectPool = new ObjectPool( + () => new TestClassWithField {Value = "test"}, + c => c.Value = null + ); + + _cache.RegisterCustomObjectPool(objectPool); + + _cache.Get(); + _cache.Get(); + + var objectPools = _cache.ObjectPools.ToArray(); + objectPools.Should().HaveCount(2); + objectPools.Should().Contain(objectPool); + } + } +} diff --git a/src/DesperateDevs.Caching/tests/ObjectPoolTests.cs b/src/DesperateDevs.Caching/tests/ObjectPoolTests.cs new file mode 100644 index 00000000..5cc38ccf --- /dev/null +++ b/src/DesperateDevs.Caching/tests/ObjectPoolTests.cs @@ -0,0 +1,89 @@ +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Caching.Tests +{ + public class ObjectPoolTests + { + const string Value = "test"; + + ObjectPool _objectPool; + + public ObjectPoolTests() + { + _objectPool = new ObjectPool( + () => new TestClassWithField {Value = Value}, + o => { o.Value = null; } + ); + } + + [Fact] + public void GetsNewInstanceFromPool() + { + _objectPool.Get().Value.Should().Be(Value); + } + + [Fact] + public void GetsPooledInstance() + { + var obj = new TestClassWithField(); + _objectPool.Push(obj); + _objectPool.Get().Should().BeSameAs(obj); + } + + [Fact] + public void ResetsPushedInstance() + { + var obj = new TestClassWithField {Value = Value}; + _objectPool.Push(obj); + obj.Value.Should().BeNull(); + } + + [Fact] + public void DoesNotResetWhenResetMethodIsNull() + { + _objectPool = new ObjectPool(() => new TestClassWithField {Value = Value}); + var obj = new TestClassWithField {Value = Value}; + _objectPool.Push(obj); + obj.Value.Should().Be(Value); + } + + [Fact] + public void DrainsPool() + { + var obj1 = new TestClassWithField(); + var obj2 = new TestClassWithField(); + _objectPool.Push(obj1); + _objectPool.Push(obj2); + + var objects = _objectPool.Drain(); + objects.Should().HaveCount(2); + objects.Should().Contain(obj1); + objects.Should().Contain(obj2); + + var obj = _objectPool.Get(); + obj.Should().NotBeSameAs(obj1); + obj.Should().NotBeSameAs(obj2); + } + + [Fact] + public void ClearsPool() + { + var obj1 = new TestClassWithField(); + var obj2 = new TestClassWithField(); + _objectPool.Push(obj1); + _objectPool.Push(obj2); + + _objectPool.Clear(); + + var obj = _objectPool.Get(); + obj.Should().NotBeSameAs(obj1); + obj.Should().NotBeSameAs(obj2); + } + } + + public class TestClassWithField + { + public string Value; + } +} diff --git a/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/DesperateDevs.Cli.Utils.Tests.Program.csproj b/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/DesperateDevs.Cli.Utils.Tests.Program.csproj new file mode 100644 index 00000000..a558d1b1 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/DesperateDevs.Cli.Utils.Tests.Program.csproj @@ -0,0 +1,14 @@ + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + diff --git a/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/Program.cs b/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/Program.cs new file mode 100644 index 00000000..80b93659 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/fixtures/DesperateDevs.Cli.Utils.Tests.Program/Program.cs @@ -0,0 +1,82 @@ +ο»Ώusing System; +using System.Threading; +using DesperateDevs.Cli.Utils; + +namespace DesperateDevs.Cli.Utils.Tests.Program +{ + static class Program + { + public static void Main(string[] args) + { + CliHelper.ConsoleColors = new ConsoleColors(); + var menu = new CliMenu("Cli Tester"); + menu.AddMenuEntry(new GreetMenuEntry()); + menu.AddMenuEntry(new SubMenuEntry(menu.Title)); + menu.AddMenuEntry(new SelectionMenuEntry(menu.Title)); + menu.AddMenuEntry(new StopMenuEntry(menu, "Exit", true)); + menu.Start(); + Console.Clear(); + } + } +} + +public sealed class GreetMenuEntry : IMenuEntry +{ + public string Title => "Greet"; + public ConsoleKey[] Triggers => new[] {ConsoleKey.G}; + public bool ShowTriggerInTitle => true; + + public Action Action => () => + { + Console.WriteLine("Hello " + new Random().Next()); + Thread.Sleep(1000); + }; +} + +public sealed class SubMenuEntry : IMenuEntry +{ + public string Title => "Sub menu"; + public ConsoleKey[] Triggers => new[] {ConsoleKey.S}; + public bool ShowTriggerInTitle => true; + + readonly string _subtitle; + + public SubMenuEntry(string previous) + { + _subtitle = previous + " > " + Title; + } + + public Action Action => () => + { + var menu = new CliMenu(_subtitle); + menu.AddMenuEntry(new GreetMenuEntry()); + menu.AddMenuEntry(new SubMenuEntry(_subtitle)); + menu.AddMenuEntry(new StopMenuEntry(menu, "Back", true)); + menu.Start(); + }; +} + +public sealed class SelectionMenuEntry : IMenuEntry +{ + public string Title => "Selection"; + public ConsoleKey[] Triggers => new[] {ConsoleKey.X}; + public bool ShowTriggerInTitle => true; + + readonly string _subtitle; + + public SelectionMenuEntry(string previous) + { + _subtitle = previous + " > " + Title; + } + + public Action Action => () => + { + var menu = new CliMenu(_subtitle); + menu.AddMenuEntry(new SelectableMenuEntry("Desperate", false)); + menu.AddMenuEntry(new SelectableMenuEntry("Devs", false)); + menu.AddMenuEntry(new SelectableMenuEntry("Console", false)); + menu.AddMenuEntry(new SelectableMenuEntry("Menu", false)); + menu.AddMenuEntry(new StopMenuEntry(menu, "Back", true)); + menu.Start(); + }; +} diff --git a/src/DesperateDevs.Cli.Utils/src/AbstractCommand.cs b/src/DesperateDevs.Cli.Utils/src/AbstractCommand.cs new file mode 100644 index 00000000..e74cc12f --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/AbstractCommand.cs @@ -0,0 +1,30 @@ +using System.Linq; + +namespace DesperateDevs.Cli.Utils +{ + public abstract class AbstractCommand : ICommand + { + public abstract string Trigger { get; } + public abstract string Description { get; } + public abstract string Group { get; } + public abstract string Example { get; } + + protected CliProgram _program; + protected string[] _rawArgs; + protected string[] _args; + + public virtual void Run(CliProgram program, string[] args) + { + _program = program; + _rawArgs = args; + _args = args + .WithoutTrigger() + .WithoutDefaultParameter() + .ToArray(); + + Run(); + } + + protected abstract void Run(); + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/ArgsExtension.cs b/src/DesperateDevs.Cli.Utils/src/ArgsExtension.cs new file mode 100644 index 00000000..53824434 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/ArgsExtension.cs @@ -0,0 +1,39 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; + +namespace DesperateDevs.Cli.Utils +{ + public static class ArgsExtension + { + static readonly HashSet DefaultParameter = new HashSet + { + "-v", + "-s", + "-d", + "-f", + "-y", + "-n" + }; + + public static bool IsVerbose(this string[] args) => HasParameter(args, "-v") || IsDebug(args); + public static bool IsSilent(this string[] args) => HasParameter(args, "-s"); + public static bool IsDebug(this string[] args) => HasParameter(args, "-d"); + + public static bool IsForce(this string[] args) => args.Any(arg => arg == "-f"); + + public static bool IsYes(this string[] args) => HasParameter(args, "-y"); + public static bool IsNo(this string[] args) => HasParameter(args, "-n"); + + public static bool HasParameter(this IEnumerable args, string parameter) => + args.Any(arg => arg == parameter); + + public static IEnumerable WithoutTrigger(this IEnumerable args) => + args.Skip(1); + + public static IEnumerable WithoutDefaultParameter(this IEnumerable args) => args.Except(DefaultParameter); + + public static IEnumerable WithoutParameter(this IEnumerable args) => + args.Where(arg => !arg.StartsWith("-", StringComparison.Ordinal)); + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/CliHelper.cs b/src/DesperateDevs.Cli.Utils/src/CliHelper.cs new file mode 100644 index 00000000..78c02cc3 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/CliHelper.cs @@ -0,0 +1,157 @@ +ο»Ώusing System; +using System.Linq; + +namespace DesperateDevs.Cli.Utils +{ + public static class CliHelper + { + public static ConsoleColors ConsoleColors; + + public static void WriteCentered(string value, bool centerEachLine) + { + WriteMultiLine(value, centerEachLine, (line, length) => + { + Console.SetCursorPosition(Math.Max(0, (Console.BufferWidth - length) / 2), Console.CursorTop); + Console.WriteLine(line); + }); + } + + public static void WriteCenteredHighlighted(string value, bool centerEachLine) + { + Console.BackgroundColor = ConsoleColors.HighlightedBackground; + Console.ForegroundColor = ConsoleColors.HighlightedForeground; + + WriteMultiLine(value, centerEachLine, (line, length) => + { + Console.SetCursorPosition(Math.Max(0, (Console.BufferWidth - length) / 2), Console.CursorTop); + Console.WriteLine(line); + }); + + Console.ResetColor(); + } + + public static void WriteCenteredHighlightedPadded(string value, bool centerEachLine) + { + Console.BackgroundColor = ConsoleColors.HighlightedBackground; + Console.ForegroundColor = ConsoleColors.HighlightedForeground; + + WriteMultiLine(value, centerEachLine, (line, length) => + { + var pad = Math.Max(0, (Console.BufferWidth - length) / 2); + Console.WriteLine(line.PadLeft(line.Length + pad).PadRight(Console.BufferWidth - Console.CursorLeft - 1)); + }); + + Console.ResetColor(); + } + + public static void WriteRight(string value, bool centerEachLine) + { + WriteMultiLine(value, centerEachLine, (line, length) => + { + Console.SetCursorPosition(Math.Max(0, Console.BufferWidth - length), Console.CursorTop); + Console.Write(line); + }); + } + + public static void WriteRightHighlighted(string value, bool centerEachLine) + { + Console.BackgroundColor = ConsoleColors.HighlightedBackground; + Console.ForegroundColor = ConsoleColors.HighlightedForeground; + + WriteMultiLine(value, centerEachLine, (line, length) => + { + Console.SetCursorPosition(Math.Max(0, Console.BufferWidth - length), Console.CursorTop); + Console.Write(line); + }); + + Console.ResetColor(); + } + + public static void WriteRightHighlightedPadded(string value, bool centerEachLine) + { + Console.BackgroundColor = ConsoleColors.HighlightedBackground; + Console.ForegroundColor = ConsoleColors.HighlightedForeground; + + WriteMultiLine(value, centerEachLine, (line, length) => + { + var pad = Math.Max(0, Console.BufferWidth - length); + Console.Write(line.PadLeft(length + pad)); + }); + + Console.ResetColor(); + } + + public static void WriteHighlighted(string value, bool padRight, int pad = -1) + { + Console.BackgroundColor = ConsoleColors.HighlightedBackground; + Console.ForegroundColor = ConsoleColors.HighlightedForeground; + + WriteMultiLine(value, true, (line, length) => Console.WriteLine(padRight + ? line.PadRight(pad == -1 ? (Console.BufferWidth - Console.CursorLeft) : pad) + : line)); + + Console.ResetColor(); + } + + static void WriteMultiLine(string value, bool lengthPerLine, Action logMethod) + { + var lines = value.Split('\n'); + if (lengthPerLine) + { + foreach (var line in lines) + logMethod(line, line.Length); + } + else + { + var longestLine = lines.Max(line => line.Length); + foreach (var line in lines) + logMethod(line, longestLine); + } + } + +// public static void TestWrite() +// { +// Console.Clear(); +// WriteCentered("xxx", false); +// WriteCentered("xxx", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteCentered("WriteCentered", false); +// WriteCentered("WriteCentered\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteCenteredHighlightedPadded("WriteCenteredHighlightedPadded", false); +// WriteCenteredHighlightedPadded("WriteCenteredHighlightedPadded\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteCenteredHighlighted("WriteCenteredHighlighted", false); +// WriteCenteredHighlighted("WriteCenteredHighlighted\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteRight("WriteRight", false); +// WriteRight("WriteRight\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteRightHighlightedPadded("WriteRightHighlightedPadded", false); +// WriteRightHighlightedPadded("WriteRightHighlightedPadded\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteRightHighlighted("WriteRightHighlighted", false); +// WriteRightHighlighted("WriteRightHighlighted\nper line", true); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// +// WriteHighlighted("WriteHighlighted", false); +// WriteHighlighted("WriteHighlighted\nPadded", true); +// WriteHighlighted("WriteHighlighted\nCustom Pad", true, 40); +// +// Console.WriteLine("--------------------------------------------------------------------------------"); +// } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/CliMenu.cs b/src/DesperateDevs.Cli.Utils/src/CliMenu.cs new file mode 100644 index 00000000..316c809d --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/CliMenu.cs @@ -0,0 +1,145 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; + +namespace DesperateDevs.Cli.Utils +{ + public class CliMenu + { + public string Title => _title; + public string Indent = string.Empty; + + readonly string _title; + readonly MenuSelection _selection; + readonly List _menuEntries; + + int _longestTitle; + bool _stopRequested; + + public CliMenu(string title) + { + _title = title; + _selection = new MenuSelection(); + _menuEntries = new List(); + } + + public void AddMenuEntry(IMenuEntry entry) => _menuEntries.Add(entry); + + public void Start() + { + _longestTitle = _menuEntries.Max(e => e.Title.Length) + Indent.Length; + _stopRequested = false; + while (!_stopRequested) + { + DrawMenu(); + ProcessInput(); + TryRunMenuEntry(); + } + + Console.Clear(); + } + + public void Stop() => _stopRequested = true; + + void DrawMenu() + { + Console.Clear(); + Console.WriteLine(_title); + + for (var i = 0; i < _menuEntries.Count; i++) + { + var entry = Indent; + var menuEntry = _menuEntries[i]; + if (menuEntry.ShowTriggerInTitle) + { + entry += menuEntry.Triggers != null + ? $"[{menuEntry.Triggers[0]}] " + : string.Empty; + } + + entry += menuEntry.Title; + + if (i == _selection.Index) + CliHelper.WriteHighlighted(entry, true, _longestTitle); + else + Console.WriteLine(entry); + } + } + + void ProcessInput() + { + var key = Console.ReadKey(true); + SelectionFromNavigation(key); + SelectionFromTrigger(key); + } + + void SelectionFromNavigation(ConsoleKeyInfo key) + { + switch (key.Key) + { + case ConsoleKey.DownArrow: + case ConsoleKey.RightArrow: + case ConsoleKey.J: + case ConsoleKey.L: + if (_selection.Index < _menuEntries.Count - 1) + { + _selection.Index += 1; + _selection.RunAction = false; + } + + break; + case ConsoleKey.UpArrow: + case ConsoleKey.LeftArrow: + case ConsoleKey.K: + case ConsoleKey.H: + if (_selection.Index > 0) + { + _selection.Index -= 1; + _selection.RunAction = false; + } + + break; + case ConsoleKey.Home: + case ConsoleKey.A: + _selection.Index = 0; + _selection.RunAction = false; + break; + case ConsoleKey.End: + case ConsoleKey.E: + _selection.Index = _menuEntries.Count - 1; + _selection.RunAction = false; + break; + case ConsoleKey.Enter: + case ConsoleKey.Spacebar: + _selection.RunAction = true; + break; + } + } + + void SelectionFromTrigger(ConsoleKeyInfo key) + { + for (var i = 0; i < _menuEntries.Count; i++) + { + var menuEntry = _menuEntries[i]; + if (menuEntry.Triggers != null) + { + if (menuEntry.Triggers.Any(trigger => trigger == key.Key)) + { + _selection.Index = i; + _selection.RunAction = true; + return; + } + } + } + } + + void TryRunMenuEntry() + { + if (_selection.RunAction) + { + _selection.RunAction = false; + _menuEntries[_selection.Index].Action(); + } + } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/CliProgram.cs b/src/DesperateDevs.Cli.Utils/src/CliProgram.cs new file mode 100644 index 00000000..91b4f8de --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/CliProgram.cs @@ -0,0 +1,131 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using DesperateDevs.Reflection; +using Sherlog; +using Sherlog.Formatters; + +namespace DesperateDevs.Cli.Utils +{ + public class CliProgram + { + readonly Logger _logger; + readonly Type _defaultCommand; + readonly string[] _args; + readonly ICommand[] _commands; + + public CliProgram(string applicationName, Type defaultCommand, string[] args, ConsoleColors consoleColors = null) + { + _logger = Logger.GetLogger(applicationName); + _defaultCommand = defaultCommand; + _args = args; + CliHelper.ConsoleColors = consoleColors ?? new ConsoleColors(); + Console.Title = $"{applicationName} {string.Join(" ", args)}"; + InitializeLogging(args, CliHelper.ConsoleColors); + _commands = LoadCommands(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)); + } + + public void Run() + { + if (_args?.WithoutParameter().Any() ?? false) + { + RunCommand(_args); + } + else + { + try + { + _commands + .Single(c => c.GetType() == _defaultCommand) + .Run(this, _args); + } + catch (Exception exception) + { + _logger.Error(_args.IsVerbose() ? exception.ToString() : exception.Message); + } + } + } + + ICommand[] LoadCommands(string dir) + { + _logger.Debug($"Loading assemblies from {dir}"); + using (AssemblyResolver.LoadAssemblies(false, dir)) + { + return AppDomain.CurrentDomain + .GetInstancesOf() + .OrderBy(c => c.Trigger) + .ToArray(); + } + } + + void RunCommand(string[] args) + { + try + { + GetCommand(args.WithoutDefaultParameter().First()).Run(this, args); + } + catch (Exception exception) + { + _logger.Error(args.IsVerbose() ? exception.ToString() : exception.Message); + _logger.Info("Use -v to enable verbose logging"); + } + } + + public ICommand GetCommand(string trigger) + { + var command = _commands.SingleOrDefault(c => c.Trigger == trigger); + if (command == null) + throw new Exception($"command not found: {trigger}"); + + return command; + } + + public int GetCommandListPad() => _commands.Length == 0 + ? 0 + : _commands.Max(c => c.Example?.Length ?? 0); + + public string GetFormattedCommandList() + { + var pad = GetCommandListPad(); + + var groupedCommands = _commands + .Where(c => c.Example != null) + .GroupBy(c => c.Group ?? string.Empty) + .OrderBy(group => group.Key); + + return string.Join("\n", groupedCommands.Select(group => + { + var groupHeader = group.Key == string.Empty ? string.Empty : group.Key + ":\n"; + var commandsInGroup = string.Join("\n", group + .Select(command => $" {command.Example.PadRight(pad)} {command.Description}")); + return $"{groupHeader}\n{commandsInGroup}\n"; + })); + } + + void InitializeLogging(string[] args, ConsoleColors consoleColors) + { + if (args.IsSilent()) Logger.GlobalLogLevel = LogLevel.Error; + else if (args.IsVerbose()) Logger.GlobalLogLevel = LogLevel.Debug; + else Logger.GlobalLogLevel = LogLevel.Info; + + var formatter = args.IsDebug() + ? (LogFormatter)new LogMessageFormatter().FormatMessage + : (_, _, message) => message; + + Logger.AddAppender((logger, logLevel, message) => + { + message = formatter(logger, logLevel, message); + if (consoleColors.LogLevelColors.TryGetValue(logLevel, out var color)) + { + Console.ForegroundColor = color; + Console.WriteLine(message); + Console.ResetColor(); + } + else + { + Console.WriteLine(message); + } + }); + } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/ConsoleColors.cs b/src/DesperateDevs.Cli.Utils/src/ConsoleColors.cs new file mode 100644 index 00000000..645dfe1b --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/ConsoleColors.cs @@ -0,0 +1,27 @@ +ο»Ώusing System; +using System.Collections.Generic; +using Sherlog; + +namespace DesperateDevs.Cli.Utils +{ + public class ConsoleColors + { + public ConsoleColor HighlightedBackground = ConsoleColor.White; + public ConsoleColor HighlightedForeground = ConsoleColor.Black; + + public readonly Dictionary LogLevelColors; + + public ConsoleColors() + { + LogLevelColors = new Dictionary + { + {LogLevel.Trace, ConsoleColor.Cyan}, + {LogLevel.Debug, ConsoleColor.White}, + {LogLevel.Info, ConsoleColor.White}, + {LogLevel.Warn, ConsoleColor.DarkYellow}, + {LogLevel.Error, ConsoleColor.Red}, + {LogLevel.Fatal, ConsoleColor.DarkRed} + }; + } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/DesperateDevs.Cli.Utils.csproj b/src/DesperateDevs.Cli.Utils/src/DesperateDevs.Cli.Utils.csproj new file mode 100644 index 00000000..594dae5d --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/DesperateDevs.Cli.Utils.csproj @@ -0,0 +1,14 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + + diff --git a/src/DesperateDevs.Cli.Utils/src/ExitMenuEntry.cs b/src/DesperateDevs.Cli.Utils/src/ExitMenuEntry.cs new file mode 100644 index 00000000..93a12935 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/ExitMenuEntry.cs @@ -0,0 +1,14 @@ +ο»Ώusing System; + +namespace DesperateDevs.Cli.Utils +{ + public sealed class ExitMenuEntry : MenuEntry + { + public ExitMenuEntry(string title, bool showTriggerInTitle) : base( + title, + new[] {ConsoleKey.Escape, ConsoleKey.Q}, + showTriggerInTitle, + () => Environment.Exit(0) + ) { } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/ICommand.cs b/src/DesperateDevs.Cli.Utils/src/ICommand.cs new file mode 100644 index 00000000..c7649cc1 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/ICommand.cs @@ -0,0 +1,12 @@ +ο»Ώnamespace DesperateDevs.Cli.Utils +{ + public interface ICommand + { + string Trigger { get; } + string Description { get; } + string Group { get; } + string Example { get; } + + void Run(CliProgram program, string[] args); + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/IMenuEntry.cs b/src/DesperateDevs.Cli.Utils/src/IMenuEntry.cs new file mode 100644 index 00000000..bae6a85d --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/IMenuEntry.cs @@ -0,0 +1,12 @@ +ο»Ώusing System; + +namespace DesperateDevs.Cli.Utils +{ + public interface IMenuEntry + { + string Title { get; } + ConsoleKey[] Triggers { get; } + bool ShowTriggerInTitle { get; } + Action Action { get; } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/MenuEntry.cs b/src/DesperateDevs.Cli.Utils/src/MenuEntry.cs new file mode 100644 index 00000000..ada8e88b --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/MenuEntry.cs @@ -0,0 +1,20 @@ +ο»Ώusing System; + +namespace DesperateDevs.Cli.Utils +{ + public class MenuEntry : IMenuEntry + { + public string Title { get; set; } + public ConsoleKey[] Triggers { get; set; } + public bool ShowTriggerInTitle { get; set; } + public Action Action { get; set; } + + public MenuEntry(string title, ConsoleKey[] triggers, bool showTriggerInTitle, Action action) + { + Title = title; + Triggers = triggers; + ShowTriggerInTitle = showTriggerInTitle; + Action = action; + } + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/MenuSelection.cs b/src/DesperateDevs.Cli.Utils/src/MenuSelection.cs new file mode 100644 index 00000000..86750c00 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/MenuSelection.cs @@ -0,0 +1,8 @@ +ο»Ώnamespace DesperateDevs.Cli.Utils +{ + public sealed class MenuSelection + { + public int Index; + public bool RunAction; + } +} diff --git a/src/DesperateDevs.Cli.Utils/src/SelectableMenuEntry.cs b/src/DesperateDevs.Cli.Utils/src/SelectableMenuEntry.cs new file mode 100644 index 00000000..66ab6b28 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/SelectableMenuEntry.cs @@ -0,0 +1,38 @@ +ο»Ώusing System; + +namespace DesperateDevs.Cli.Utils +{ + public class SelectableMenuEntry : MenuEntry + { + public bool IsSelected + { + get => _isSelected; + set + { + if (value != _isSelected) + { + _isSelected = value; + UpdateTitle(); + _onSelected?.Invoke(_isSelected); + } + } + } + + readonly string _title; + bool _isSelected; + readonly Action _onSelected; + + public SelectableMenuEntry(string title, bool isSelected, Action onSelected = null) : + base(title, null, false, null) + { + _title = title; + _isSelected = isSelected; + UpdateTitle(); + _onSelected = onSelected; + Action = ToggleSelected; + } + + void ToggleSelected() => IsSelected = !IsSelected; + void UpdateTitle() => Title = (_isSelected ? "[x] " : "[ ] ") + _title; + } +} diff --git a/src/DesperateDevs.CLI.Utils/src/Spinner.cs b/src/DesperateDevs.Cli.Utils/src/Spinner.cs similarity index 83% rename from src/DesperateDevs.CLI.Utils/src/Spinner.cs rename to src/DesperateDevs.Cli.Utils/src/Spinner.cs index 86e533ab..6e51e0cb 100644 --- a/src/DesperateDevs.CLI.Utils/src/Spinner.cs +++ b/src/DesperateDevs.Cli.Utils/src/Spinner.cs @@ -1,7 +1,7 @@ ο»Ώusing System; using System.Threading; -namespace DesperateDevs.CLI.Utils +namespace DesperateDevs.Cli.Utils { public class Spinner { @@ -11,7 +11,7 @@ public class Spinner int _index; string _appendix; - public Spinner(SpinnerStyle style) : this(style.interval, style.frames) { } + public Spinner(SpinnerStyle style) : this(style.Interval, style.Frames) { } public Spinner(int interval, params string[] frames) { @@ -24,13 +24,11 @@ public string Next() { if (_index >= _frames.Length) _index = 0; + return _frames[_index++]; } - public void Append(string text) - { - _appendix = text; - } + public void Append(string text) => _appendix = text; public void Write(int left, int top) { diff --git a/src/DesperateDevs.CLI.Utils/src/SpinnerStyles.cs b/src/DesperateDevs.Cli.Utils/src/SpinnerStyles.cs similarity index 78% rename from src/DesperateDevs.CLI.Utils/src/SpinnerStyles.cs rename to src/DesperateDevs.Cli.Utils/src/SpinnerStyles.cs index f55d8eb0..4ce9df55 100644 --- a/src/DesperateDevs.CLI.Utils/src/SpinnerStyles.cs +++ b/src/DesperateDevs.Cli.Utils/src/SpinnerStyles.cs @@ -1,19 +1,21 @@ -ο»Ώnamespace DesperateDevs.CLI.Utils +ο»Ώnamespace DesperateDevs.Cli.Utils { // More Styles: https://raw.githubusercontent.com/sindresorhus/cli-spinners/master/spinners.json // Preview: https://cdn.rawgit.com/sindresorhus/cli-spinners/dcac74b75e52d4d9fe980e6fce98c2814275739e/screenshot.svg public class SpinnerStyle { - public int interval; - public string[] frames; + public int Interval; + public string[] Frames; } public static class SpinnerStyles { - public static SpinnerStyle magnifyingGlass => new SpinnerStyle { - interval = 100, - frames = new[] { + public static SpinnerStyle MagnifyingGlass => new SpinnerStyle + { + Interval = 100, + Frames = new[] + { "πŸ” ", " πŸ” ", " πŸ” ", @@ -23,9 +25,11 @@ public static class SpinnerStyles } }; - public static SpinnerStyle bouncingBar => new SpinnerStyle { - interval = 80, - frames = new[] { + public static SpinnerStyle BouncingBar => new SpinnerStyle + { + Interval = 80, + Frames = new[] + { "[ ]", "[= ]", "[== ]", @@ -44,9 +48,11 @@ public static class SpinnerStyles } }; - public static SpinnerStyle bouncingBall => new SpinnerStyle { - interval = 80, - frames = new[] { + public static SpinnerStyle BouncingBall => new SpinnerStyle + { + Interval = 80, + Frames = new[] + { "( ● )", "( ● )", "( ● )", @@ -60,9 +66,11 @@ public static class SpinnerStyles } }; - public static SpinnerStyle clock => new SpinnerStyle { - interval = 100, - frames = new[] { + public static SpinnerStyle Clock => new SpinnerStyle + { + Interval = 100, + Frames = new[] + { "πŸ•› ", "πŸ• ", "πŸ•‘ ", @@ -78,9 +86,11 @@ public static class SpinnerStyles } }; - public static SpinnerStyle magicCat => new SpinnerStyle { - interval = 120, - frames = new[] { + public static SpinnerStyle MagicCat => new SpinnerStyle + { + Interval = 120, + Frames = new[] + { " ∧_∧\n" + " (qο½₯Ο‰ο½₯q)γ€β”β˜† \n" + " βŠ‚γ€€ γƒŽ \n" + diff --git a/src/DesperateDevs.Cli.Utils/src/StopMenuEntry.cs b/src/DesperateDevs.Cli.Utils/src/StopMenuEntry.cs new file mode 100644 index 00000000..36f1ce2d --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/src/StopMenuEntry.cs @@ -0,0 +1,15 @@ +ο»Ώusing System; + +namespace DesperateDevs.Cli.Utils +{ + public sealed class StopMenuEntry : MenuEntry + { + public StopMenuEntry(CliMenu menu, string title, bool showTriggerInTitle) : + base( + title, + new[] {ConsoleKey.Escape, ConsoleKey.Q}, + showTriggerInTitle, + menu.Stop + ) { } + } +} diff --git a/src/DesperateDevs.Cli.Utils/tests/ArgsExtensionTests.cs b/src/DesperateDevs.Cli.Utils/tests/ArgsExtensionTests.cs new file mode 100644 index 00000000..5a27e954 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/tests/ArgsExtensionTests.cs @@ -0,0 +1,70 @@ +ο»Ώusing System; +using System.Linq; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Cli.Utils.Tests +{ + public class ArgsExtensionTests + { + static void AssertArg(string parameter, Func method) + { + method(new[] {"value"}).Should().BeFalse(); + method(new[] {"value", parameter}).Should().BeTrue(); + } + + [Fact] + public void IsVerbose() => AssertArg("-v", ArgsExtension.IsVerbose); + + [Fact] + public void IsSilent() => AssertArg("-s", ArgsExtension.IsSilent); + + [Fact] + public void IsDebug() => AssertArg("-d", ArgsExtension.IsDebug); + + [Fact] + public void IsDebugSetsIsVerbose() => AssertArg("-d", ArgsExtension.IsVerbose); + + [Fact] + public void IsForce() => AssertArg("-f", ArgsExtension.IsForce); + + [Fact] + public void IsYes() => AssertArg("-y", ArgsExtension.IsYes); + + [Fact] + public void IsNo() => AssertArg("-n", ArgsExtension.IsNo); + + [Fact] + public void FiltersDefaultParameter() + { + var filtered = new[] {"-v", "-s", "-d", "-f", "-y", "-n", "value"}.WithoutDefaultParameter().ToArray(); + filtered.Should().HaveCount(1); + filtered.Should().Contain("value"); + } + + [Fact] + public void KeepsCustomParameter() + { + var filtered = new[] {"-v", "-s", "-d", "-g"}.WithoutDefaultParameter().ToArray(); + filtered.Should().HaveCount(1); + filtered.Should().Contain("-g"); + } + + [Fact] + public void FiltersAllParameter() + { + var filtered = new[] {"-v", "-s", "-d", "-x", "-y", "value"}.WithoutParameter().ToArray(); + filtered.Should().HaveCount(1); + filtered.Should().Contain("value"); + } + + [Fact] + public void FiltersTrigger() + { + var filtered = new[] {"value1", "-p", "value2"}.WithoutTrigger().ToArray(); + filtered.Should().HaveCount(2); + filtered.Should().Contain("-p"); + filtered.Should().Contain("value2"); + } + } +} diff --git a/src/DesperateDevs.Cli.Utils/tests/DesperateDevs.Cli.Utils.Tests.csproj b/src/DesperateDevs.Cli.Utils/tests/DesperateDevs.Cli.Utils.Tests.csproj new file mode 100644 index 00000000..f51582a5 --- /dev/null +++ b/src/DesperateDevs.Cli.Utils/tests/DesperateDevs.Cli.Utils.Tests.csproj @@ -0,0 +1,22 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import deleted file mode 100755 index 24d2415d..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -dir="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)" -cd $dir -mono ./Jenny/Jenny.exe auto-import -s -mono ./Jenny/Jenny.exe doctor -$SHELL diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import.bat b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import.bat deleted file mode 100644 index 68cd0980..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Auto-Import.bat +++ /dev/null @@ -1,5 +0,0 @@ -pushd %~dp0 -.\Jenny\Jenny.exe auto-import -s -.\Jenny\Jenny.exe doctor -pause -popd diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server deleted file mode 100755 index 4cacc033..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -dir="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)" -cd $dir -mono ./Jenny/Jenny.exe server diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server.bat b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server.bat deleted file mode 100644 index eede6690..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/scripts/Jenny-Server.bat +++ /dev/null @@ -1,3 +0,0 @@ -pushd %~dp0 -.\Jenny\Jenny.exe server -popd diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/AutoImportCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/AutoImportCommand.cs deleted file mode 100644 index 008dc9bb..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/AutoImportCommand.cs +++ /dev/null @@ -1,32 +0,0 @@ -ο»Ώusing DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class AutoImportCommand : AbstractPreferencesCommand - { - public override string trigger => "auto-import"; - public override string description => "Find and import all plugins"; - public override string group => CommandGroups.PLUGINS; - public override string example => "auto-import"; - - public AutoImportCommand() : base(typeof(AutoImportCommand).FullName) - { - } - - protected override void run() - { - _logger.Debug(_preferences.ToString()); - autoImport(); - new FixCommand().Run(_program, _rawArgs); - } - - void autoImport() - { - var config = _preferences.CreateAndConfigure(); - var searchPaths = CodeGeneratorUtil.BuildSearchPaths(config.searchPaths, new[] { "." }); - CodeGeneratorUtil.AutoImport(config, searchPaths); - _preferences.Save(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ClientCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ClientCommand.cs deleted file mode 100644 index 4666f4a8..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ClientCommand.cs +++ /dev/null @@ -1,56 +0,0 @@ -ο»Ώusing System; -using System.Linq; -using System.Net.Sockets; -using System.Text; -using DesperateDevs.Networking; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class ClientCommand : AbstractPreferencesCommand - { - public override string trigger => "client"; - public override string description => "Start client mode"; - public override string group => CommandGroups.CODE_GENERATION; - public override string example => "client [command]"; - - string _command; - - public ClientCommand() : base(typeof(ClientCommand).FullName) - { - } - - protected override void run() - { - _command = string.Join(" ", _rawArgs.Skip(1).ToArray()); - - var config = _preferences.CreateAndConfigure(); - var client = new TcpClientSocket(); - client.OnConnected += onConnected; - client.OnReceived += onReceived; - client.OnDisconnected += onDisconnected; - client.Connect(config.host.ResolveHost(), config.port); - - while (true) - { - } - } - - void onConnected(TcpClientSocket client) - { - client.Send(Encoding.UTF8.GetBytes(_command)); - } - - void onReceived(AbstractTcpSocket socket, Socket client, byte[] bytes) - { - _logger.Info(Encoding.UTF8.GetString(bytes)); - socket.Disconnect(); - } - - void onDisconnected(AbstractTcpSocket socket) - { - Environment.Exit(0); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/CommandGroups.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/CommandGroups.cs deleted file mode 100644 index 843ba667..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/CommandGroups.cs +++ /dev/null @@ -1,8 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public static class CommandGroups - { - public const string PLUGINS = "Plugins"; - public const string CODE_GENERATION = "Code Generation"; - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DoctorCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DoctorCommand.cs deleted file mode 100644 index df594bef..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DoctorCommand.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Linq; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class DoctorCommand : AbstractPreferencesCommand - { - public override string trigger => "doctor"; - public override string description => "Check the config for potential problems"; - public override string group => CommandGroups.PLUGINS; - public override string example => "doctor"; - - public DoctorCommand() : base(typeof(DoctorCommand).FullName) - { - } - - protected override void run() - { - new StatusCommand().Run(_program, _rawArgs); - - diagnose(); - - _logger.Info("Dry Run"); - CodeGeneratorUtil - .CodeGeneratorFromPreferences(_preferences) - .DryRun(); - - _logger.Info("πŸ‘¨β€πŸ”¬ No problems detected. Happy coding :)"); - } - - void diagnose() - { - var doctors = AppDomain.CurrentDomain.GetInstancesOf(); - foreach (var doctor in doctors.OfType()) - { - doctor.Configure(_preferences); - } - - var diagnoses = doctors - .Select(doctor => doctor.Diagnose()) - .ToArray(); - - foreach (var diagnosis in diagnoses.Where(d => d.severity == DiagnosisSeverity.Hint)) - { - _logger.Info("πŸ‘¨β€βš•οΈ Symptoms: " + diagnosis.symptoms); - _logger.Info("πŸ’Š Treatment: " + diagnosis.treatment); - } - - foreach (var diagnosis in diagnoses.Where(d => d.severity == DiagnosisSeverity.Warning)) - { - _logger.Warn("πŸ‘¨β€βš•οΈ Symptoms: " + diagnosis.symptoms); - _logger.Warn("πŸ’Š Treatment: " + diagnosis.treatment); - } - - var errors = string.Join("\n", diagnoses - .Where(d => d.severity == DiagnosisSeverity.Error) - .Select(d => "πŸ‘¨β€βš•οΈ Symptoms: " + d.symptoms + "\nπŸ’Š Treatment: " + d.treatment) - .ToArray()); - - if (!string.IsNullOrEmpty(errors)) - { - errors += "\nUse 'jenny fix' to apply treatments"; - throw new Exception(errors); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DonateCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DonateCommand.cs deleted file mode 100644 index 296ffb63..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DonateCommand.cs +++ /dev/null @@ -1,44 +0,0 @@ -ο»Ώusing DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class DonateCommand : AbstractCommand - { - public override string trigger => "donate"; - public override string description => null; - public override string group => null; - public override string example => null; - - protected override void run() - { - const string heart = @" - @@@@@@@@ @@@@@@@@ - @@@@@@@@@@@@ @@@@@@@@@@@@ - @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@ - @@@@@@@@@@@ - @@@@@@@ - @@@@ - @@ -"; - - fabl.GetLogger(typeof(DonateCommand)).Error(heart); - - System.Diagnostics.Process.Start("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BTMLSDQULZ852"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DryRunCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DryRunCommand.cs deleted file mode 100644 index 61ab7e79..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/DryRunCommand.cs +++ /dev/null @@ -1,28 +0,0 @@ -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class DryRunCommand : AbstractPreferencesCommand - { - public override string trigger => "dry"; - public override string description => "Run the code generator in dry mode"; - public override string group => CommandGroups.CODE_GENERATION; - public override string example => "dry"; - - public DryRunCommand() : base(typeof(DryRunCommand).FullName) - { - } - - protected override void run() - { - var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(_preferences); - - codeGenerator.OnProgress += (title, info, progress) => - { - var p = (int)(progress * 100); - _logger.Debug($"{title}: {info} ({p}%)"); - }; - codeGenerator.DryRun(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/FixCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/FixCommand.cs deleted file mode 100644 index e976ed44..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/FixCommand.cs +++ /dev/null @@ -1,438 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class FixCommand : AbstractPreferencesCommand - { - public override string trigger => "fix"; - public override string description => "Add missing keys and add available or remove unavailable plugins interactively"; - public override string group => CommandGroups.PLUGINS; - public override string example => "fix"; - - static bool silent; - - public FixCommand() : base(typeof(FixCommand).FullName) - { - } - - protected override void run() - { - silent = _rawArgs.IsSilent(); - - var config = _preferences.CreateAndConfigure(); - forceAddMissingKeys(config.defaultProperties, _preferences); - - var instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); - // A test to check if all types can be resolved and instantiated. - CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.preProcessors); - CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.dataProviders); - CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.codeGenerators); - CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.postProcessors); - - var askedRemoveKeys = new HashSet(); - var askedAddKeys = new HashSet(); - while (fix(askedRemoveKeys, askedAddKeys, instances, config, _preferences)) - { - } - - runDoctors(); - fixSearchPath(instances, config, _preferences); - } - - void runDoctors() - { - var doctors = AppDomain.CurrentDomain.GetInstancesOf(); - foreach (var doctor in doctors.OfType()) - { - doctor.Configure(_preferences); - } - - foreach (var doctor in doctors) - { - var diagnosis = doctor.Diagnose(); - if (diagnosis.severity == DiagnosisSeverity.Error) - { - if (silent) - { - if (doctor.Fix()) - { - _preferences.Save(); - _logger.Info("πŸ’‰ Applied fix: " + diagnosis.treatment); - } - } - else - { - Console.WriteLine("πŸ’‰ Apply fix: " + diagnosis.treatment); - Console.WriteLine("to treat symptoms: " + diagnosis.symptoms + " ? (y / n)"); - if (PreferencesExtension.GetUserDecision()) - { - if (doctor.Fix()) - { - _preferences.Save(); - } - } - } - } - } - } - - void fixSearchPath(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) - { - var requiredSearchPaths = instances - .Select(instance => Path.GetDirectoryName(instance.GetType().Assembly.CodeBase.MakePathRelativeTo(Directory.GetCurrentDirectory()))) - .Distinct() - .Select(Path.GetFullPath) - .OrderBy(path => path) - .ToArray(); - - var unusedPaths = config.searchPaths - .Where(path => !requiredSearchPaths.Contains(Path.GetFullPath(path))); - - foreach (var path in unusedPaths) - { - if (silent) - { - preferences.RemoveValue(path, config.searchPaths, - values => config.searchPaths = values); - } - else - { - preferences.AskRemoveValue("Remove unused search path", path, config.searchPaths, - values => config.searchPaths = values); - } - } - - config.searchPaths = config.searchPaths.Distinct().ToArray(); - preferences.Save(); - } - - static void forceAddMissingKeys(Dictionary requiredProperties, Preferences preferences) - { - var requiredKeys = requiredProperties.Keys.ToArray(); - var missingKeys = preferences.GetMissingKeys(requiredKeys); - - foreach (var key in missingKeys) - { - if (silent) - preferences.AddKey(key, requiredProperties[key]); - else - preferences.NotifyForceAddKey("Will add missing key", key, requiredProperties[key]); - } - } - - bool fix(HashSet askedRemoveKeys, HashSet askedAddKeys, ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) - { - var changed = fixPlugins(askedRemoveKeys, askedAddKeys, instances, config, preferences); - changed |= fixCollisions(askedAddKeys, config, preferences); - - forceAddMissingKeys(CodeGeneratorUtil.GetDefaultProperties(instances, config), preferences); - - var requiredKeys = config.defaultProperties - .Merge(CodeGeneratorUtil.GetDefaultProperties(instances, config)) - .Keys - .ToArray(); - - removeUnusedKeys(askedRemoveKeys, requiredKeys, preferences); - - return changed; - } - - static bool fixPlugins(HashSet askedRemoveKeys, HashSet askedAddKeys, ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) - { - var changed = false; - - var unavailablePreProcessors = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.preProcessors); - var unavailableDataProviders = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.dataProviders); - var unavailableCodeGenerators = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.codeGenerators); - var unavailablePostProcessors = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.postProcessors); - - var availablePreProcessors = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.preProcessors); - var availableDataProviders = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.dataProviders); - var availableCodeGenerators = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.codeGenerators); - var availablePostProcessors = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.postProcessors); - - foreach (var value in unavailablePreProcessors) - { - if (!askedRemoveKeys.Contains(value)) - { - if (silent) - { - preferences.RemoveValue(value, config.preProcessors, - values => config.preProcessors = values); - } - else - { - preferences.AskRemoveValue("Remove unavailable pre processor", value, config.preProcessors, - values => config.preProcessors = values); - } - askedRemoveKeys.Add(value); - changed = true; - } - } - - foreach (var value in unavailableDataProviders) - { - if (!askedRemoveKeys.Contains(value)) - { - if (silent) - { - preferences.RemoveValue(value, config.dataProviders, - values => config.dataProviders = values); - } - else - { - preferences.AskRemoveValue("Remove unavailable data provider", value, config.dataProviders, - values => config.dataProviders = values); - } - - askedRemoveKeys.Add(value); - changed = true; - } - } - - foreach (var value in unavailableCodeGenerators) - { - if (!askedRemoveKeys.Contains(value)) - { - if (silent) - { - preferences.RemoveValue(value, config.codeGenerators, - values => config.codeGenerators = values); - } - else - { - preferences.AskRemoveValue("Remove unavailable code generator", value, config.codeGenerators, - values => config.codeGenerators = values); - } - - askedRemoveKeys.Add(value); - changed = true; - } - } - - foreach (var value in unavailablePostProcessors) - { - if (!askedRemoveKeys.Contains(value)) - { - if (silent) - { - preferences.RemoveValue(value, config.postProcessors, - values => config.postProcessors = values); - } - else - { - preferences.AskRemoveValue("Remove unavailable post processor", value, config.postProcessors, - values => config.postProcessors = values); - } - askedRemoveKeys.Add(value); - changed = true; - } - } - - foreach (var value in availablePreProcessors) - { - if (!askedAddKeys.Contains(value)) - { - if (silent) - { - preferences.AddValue(value, config.preProcessors, - values => config.preProcessors = values); - } - else - { - preferences.AskAddValue("Add available pre processor", value, config.preProcessors, - values => config.preProcessors = values); - } - askedAddKeys.Add(value); - changed = true; - } - } - - foreach (var value in availableDataProviders) - { - if (!askedAddKeys.Contains(value)) - { - if (silent) - { - preferences.AddValue(value, config.dataProviders, - values => config.dataProviders = values); - } - else - { - preferences.AskAddValue("Add available data provider", value, config.dataProviders, - values => config.dataProviders = values); - } - askedAddKeys.Add(value); - changed = true; - } - } - - foreach (var value in availableCodeGenerators) - { - if (!askedAddKeys.Contains(value)) - { - if (silent) - { - preferences.AddValue(value, config.codeGenerators, - values => config.codeGenerators = values); - } - else - { - preferences.AskAddValue("Add available code generator", value, config.codeGenerators, - values => config.codeGenerators = values); - } - askedAddKeys.Add(value); - changed = true; - } - } - - foreach (var value in availablePostProcessors) - { - if (!askedAddKeys.Contains(value)) - { - if (silent) - { - preferences.AddValue(value, config.postProcessors, - values => config.postProcessors = values); - } - else - { - preferences.AskAddValue("Add available post processor", value, config.postProcessors, - values => config.postProcessors = values); - } - askedAddKeys.Add(value); - changed = true; - } - } - - return changed; - } - - bool fixCollisions(HashSet askedAddKeys, CodeGeneratorConfig config, Preferences preferences) - { - var changed = fixDuplicates(askedAddKeys, config.preProcessors, values => - { - config.preProcessors = values; - return config.preProcessors; - }, preferences); - - changed = fixDuplicates(askedAddKeys, config.dataProviders, values => - { - config.dataProviders = values; - return config.dataProviders; - }, preferences) | changed; - - changed = fixDuplicates(askedAddKeys, config.codeGenerators, values => - { - config.codeGenerators = values; - return config.codeGenerators; - }, preferences) | changed; - - return fixDuplicates(askedAddKeys, config.postProcessors, values => - { - config.postProcessors = values; - return config.postProcessors; - }, preferences) | changed; - } - - bool fixDuplicates(HashSet askedAddKeys, string[] values, Func updateAction, Preferences preferences) - { - var changed = false; - var duplicates = getDuplicates(values); - - foreach (var duplicate in duplicates) - { - Console.WriteLine("⚠️ Potential plugin collision: " + duplicate); - Console.WriteLine("0: Keep all (no changes)"); - - var collisions = values - .Where(name => name.EndsWith(duplicate)) - .ToArray(); - - printCollisions(collisions); - var inputChars = getInputChars(collisions); - var keyChar = PreferencesExtension.GetGenericUserDecision(inputChars); - if (keyChar != '0') - { - var index = int.Parse(keyChar.ToString()) - 1; - var keep = collisions[index]; - - foreach (var collision in collisions) - { - if (collision != keep) - { - preferences.RemoveValue( - collision, - values, - result => values = updateAction(result)); - askedAddKeys.Add(collision); - changed = true; - } - } - } - } - - return changed; - } - - static string[] getDuplicates(string[] values) - { - var shortNames = values - .Select(name => name.ShortTypeName()) - .ToArray(); - - return values - .Where(name => shortNames.Count(n => n == name.ShortTypeName()) > 1) - .Select(name => name.ShortTypeName()) - .Distinct() - .OrderBy(name => name.ShortTypeName()) - .ToArray(); - } - - void printCollisions(string[] collisions) - { - for (int i = 0; i < collisions.Length; i++) - { - Console.WriteLine((i + 1) + ": Keep " + collisions[i]); - } - } - - static char[] getInputChars(string[] collisions) - { - var chars = new char[collisions.Length + 1]; - for (int i = 0; i < collisions.Length; i++) - { - chars[i] = (i + 1).ToString()[0]; - } - chars[chars.Length - 1] = '0'; - return chars; - } - - static void removeUnusedKeys(HashSet askedRemoveKeys, string[] requiredKeys, Preferences preferences) - { - var unusedKeys = preferences.GetUnusedKeys(requiredKeys); - foreach (var key in unusedKeys) - { - if (!askedRemoveKeys.Contains(key)) - { - if (silent) - { - preferences.RemoveKey(key); - } - else - { - preferences.AskRemoveKey("Remove unused key", key); - } - askedRemoveKeys.Add(key); - } - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/GenerateCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/GenerateCommand.cs deleted file mode 100644 index 52caeeba..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/GenerateCommand.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Diagnostics; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class GenerateCommand : AbstractPreferencesCommand - { - public override string trigger => "gen"; - public override string description => "Generate files based on properties file"; - public override string group => CommandGroups.CODE_GENERATION; - public override string example => "gen"; - - public GenerateCommand() : base(typeof(GenerateCommand).FullName) - { - } - - protected override void run() - { - _logger.Info("Generating using " + _preferences.propertiesPath); - - var watch = new Stopwatch(); - watch.Start(); - - var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(_preferences); - - codeGenerator.OnProgress += (title, info, progress) => - { - var p = (int)(progress * 100); - _logger.Debug($"{title}: {info} ({p}%)"); - }; - - var files = codeGenerator.Generate(); - - watch.Stop(); - - _logger.Info("[" + DateTime.Now.ToLongTimeString() + "]" + " Generated " + files.Length + " files in " + (watch.ElapsedMilliseconds / 1000f).ToString("0.0") + " seconds"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/HelpCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/HelpCommand.cs deleted file mode 100644 index 631cffb2..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/HelpCommand.cs +++ /dev/null @@ -1,43 +0,0 @@ -ο»Ώusing System; -using DesperateDevs.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class HelpCommand : AbstractCommand - { - public override string trigger => "help"; - public override string description => "Show help"; - public override string group => null; - public override string example => "help"; - - protected override void run() - { - var pad = _program.GetCommandListPad(); - var commandList = _program.GetFormattedCommandList(); - - var args = "[-v]".PadRight(pad) + " - verbose output\n" + - "[-s]".PadRight(pad) + " - silent (minimal output)"; - - const string menu = "Menus\n\n" + - " Down, Right, j, l - Select next\n" + - " Up, Left, k, h - Select previous\n" + - " Home, a - Select first\n" + - " End, e - Select last\n" + - " Enter, Space - Run selected menu entry"; - - var examples = "Jenny automatically uses " + CodeGenerator.defaultPropertiesPath + " and .userproperties\n" + - "when no properties files are specified along with the command.\n\n" + - "EXAMPLE\n" + - " jenny new Jenny.properties\n" + - " jenny auto-import -s\n" + - " jenny doctor\n" + - " jenny edit\n" + - " jenny fix\n" + - " jenny gen\n" + - " jenny gen Other.properties\n" + - " jenny gen Other.properties Other.userproperties"; - - Console.WriteLine("usage:\n" + commandList + "\n" + args + "\n\n" + menu + "\n\n" + examples); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ScanCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ScanCommand.cs deleted file mode 100644 index e710f81d..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ScanCommand.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Linq; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class ScanCommand : AbstractPreferencesCommand - { - public override string trigger => "scan"; - public override string description => "Scan and print available types found in specified plugins"; - public override string group => CommandGroups.PLUGINS; - public override string example => "scan"; - - public ScanCommand() : base(typeof(ScanCommand).FullName) - { - } - - protected override void run() - { - var instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); - - var orderedTypes = instances - .Select(instance => instance.GetType()) - .OrderBy(type => type.Assembly.GetName().Name) - .ThenBy(type => type.FullName); - - foreach (var type in orderedTypes) - { - _logger.Info(type.Assembly.GetName().Name + ": " + type); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ServerCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ServerCommand.cs deleted file mode 100644 index ea3a96d6..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/ServerCommand.cs +++ /dev/null @@ -1,100 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Sockets; -using System.Text; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; -using DesperateDevs.Networking; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class ServerCommand : AbstractPreferencesCommand - { - public override string trigger => "server"; - public override string description => "Start server mode"; - public override string group => CommandGroups.CODE_GENERATION; - public override string example => "server"; - - AbstractTcpSocket _socket; - readonly List _logBuffer = new List(); - - public ServerCommand() : base(typeof(ServerCommand).FullName) - { - } - - protected override void run() - { - var config = _preferences.CreateAndConfigure(); - var server = new TcpServerSocket(); - _socket = server; - server.OnReceived += onReceived; - server.Listen(config.port); - Console.CancelKeyPress += onCancel; - while (true) - { - server.Send(Encoding.UTF8.GetBytes(Console.ReadLine())); - } - } - - void onReceived(AbstractTcpSocket socket, Socket client, byte[] bytes) - { - var message = Encoding.UTF8.GetString(bytes); - _logger.Info(message); - - var args = getArgsFromMessage(message); - - try - { - if (args[0] == trigger) - { - throw new Exception("Server is already running!"); - } - var command = _program.GetCommand(args.WithoutDefaultParameter()[0]); - fabl.AddAppender(onLog); - command.Run(_program, args); - fabl.RemoveAppender(onLog); - var logBufferString = getLogBufferString(); - var sendBytes = logBufferString.Length == 0 - ? new byte[] { 0 } - : Encoding.UTF8.GetBytes(logBufferString); - socket.Send(sendBytes); - } - catch (Exception ex) - { - _logger.Error(args.IsVerbose() - ? ex.ToString() - : ex.Message); - - socket.Send(Encoding.UTF8.GetBytes(getLogBufferString() + ex.Message)); - } - - _logBuffer.Clear(); - } - - string[] getArgsFromMessage(string command) - { - return command - .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) - .Select(value => value.Trim()) - .ToArray(); - } - - void onCancel(object sender, ConsoleCancelEventArgs e) - { - _socket.Disconnect(); - } - - string getLogBufferString() - { - return string.Join("\n", _logBuffer.ToArray()); - } - - void onLog(Logger logger, LogLevel loglevel, string message) - { - _logBuffer.Add(message); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/StatusCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/StatusCommand.cs deleted file mode 100644 index 124d82fb..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/StatusCommand.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class StatusCommand : AbstractPreferencesCommand - { - public override string trigger => "status"; - public override string description => "List available and unavailable plugins"; - public override string group => CommandGroups.PLUGINS; - public override string example => "status"; - - public StatusCommand() : base(typeof(StatusCommand).FullName) - { - } - - protected override void run() - { - var config = _preferences.CreateAndConfigure(); - - _logger.Debug(_preferences.ToString()); - - ICodeGenerationPlugin[] instances = null; - Dictionary defaultProperties = null; - - try - { - instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); - defaultProperties = CodeGeneratorUtil.GetDefaultProperties(instances, config); - } - catch (Exception) - { - printKeyStatus( - config.defaultProperties.Keys.ToArray(), - _preferences); - throw; - } - - var requiredKeys = config.defaultProperties - .Merge(defaultProperties).Keys.ToArray(); - - printKeyStatus(requiredKeys, _preferences); - printPluginStatus(instances, config); - printCollisions(config); - } - - void printKeyStatus(string[] requiredKeys, Preferences preferences) - { - var unusedKeys = preferences.GetUnusedKeys(requiredKeys); - foreach (var key in unusedKeys) - { - _logger.Info("ℹ️️ Unused key: " + key); - } - - foreach (var key in preferences.GetMissingKeys(requiredKeys)) - { - _logger.Warn("⚠️ Missing key: " + key); - } - } - - void printPluginStatus(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config) - { - printUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.preProcessors)); - printUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.dataProviders)); - printUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.codeGenerators)); - printUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.postProcessors)); - - printAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.preProcessors)); - printAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.dataProviders)); - printAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.codeGenerators)); - printAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.postProcessors)); - } - - void printUnavailable(string[] names) - { - foreach (var name in names) - { - _logger.Warn("⚠️ Unavailable: " + name); - } - } - - void printAvailable(string[] names) - { - foreach (var name in names) - { - _logger.Info("ℹ️ Available: " + name); - } - } - - void printCollisions(CodeGeneratorConfig config) - { - printDuplicates(config.preProcessors); - printDuplicates(config.dataProviders); - printDuplicates(config.codeGenerators); - printDuplicates(config.postProcessors); - } - - void printDuplicates(string[] names) - { - var shortNames = names - .Select(name => name.ShortTypeName()) - .ToArray(); - - var duplicates = names - .Where(name => shortNames.Count(n => n == name.ShortTypeName()) > 1) - .OrderBy(name => name.ShortTypeName()); - - foreach (var duplicate in duplicates) - { - _logger.Warn("⚠️ Potential collision detected: " + duplicate.ShortTypeName() + " -> " + duplicate); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/MenuEntries/EditMenuEntry.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/MenuEntries/EditMenuEntry.cs deleted file mode 100644 index 3dd883a5..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/MenuEntries/EditMenuEntry.cs +++ /dev/null @@ -1,18 +0,0 @@ -ο»Ώusing DesperateDevs.CLI.Utils; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class EditMenuEntry : MenuEntry - { - public EditMenuEntry(CLIProgram progam, CLIMenu menu, string propertiesPath) : - base("Edit " + propertiesPath, null, false, () => - { - var command = new EditConfigCommand(); - command.Run(progam, new[] { command.trigger, propertiesPath }); - menu.Stop(); - }) - { - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step1_PropertiesMenu.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step1_PropertiesMenu.cs deleted file mode 100644 index 9131925f..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step1_PropertiesMenu.cs +++ /dev/null @@ -1,91 +0,0 @@ -ο»Ώusing System; -using System.IO; -using System.Linq; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Serialization.CLI.Utils; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class Step1_PropertiesMenu : CLIMenu - { - public string properties; - - public Step1_PropertiesMenu(CLIProgram progam, string title, ConsoleColors colors, string[] properties) : base(buildTitle(title, properties), colors) - { - foreach (var p in properties) - AddMenuEntry(new SelectPropertiesMenuEntry(this, p.MakePathRelativeTo(Directory.GetCurrentDirectory()))); - - if (!properties.Any(p => p.EndsWith(CodeGenerator.defaultPropertiesPath))) - AddMenuEntry(new CreateDefaultPropertiesMenuEntry(progam, this)); - - AddMenuEntry(new CreateCustomPropertiesMenuEntry(progam, this)); - AddMenuEntry(new ExitMenuEntry("Quit", false)); - } - - static string buildTitle(string title, string[] properties) - { - var header = title + "\n" + - "Step 1: Properties File\n" + - "=======================\n\n" + - "Jenny saves all its configuration in a *.properties file.\n"; - - if (properties.Length == 0) - { - return header + - "No properties file was found in " + Directory.GetCurrentDirectory() + "\n" + - "Let's create this file now!\n\n" + - "Please choose how you want to proceed and press enter"; - } - else - { - return header + - "These properties files were found in " + Directory.GetCurrentDirectory() + "\n" + - string.Join("\n", properties.Select(p => "- " + p.MakePathRelativeTo(Directory.GetCurrentDirectory()))) + "\n\n" + - "Please choose how you want to proceed and press enter"; - } - } - } - - public class SelectPropertiesMenuEntry : MenuEntry - { - public SelectPropertiesMenuEntry(Step1_PropertiesMenu menu, string properties) : - base("Use " + properties, null, false, () => - { - menu.properties = properties; - menu.Stop(); - }) - { - } - } - - public class CreateDefaultPropertiesMenuEntry : MenuEntry - { - public CreateDefaultPropertiesMenuEntry(CLIProgram progam, Step1_PropertiesMenu menu) : - base("Create new " + CodeGenerator.defaultPropertiesPath, null, false, () => - { - var command = new NewConfigCommand(); - command.Run(progam, new[] { command.trigger, "-s", CodeGenerator.defaultPropertiesPath }); - menu.properties = CodeGenerator.defaultPropertiesPath; - menu.Stop(); - }) - { - } - } - - public class CreateCustomPropertiesMenuEntry : MenuEntry - { - public CreateCustomPropertiesMenuEntry(CLIProgram progam, Step1_PropertiesMenu menu) : - base("Create a new properties file with a custom name", null, false, () => - { - Console.WriteLine("Please enter a file name"); - var fileName = Console.ReadLine(); - var command = new NewConfigCommand(); - command.Run(progam, new[] { command.trigger, "-s", fileName }); - menu.properties = fileName; - menu.Stop(); - }) - { - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step2_PluginsMenu.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step2_PluginsMenu.cs deleted file mode 100644 index d6ec348b..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/Step2_PluginsMenu.cs +++ /dev/null @@ -1,151 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class Step2_PluginsMenu : CLIMenu - { - public bool shouldAutoImport; - - readonly bool _isVerbose; - - public Step2_PluginsMenu(CLIProgram progam, string title, ConsoleColors colors, Preferences preferences, bool isVerbose) : base(buildTitle(title), colors) - { - _isVerbose = isVerbose; - Console.WriteLine(title); - var config = preferences.CreateAndConfigure(); - var allPlugins = autoImport(config); - - var pluginEntries = new List(allPlugins.Length); - - if (allPlugins.Length > 0) - { - AddMenuEntry(new AutoSaveMenuEntry(this, preferences, config)); - AddMenuEntry(new ManualSaveMenuEntry(this, preferences, config)); - - AddMenuEntry(new SelectableMenuEntry("Select all", pluginEntries.All(e => e.isSelected), isSelected => - { - foreach (var entry in pluginEntries) - entry.isSelected = isSelected; - })); - } - else - { - AddMenuEntry(new EditMenuEntry(progam, this, preferences.propertiesPath)); - } - - foreach (var plugin in allPlugins) - { - var localPlugin = plugin; - var entry = new SelectableMenuEntry(localPlugin, config.plugins.Contains(localPlugin), isSelected => updateConfig(config, localPlugin, isSelected)); - AddMenuEntry(entry); - pluginEntries.Add(entry); - } - - AddMenuEntry(new ExitMenuEntry("Quit", false)); - } - - string[] autoImport(CodeGeneratorConfig config) - { - var selectedPlugins = config.plugins; - var searchPaths = CodeGeneratorUtil.BuildSearchPaths(config.searchPaths, new[] { "." }); - var task = Task.Run(() => CodeGeneratorUtil.AutoImport(config, searchPaths)); - - if (!_isVerbose) - { - var top = Console.CursorTop; - var spinner = new Spinner(SpinnerStyles.magicCat); - spinner.Append("Searching for plugins. Please wait..."); - spinner.WriteWhile(0, top, () => !task.IsCompleted); - } - else - { - while (!task.IsCompleted) - { - } - } - - var allPlugins = config.plugins; - config.plugins = selectedPlugins; - return allPlugins; - } - - void updateConfig(CodeGeneratorConfig config, string plugin, bool isSelected) - { - var list = config.plugins.ToList(); - if (isSelected) - list.Add(plugin); - else - list.Remove(plugin); - - config.plugins = list - .Distinct() - .OrderBy(p => p) - .ToArray(); - } - - static string buildTitle(string title) - { - return title + "\n" + - "Step 2: Plugins\n" + - "===============\n\n" + - "Plugins can contain one or more\n" + - "- PreProcessors - prepare the data source if needed\n" + - "- DataProviders - process the data source and create the model\n" + - "- CodeGenerators - read the model and generate CodeGenFiles in memory\n" + - "- PostProcessors - process the CodeGenFiles, e.g. writing to disc\n" + - "- Doctors - diagnose and fix problems\n\n" + - "FAQ:\n" + - "- No plugins found: Make sure to specify the paths to plugins in " + CodeGeneratorConfig.SEARCH_PATHS_KEY + - "\n\n" + - "Please select the plugins you want to activate"; - } - } - - public class AutoSaveMenuEntry : MenuEntry - { - public AutoSaveMenuEntry(Step2_PluginsMenu menu, Preferences preferences, CodeGeneratorConfig config) : - base("Save and continue (auto import)", null, false, () => - { - config.searchPaths = config.searchPaths - .OrderBy(path => path) - .ToArray(); - - config.plugins = config.plugins - .OrderBy(path => path) - .ToArray(); - - preferences.Save(); - menu.shouldAutoImport = true; - menu.Stop(); - }) - { - } - } - - public class ManualSaveMenuEntry : MenuEntry - { - public ManualSaveMenuEntry(Step2_PluginsMenu menu, Preferences preferences, CodeGeneratorConfig config) : - base("Save and continue (manual import)", null, false, () => - { - config.searchPaths = config.searchPaths - .OrderBy(path => path) - .ToArray(); - - config.plugins = config.plugins - .OrderBy(path => path) - .ToArray(); - - preferences.Save(); - menu.shouldAutoImport = false; - menu.Stop(); - }) - { - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/WizardCommand.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/WizardCommand.cs deleted file mode 100644 index 797270de..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Commands/Wizard/WizardCommand.cs +++ /dev/null @@ -1,69 +0,0 @@ -ο»Ώusing System; -using System.IO; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; -using DesperateDevs.Serialization; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - public class WizardCommand : AbstractCommand - { - public override string trigger { get { return "wiz"; } } - public override string description { get { return "Setup Jenny, guided by a wizard"; } } - public override string group { get { return null; } } - public override string example { get { return "wiz"; } } - - readonly Logger _logger = fabl.GetLogger(typeof(WizardCommand)); - - protected override void run() - { - const string title = ""; -// const string title = @" -// gg -// dP8, -// dP Yb -// ,8 `8, -// I8 Yb -// `8b, `8, ,ggg, ,ggg,,ggg, ,ggg,,ggg, gg gg -// `'Y88888 i8' '8i ,8' '8P' '8, ,8' '8P' '8, I8 8I -// 'Y8 I8, ,8I I8 8I 8I I8 8I 8I I8, ,8I -// ,88, `YbadP' ,dP 8I Yb,,dP 8I Yb,,d8b, ,d8I -// ,ad88888888P'Y8888P' 8I `Y88P' 8I `Y8P''Y88P'888 -// ,dP'' Yb ,d8I' -// ,8' I8 ,dP'8I -//,8' I8 ,8' 8I -//I8, ,8' A lovely .NET Code Generator I8 8I -//`Y8,___,d8' `8, ,8I -// 'Y888P' `Y8P' -//"; - - const string indent = "β†’ "; - - // Step 1: Properties - var allPreferenes = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.properties", SearchOption.TopDirectoryOnly); - var propertiesMenu = new Step1_PropertiesMenu(_program, title, CLIHelper.consoleColors, allPreferenes); - propertiesMenu.indent = indent; - propertiesMenu.Start(); - - var preferences = new Preferences(propertiesMenu.properties, Preferences.defaultUserPropertiesPath); - - // Step 2: Plugins - var pluginsMenu = new Step2_PluginsMenu(_program, title, CLIHelper.consoleColors, preferences, _rawArgs.IsVerbose()); - pluginsMenu.indent = indent; - pluginsMenu.Start(); - - var fixArgs = pluginsMenu.shouldAutoImport - ? "-s" - : string.Empty; - - var fixCommand = new FixCommand(); - fixCommand.Run(_program, new[] { fixCommand.trigger, preferences.propertiesPath, fixArgs }); - - Console.Clear(); - - var doctorCommand = new DoctorCommand(); - doctorCommand.Run(_program, new[] { doctorCommand.trigger, preferences.propertiesPath }); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI.csproj b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI.csproj deleted file mode 100644 index f4d65796..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI.csproj +++ /dev/null @@ -1,15 +0,0 @@ -ο»Ώ - - - $(DefaultNetTargetFramework) - Exe - - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Program.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Program.cs deleted file mode 100644 index fd660ef1..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.CLI/src/Program.cs +++ /dev/null @@ -1,14 +0,0 @@ -ο»Ώusing DesperateDevs.CLI.Utils; -using DesperateDevs.Serialization.CLI.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.CLI -{ - class Program - { - public static void Main(string[] args) - { - AbstractPreferencesCommand.defaultPropertiesPath = CodeGenerator.defaultPropertiesPath; - new CLIProgram("Jenny", typeof(WizardCommand), args).Run(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs deleted file mode 100644 index 9c79a950..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs +++ /dev/null @@ -1,16 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor -{ - public static class CodeGeneratorMenuItems - { - public const string preferences = "Tools/Jenny/Preferences... #%j"; - public const string generate = "Tools/Jenny/Generate #%g"; - public const string generate_server = "Tools/Jenny/Generate with Server %&g"; - } - - public static class CodeGeneratorMenuItemPriorities - { - public const int preferences = 1; - public const int generate = 2; - public const int generate_server = 3; - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs deleted file mode 100644 index cd8fa60a..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using DesperateDevs.Serialization; -using DesperateDevs.Unity.Editor; -using DesperateDevs.Utils; -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor -{ - public class CodeGeneratorPreferencesDrawer : AbstractPreferencesDrawer - { - public override string title { get { return "Jenny"; } } - - string[] _availablePreProcessorTypes; - string[] _availableDataProviderTypes; - string[] _availableGeneratorTypes; - string[] _availablePostProcessorTypes; - - string[] _availablePreProcessorNames; - string[] _availableDataProviderNames; - string[] _availableGeneratorNames; - string[] _availablePostProcessorNames; - - Texture2D _headerTexture; - ICodeGenerationPlugin[] _instances; - - CodeGeneratorConfig _codeGeneratorConfig; - - public const string PROPERTIES_PATH_KEY = "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.PropertiesPath"; - const string USE_EXTERNAL_CODE_GENERATOR = "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.UseExternalCodeGenerator"; - bool _useExternalCodeGenerator; - bool _doDryRun; - - public override void Initialize(Preferences preferences) - { - _headerTexture = EditorLayout.LoadTexture("l:Jenny-Header"); - _codeGeneratorConfig = preferences.CreateAndConfigure(); - preferences.properties.AddProperties(_codeGeneratorConfig.defaultProperties, false); - - _instances = CodeGeneratorUtil.LoadFromPlugins(preferences); - - setTypesAndNames(_instances, out _availablePreProcessorTypes, out _availablePreProcessorNames); - setTypesAndNames(_instances, out _availableDataProviderTypes, out _availableDataProviderNames); - setTypesAndNames(_instances, out _availableGeneratorTypes, out _availableGeneratorNames); - setTypesAndNames(_instances, out _availablePostProcessorTypes, out _availablePostProcessorNames); - - preferences.properties.AddProperties(CodeGeneratorUtil.GetDefaultProperties(_instances, _codeGeneratorConfig), false); - - _useExternalCodeGenerator = EditorPrefs.GetBool(USE_EXTERNAL_CODE_GENERATOR); - _doDryRun = EditorPrefs.GetBool(UnityCodeGenerator.DRY_RUN, true); - } - - public override void DrawHeader(Preferences preferences) - { - var rect = EditorLayout.DrawTexture(_headerTexture); - var propertiesPath = Path.GetFileName(preferences.propertiesPath); - - var buttonWidth = 60 + propertiesPath.Length * 5; - const int buttonHeight = 15; - const int padding = 4; - var buttonRect = new Rect( - rect.width - buttonWidth - padding, - rect.y + rect.height - buttonHeight - padding, - buttonWidth, - buttonHeight - ); - - if (GUI.Button(buttonRect, "Edit " + propertiesPath, EditorStyles.miniButton)) - { - EditorWindow.focusedWindow.Close(); - System.Diagnostics.Process.Start(preferences.propertiesPath); - } - } - - protected override void drawContent(Preferences preferences) - { - var path = EditorLayout.ObjectFieldOpenFilePanel( - "Properties", - preferences.propertiesPath, - preferences.propertiesPath, - "properties" - ); - if (!string.IsNullOrEmpty(path)) - { - EditorPrefs.SetString(PROPERTIES_PATH_KEY, path); - EditorWindow.focusedWindow.Close(); - CodeGeneratorPreferencesWindow.OpenPreferences(); - } - - EditorGUILayout.BeginHorizontal(); - { - EditorGUILayout.LabelField("Auto Import Plugins"); - if (EditorLayout.MiniButton("Auto Import")) - { - autoImport(preferences); - } - } - EditorGUILayout.EndHorizontal(); - - _codeGeneratorConfig.preProcessors = drawMaskField("Pre Processors", _availablePreProcessorTypes, _availablePreProcessorNames, _codeGeneratorConfig.preProcessors); - _codeGeneratorConfig.dataProviders = drawMaskField("Data Providers", _availableDataProviderTypes, _availableDataProviderNames, _codeGeneratorConfig.dataProviders); - _codeGeneratorConfig.codeGenerators = drawMaskField("Code Generators", _availableGeneratorTypes, _availableGeneratorNames, _codeGeneratorConfig.codeGenerators); - _codeGeneratorConfig.postProcessors = drawMaskField("Post Processors", _availablePostProcessorTypes, _availablePostProcessorNames, _codeGeneratorConfig.postProcessors); - - drawConfigurables(preferences); - - EditorGUILayout.Space(); - drawGenerateButtons(); - } - - void autoImport(Preferences preferences) - { - var propertiesPath = Path.GetFileName(preferences.propertiesPath); - if (EditorUtility.DisplayDialog("Jenny - Auto Import", - "Auto Import will automatically find and set all plugins for you. " + - "It will search in folders and sub folders specified in " + propertiesPath + - " under the key '" + CodeGeneratorConfig.SEARCH_PATHS_KEY + "'." + - "\n\nThis will overwrite your current plugin settings." + - "\n\nDo you want to continue?", - "Continue and Overwrite", - "Cancel" - )) - { - var searchPaths = CodeGeneratorUtil.BuildSearchPaths( - _codeGeneratorConfig.searchPaths, - new[] { "./Assets", "./Library/ScriptAssemblies" } - ); - - CodeGeneratorUtil.AutoImport(_codeGeneratorConfig, searchPaths); - preferences.Save(); - - Initialize(preferences); - _codeGeneratorConfig.preProcessors = _availablePreProcessorTypes; - _codeGeneratorConfig.dataProviders = _availableDataProviderTypes; - _codeGeneratorConfig.codeGenerators = _availableGeneratorTypes; - _codeGeneratorConfig.postProcessors = _availablePostProcessorTypes; - } - } - - void drawConfigurables(Preferences preferences) - { - var defaultProperties = CodeGeneratorUtil.GetDefaultProperties(_instances, _codeGeneratorConfig); - preferences.properties.AddProperties(defaultProperties, false); - - if (defaultProperties.Count != 0) - { - EditorGUILayout.Space(); - EditorGUILayout.LabelField("Plugins Configuration", EditorStyles.boldLabel); - } - - foreach (var kv in defaultProperties.OrderBy(kv => kv.Key)) - { - preferences[kv.Key] = EditorGUILayout.TextField(kv.Key.ShortTypeName().ToSpacedCamelCase(), preferences[kv.Key]); - } - } - - static void setTypesAndNames(ICodeGenerationPlugin[] instances, out string[] availableTypes, out string[] availableNames) where T : ICodeGenerationPlugin - { - var orderedInstances = CodeGeneratorUtil.GetOrderedInstancesOf(instances); - - availableTypes = orderedInstances - .Select(instance => instance.GetType().ToCompilableString()) - .ToArray(); - - availableNames = orderedInstances - .Select(instance => instance.name) - .ToArray(); - } - - static string[] drawMaskField(string title, string[] types, string[] names, string[] input) - { - var mask = 0; - - for (int i = 0; i < types.Length; i++) - { - if (input.Contains(types[i])) - { - mask += (1 << i); - } - } - - if (names.Length != 0) - { - var everything = (int)Math.Pow(2, types.Length) - 1; - if (mask == everything) - { - mask = -1; - } - - mask = EditorGUILayout.MaskField(title, mask, names); - } - else - { - EditorGUILayout.LabelField(title, "No " + title + " available"); - } - - var selected = new List(); - for (int i = 0; i < types.Length; i++) - { - var index = 1 << i; - if ((index & mask) == index) - { - selected.Add(types[i]); - } - } - - // Re-add unavailable types - selected.AddRange(input.Where(type => !types.Contains(type))); - - return selected.ToArray(); - } - - void drawGenerateButtons() - { - EditorGUILayout.BeginVertical(); - { - EditorGUI.BeginChangeCheck(); - { - _useExternalCodeGenerator = EditorGUILayout.Toggle("Use Jenny Server", _useExternalCodeGenerator); - } - var useExternalCodeGeneratorChanged = EditorGUI.EndChangeCheck(); - if (useExternalCodeGeneratorChanged) - { - EditorPrefs.SetBool(USE_EXTERNAL_CODE_GENERATOR, _useExternalCodeGenerator); - } - - if (_useExternalCodeGenerator) - { - _codeGeneratorConfig.port = EditorGUILayout.IntField("Port", _codeGeneratorConfig.port); - _codeGeneratorConfig.host = EditorGUILayout.TextField("Host", _codeGeneratorConfig.host); - } - else - { - EditorGUI.BeginChangeCheck(); - { - _doDryRun = EditorGUILayout.Toggle("Safe Mode (Dry Run first)", _doDryRun); - } - var doDryRunChanged = EditorGUI.EndChangeCheck(); - if (doDryRunChanged) - { - EditorPrefs.SetBool(UnityCodeGenerator.DRY_RUN, _doDryRun); - } - } - - var bgColor = GUI.backgroundColor; - GUI.backgroundColor = Color.green; - if (GUILayout.Button("Generate", GUILayout.Height(32))) - { - if (_useExternalCodeGenerator) - { - UnityCodeGenerator.GenerateExternal(); - } - else - { - UnityCodeGenerator.Generate(); - } - } - - GUI.backgroundColor = bgColor; - } - EditorGUILayout.EndVertical(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs deleted file mode 100644 index 3ed985d5..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs +++ /dev/null @@ -1,24 +0,0 @@ -ο»Ώusing DesperateDevs.Serialization; -using DesperateDevs.Unity.Editor; -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor -{ - public class CodeGeneratorPreferencesWindow : PreferencesWindow - { - [MenuItem(CodeGeneratorMenuItems.preferences, false, CodeGeneratorMenuItemPriorities.preferences)] - public static void OpenPreferences() - { - var window = GetWindow(true, "Jenny"); - window.minSize = new Vector2(415f, 366f); - window.Initialize( - EditorPrefs.GetString(CodeGeneratorPreferencesDrawer.PROPERTIES_PATH_KEY, CodeGenerator.defaultPropertiesPath), - Preferences.defaultUserPropertiesPath, - "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.CodeGeneratorPreferencesDrawer" - ); - - window.Show(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.csproj b/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.csproj deleted file mode 100644 index d69258bb..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.csproj +++ /dev/null @@ -1,19 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs deleted file mode 100644 index 6fbb19f0..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs +++ /dev/null @@ -1,110 +0,0 @@ -ο»Ώusing System; -using System.Linq; -using System.Net.Sockets; -using System.Text; -using DesperateDevs.Networking; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor -{ - public static class UnityCodeGenerator - { - public const string DRY_RUN = "DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.DryRun"; - - public static Preferences GetPreferences() - { - var propertiesPath = EditorPrefs.GetString(CodeGeneratorPreferencesDrawer.PROPERTIES_PATH_KEY, CodeGenerator.defaultPropertiesPath); - return new Preferences(propertiesPath, Preferences.defaultUserPropertiesPath); - } - - [MenuItem(CodeGeneratorMenuItems.generate, false, CodeGeneratorMenuItemPriorities.generate)] - public static void Generate() - { - Debug.Log("Generating..."); - - var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(GetPreferences()); - - var progressOffset = 0f; - - codeGenerator.OnProgress += (title, info, progress) => - { - var cancel = EditorUtility.DisplayCancelableProgressBar(title, info, progressOffset + progress / 2); - if (cancel) - { - codeGenerator.Cancel(); - } - }; - - CodeGenFile[] dryFiles = null; - CodeGenFile[] files = null; - - try - { - dryFiles = EditorPrefs.GetBool(DRY_RUN, true) ? codeGenerator.DryRun() : new CodeGenFile[0]; - progressOffset = 0.5f; - files = codeGenerator.Generate(); - } - catch (Exception ex) - { - dryFiles = new CodeGenFile[0]; - files = new CodeGenFile[0]; - - EditorUtility.DisplayDialog("Error", ex.Message, "Ok"); - } - - EditorUtility.ClearProgressBar(); - - var totalGeneratedFiles = files.Select(file => file.fileName).Distinct().Count(); - - var sloc = dryFiles - .Select(file => file.fileContent.ToUnixLineEndings()) - .Sum(content => content.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Length); - - var loc = files - .Select(file => file.fileContent.ToUnixLineEndings()) - .Sum(content => content.Split(new[] { '\n' }).Length); - - Debug.Log("Generated " + totalGeneratedFiles + " files (" + sloc + " sloc, " + loc + " loc)"); - - AssetDatabase.Refresh(); - } - - static string _propertiesPath; - - [MenuItem(CodeGeneratorMenuItems.generate_server, false, CodeGeneratorMenuItemPriorities.generate_server)] - public static void GenerateExternal() - { - Debug.Log("Connecting..."); - - var preferences = GetPreferences(); - _propertiesPath = preferences.propertiesPath; - var config = preferences.CreateAndConfigure(); - var client = new TcpClientSocket(); - client.OnConnected += onConnected; - client.OnReceived += onReceive; - client.OnDisconnected += onDisconnect; - client.Connect(config.host.ResolveHost(), config.port); - } - - static void onConnected(TcpClientSocket client) - { - Debug.Log("Connected"); - Debug.Log("Generating..."); - client.Send(Encoding.UTF8.GetBytes("gen " + _propertiesPath)); - } - - static void onReceive(AbstractTcpSocket socket, Socket client, byte[] bytes) - { - Debug.Log("Generated"); - socket.Disconnect(); - } - - static void onDisconnect(AbstractTcpSocket socket) - { - Debug.Log("Disconnected"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs deleted file mode 100644 index c209e69d..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.Analytics; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator { - - public delegate void GeneratorProgress(string title, string info, float progress); - - public class CodeGenerator { - - public static string defaultPropertiesPath { get { return "Jenny.properties"; } } - - public event GeneratorProgress OnProgress; - - readonly IPreProcessor[] _preProcessors; - readonly IDataProvider[] _dataProviders; - readonly ICodeGenerator[] _codeGenerators; - readonly IPostProcessor[] _postProcessors; - readonly bool _trackHooks; - - readonly Dictionary _objectCache; - - bool _cancel; - - public CodeGenerator( - IPreProcessor[] preProcessors, - IDataProvider[] dataProviders, - ICodeGenerator[] codeGenerators, - IPostProcessor[] postProcessors, - bool trackHooks = true) { - _preProcessors = preProcessors.OrderBy(i => i.priority).ToArray(); - _dataProviders = dataProviders.OrderBy(i => i.priority).ToArray(); - _codeGenerators = codeGenerators.OrderBy(i => i.priority).ToArray(); - _postProcessors = postProcessors.OrderBy(i => i.priority).ToArray(); - _trackHooks = trackHooks; - _objectCache = new Dictionary(); - } - - public CodeGenFile[] DryRun() { - return generate( - "[Dry Run] ", - _preProcessors.Where(i => i.runInDryMode).ToArray(), - _dataProviders.Where(i => i.runInDryMode).ToArray(), - _codeGenerators.Where(i => i.runInDryMode).ToArray(), - _postProcessors.Where(i => i.runInDryMode).ToArray() - ); - } - - public CodeGenFile[] Generate() { - var files = generate( - string.Empty, - _preProcessors, - _dataProviders, - _codeGenerators, - _postProcessors - ); - - if (_trackHooks) { - trackHooks(files); - } - - return files; - } - - void trackHooks(CodeGenFile[] files) { - var hooks = AppDomain.CurrentDomain - .GetInstancesOf() - .OfType(); - - foreach (var hook in hooks) { - hook.Track(_preProcessors, _dataProviders, _codeGenerators, _postProcessors, files); - } - } - - CodeGenFile[] generate(string messagePrefix, - IPreProcessor[] preProcessors, - IDataProvider[] dataProviders, - ICodeGenerator[] codeGenerators, - IPostProcessor[] postProcessors) { - _cancel = false; - - _objectCache.Clear(); - - var cachables = ((ICodeGenerationPlugin[])preProcessors) - .Concat(dataProviders) - .Concat(codeGenerators) - .Concat(postProcessors) - .OfType(); - - foreach (var cachable in cachables) { - cachable.objectCache = _objectCache; - } - - var total = preProcessors.Length + dataProviders.Length + codeGenerators.Length + postProcessors.Length; - var progress = 0; - - foreach (var preProcessor in preProcessors) { - if (_cancel) { - return new CodeGenFile[0]; - } - - progress += 1; - if (OnProgress != null) { - OnProgress(messagePrefix + "Pre Processing", preProcessor.name, (float)progress / total); - } - - preProcessor.PreProcess(); - } - - var data = new List(); - foreach (var dataProvider in dataProviders) { - if (_cancel) { - return new CodeGenFile[0]; - } - - progress += 1; - if (OnProgress != null) { - OnProgress(messagePrefix + "Creating model", dataProvider.name, (float)progress / total); - } - - data.AddRange(dataProvider.GetData()); - } - - var files = new List(); - var dataArray = data.ToArray(); - foreach (var generator in codeGenerators) { - if (_cancel) { - return new CodeGenFile[0]; - } - - progress += 1; - if (OnProgress != null) { - OnProgress(messagePrefix + "Creating files", generator.name, (float)progress / total); - } - - files.AddRange(generator.Generate(dataArray)); - } - - var generatedFiles = files.ToArray(); - foreach (var postProcessor in postProcessors) { - if (_cancel) { - return new CodeGenFile[0]; - } - - progress += 1; - if (OnProgress != null) { - OnProgress(messagePrefix + "Post Processing", postProcessor.name, (float)progress / total); - } - - generatedFiles = postProcessor.PostProcess(generatedFiles); - } - - return generatedFiles; - } - - public void Cancel() { - _cancel = true; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs deleted file mode 100644 index 12441245..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs +++ /dev/null @@ -1,75 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator { - - public class CodeGeneratorConfig : AbstractConfigurableConfig { - - public const string SEARCH_PATHS_KEY = "Jenny.SearchPaths"; - public const string PLUGINS_PATHS_KEY = "Jenny.Plugins"; - - public const string PRE_PROCESSORS_KEY = "Jenny.PreProcessors"; - public const string DATA_PROVIDERS_KEY = "Jenny.DataProviders"; - public const string CODE_GENERATORS_KEY = "Jenny.CodeGenerators"; - public const string POST_PROCESSORS_KEY = "Jenny.PostProcessors"; - - public const string PORT_KEY = "Jenny.Server.Port"; - public const string HOST_KEY = "Jenny.Client.Host"; - - public override Dictionary defaultProperties { - get { - return new Dictionary { - { SEARCH_PATHS_KEY, string.Empty }, - { PLUGINS_PATHS_KEY, string.Empty }, - { PRE_PROCESSORS_KEY, string.Empty }, - { DATA_PROVIDERS_KEY, string.Empty }, - { CODE_GENERATORS_KEY, string.Empty }, - { POST_PROCESSORS_KEY, string.Empty }, - { PORT_KEY, "3333" }, - { HOST_KEY , "localhost" } - }; - } - } - - public string[] searchPaths { - get { return _preferences[SEARCH_PATHS_KEY].ArrayFromCSV(); } - set { _preferences[SEARCH_PATHS_KEY] = value.ToCSV(); } - } - - public string[] plugins { - get { return _preferences[PLUGINS_PATHS_KEY].ArrayFromCSV(); } - set { _preferences[PLUGINS_PATHS_KEY] = value.ToCSV(); } - } - - public string[] preProcessors { - get { return _preferences[PRE_PROCESSORS_KEY].ArrayFromCSV(); } - set { _preferences[PRE_PROCESSORS_KEY] = value.ToCSV(); } - } - - public string[] dataProviders { - get { return _preferences[DATA_PROVIDERS_KEY].ArrayFromCSV(); } - set { _preferences[DATA_PROVIDERS_KEY] = value.ToCSV(); } - } - - public string[] codeGenerators { - get { return _preferences[CODE_GENERATORS_KEY].ArrayFromCSV(); } - set { _preferences[CODE_GENERATORS_KEY] = value.ToCSV(); } - } - - public string[] postProcessors { - get { return _preferences[POST_PROCESSORS_KEY].ArrayFromCSV(); } - set { _preferences[POST_PROCESSORS_KEY] = value.ToCSV(); } - } - - public int port { - get { return int.Parse(_preferences[PORT_KEY]); } - set { _preferences[PORT_KEY] = value.ToString(); } - } - - public string host { - get { return _preferences[HOST_KEY]; } - set { _preferences[HOST_KEY] = value; } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs deleted file mode 100644 index 44f7eed9..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs +++ /dev/null @@ -1,23 +0,0 @@ -ο»Ώusing DesperateDevs.Analytics; - -namespace DesperateDevs.CodeGeneration.CodeGenerator { - - public abstract class CodeGeneratorTrackingHook : AbstractTrackingHook { - - protected IPreProcessor[] _preProcessors; - protected IDataProvider[] _dataProviders; - protected ICodeGenerator[] _codeGenerators; - protected IPostProcessor[] _postProcessors; - protected CodeGenFile[] _files; - - public void Track(IPreProcessor[] preProcessors, IDataProvider[] dataProviders, ICodeGenerator[] codeGenerators, IPostProcessor[] postProcessors, CodeGenFile[] files) { - _preProcessors = preProcessors; - _dataProviders = dataProviders; - _codeGenerators = codeGenerators; - _postProcessors = postProcessors; - _files = files; - - Track(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs deleted file mode 100644 index dd420b13..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using DesperateDevs.Logging; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.CodeGenerator -{ - public static class CodeGeneratorUtil - { - static readonly DesperateDevs.Logging.Logger _logger = fabl.GetLogger(typeof(CodeGeneratorUtil).FullName); - - public static CodeGenerator CodeGeneratorFromPreferences(Preferences preferences) - { - var instances = LoadFromPlugins(preferences); - var config = preferences.CreateAndConfigure(); - - var preProcessors = GetEnabledInstancesOf(instances, config.preProcessors); - var dataProviders = GetEnabledInstancesOf(instances, config.dataProviders); - var codeGenerators = GetEnabledInstancesOf(instances, config.codeGenerators); - var postProcessors = GetEnabledInstancesOf(instances, config.postProcessors); - - configure(preProcessors, preferences); - configure(dataProviders, preferences); - configure(codeGenerators, preferences); - configure(postProcessors, preferences); - - const string key = "Jenny.TrackHooks"; - var trackHooks = true; - if (preferences.HasKey(key)) - { - trackHooks = preferences[key] == "true"; - } - - return new CodeGenerator(preProcessors, dataProviders, codeGenerators, postProcessors, trackHooks); - } - - static void configure(ICodeGenerationPlugin[] plugins, Preferences preferences) - { - foreach (var plugin in plugins.OfType()) - plugin.Configure(preferences); - } - - public static ICodeGenerationPlugin[] LoadFromPlugins(Preferences preferences) - { - var config = preferences.CreateAndConfigure(); - var resolver = new AssemblyResolver(false, config.searchPaths); - foreach (var path in config.plugins) - resolver.Load(path); - - return resolver.GetTypes() - .GetNonAbstractTypes() - .Select(type => - { - try - { - return (ICodeGenerationPlugin)Activator.CreateInstance(type); - } - catch (TypeLoadException ex) - { - _logger.Warn(ex.Message); - } - - return null; - }) - .Where(instance => instance != null) - .ToArray(); - } - - public static T[] GetOrderedInstancesOf(ICodeGenerationPlugin[] instances) where T : ICodeGenerationPlugin - { - return instances - .OfType() - .OrderBy(instance => instance.priority) - .ThenBy(instance => instance.GetType().ToCompilableString()) - .ToArray(); - } - - public static string[] GetOrderedTypeNamesOf(ICodeGenerationPlugin[] instances) where T : ICodeGenerationPlugin - { - return GetOrderedInstancesOf(instances) - .Select(instance => instance.GetType().ToCompilableString()) - .ToArray(); - } - - public static T[] GetEnabledInstancesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin - { - return GetOrderedInstancesOf(instances) - .Where(instance => typeNames.Contains(instance.GetType().ToCompilableString())) - .ToArray(); - } - - public static string[] GetAvailableNamesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin - { - return GetOrderedTypeNamesOf(instances) - .Where(typeName => !typeNames.Contains(typeName)) - .ToArray(); - } - - public static string[] GetUnavailableNamesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin - { - var orderedTypeNames = GetOrderedTypeNamesOf(instances); - return typeNames - .Where(typeName => !orderedTypeNames.Contains(typeName)) - .ToArray(); - } - - public static Dictionary GetDefaultProperties(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config) - { - return new Dictionary().Merge( - GetEnabledInstancesOf(instances, config.preProcessors).OfType() - .Concat(GetEnabledInstancesOf(instances, config.dataProviders).OfType()) - .Concat(GetEnabledInstancesOf(instances, config.codeGenerators).OfType()) - .Concat(GetEnabledInstancesOf(instances, config.postProcessors).OfType()) - .Select(instance => instance.defaultProperties) - .ToArray()); - } - - public static string[] BuildSearchPaths(string[] searchPaths, string[] additionalSearchPaths) - { - return searchPaths - .Concat(additionalSearchPaths) - .Where(Directory.Exists) - .ToArray(); - } - - public static void AutoImport(CodeGeneratorConfig config, params string[] searchPaths) - { - var assemblyPaths = AssemblyResolver - .GetAssembliesContainingType(true, searchPaths) - .GetAllTypes() - .GetNonAbstractTypes() - .Select(type => type.Assembly) - .Distinct() - .Select(assembly => assembly.CodeBase.MakePathRelativeTo(Directory.GetCurrentDirectory())) - .ToArray(); - - var currentFullPaths = new HashSet(config.searchPaths.Select(Path.GetFullPath)); - var newPaths = assemblyPaths - .Select(Path.GetDirectoryName) - .Where(path => !currentFullPaths.Contains(path)); - - config.searchPaths = config.searchPaths - .Concat(newPaths) - .Distinct() - .OrderBy(path => path) - .ToArray(); - - config.plugins = assemblyPaths - .Select(Path.GetFileNameWithoutExtension) - .Distinct() - .OrderBy(plugin => plugin) - .ToArray(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/DesperateDevs.CodeGeneration.CodeGenerator.csproj b/src/DesperateDevs.CodeGeneration.CodeGenerator/src/DesperateDevs.CodeGeneration.CodeGenerator.csproj deleted file mode 100644 index eb606fe9..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/src/DesperateDevs.CodeGeneration.CodeGenerator.csproj +++ /dev/null @@ -1,13 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorTests.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorTests.cs deleted file mode 100644 index fc4a54ad..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorTests.cs +++ /dev/null @@ -1,526 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.CodeGeneration; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.Tests -{ - public class CodeGeneratorTests - { - [Fact] - public void ExecutesPreProcessorsDataProvidersGeneratorsAndPostProcessors() - { - var preStr = new List(); - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(preStr)}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - var files = generator.Generate(); - - preStr.Count.Should().Be(1); - preStr[0].Should().Be("Pre1"); - - files.Length.Should().Be(2); - - files[0].fileName.Should().Be("Test1File0-Processed1"); - files[0].fileContent.Should().Be("data1"); - - files[1].fileName.Should().Be("Test1File1-Processed1"); - files[1].fileContent.Should().Be("data2"); - } - - [Fact] - public void UsesReturnedCodeGenFiles() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor(), new NoFilesPostProcessor()} - ); - - var files = generator.Generate(); - files.Length.Should().Be(1); - files[0].fileName.Should().Be("Test1File0-Processed1"); - } - - [Fact] - public void SkipsPluginsWhichDoNotRunInDryRun() - { - var preStr = new List(); - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(preStr), new DisabledPreProcessor(preStr)}, - new IDataProvider[] {new Data_1_2_Provider(), new DisabledDataProvider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator(), new DisabledCodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor(), new DisabledPostProcessor()} - ); - - var files = generator.DryRun(); - - preStr.Count.Should().Be(1); - preStr[0].Should().Be("Pre1"); - - files.Length.Should().Be(2); - - files[0].fileName.Should().Be("Test1File0-Processed1"); - files[1].fileName.Should().Be("Test1File1-Processed1"); - } - - [Fact] - public void RunsPreProcessorsBasedOnPriority() - { - var preStr = new List(); - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre2PreProcessor(preStr), new Pre1PreProcessor(preStr)}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - generator.Generate(); - - preStr.Count.Should().Be(2); - preStr[0].Should().Be("Pre1"); - preStr[1].Should().Be("Pre2"); - } - - [Fact] - public void RunsDataProviderBasedOnPriority() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_3_4_Provider(), new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - var files = generator.Generate(); - - files.Length.Should().Be(4); - - files[0].fileName.Should().Be("Test1File0-Processed1"); - files[0].fileContent.Should().Be("data1"); - - files[1].fileName.Should().Be("Test1File1-Processed1"); - files[1].fileContent.Should().Be("data2"); - - files[2].fileName.Should().Be("Test1File2-Processed1"); - files[2].fileContent.Should().Be("data3"); - - files[3].fileName.Should().Be("Test1File3-Processed1"); - files[3].fileContent.Should().Be("data4"); - } - - [Fact] - public void RunsCodeGeneratorsBasedOnPriority() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile2CodeGenerator(), new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - var files = generator.Generate(); - - files.Length.Should().Be(4); - - files[0].fileName.Should().Be("Test1File0-Processed1"); - files[1].fileName.Should().Be("Test1File1-Processed1"); - files[2].fileName.Should().Be("Test2File0-Processed1"); - files[3].fileName.Should().Be("Test2File1-Processed1"); - } - - [Fact] - public void RunsPostProcessorsBasedOnPriority() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed2PostProcessor(), new Processed1PostProcessor()} - ); - - var files = generator.Generate(); - - files.Length.Should().Be(2); - - files[0].fileName.Should().Be("Test1File0-Processed1-Processed2"); - files[1].fileName.Should().Be("Test1File1-Processed1-Processed2"); - } - - [Fact] - public void CancelsRun() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - generator.OnProgress += delegate { generator.Cancel(); }; - - var files = generator.Generate(); - - files.Length.Should().Be(0); - } - - [Fact] - public void CancelsDryRun() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - generator.OnProgress += delegate { generator.Cancel(); }; - - var files = generator.DryRun(); - - files.Length.Should().Be(0); - } - - [Fact] - public void CanGenerateAgainAfterCancel() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - void OnProgress(string title, string info, float progress) => generator.Cancel(); - - generator.OnProgress += OnProgress; - - generator.Generate(); - - generator.OnProgress -= OnProgress; - - var files = generator.Generate(); - - files.Length.Should().Be(2); - } - - [Fact] - public void CanDoDryRunAgainAfterCancel() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new Data_1_2_Provider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - void OnProgress(string title, string info, float progress) => generator.Cancel(); - - generator.OnProgress += OnProgress; - - generator.Generate(); - - generator.OnProgress -= OnProgress; - - var files = generator.DryRun(); - - files.Length.Should().Be(2); - } - - [Fact] - public void RegistersObjectInSharedCache() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new CachableProvider(), new CachableProvider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - var files = generator.Generate(); - files.Length.Should().Be(2); - files[0].fileContent.Should().Be(files[1].fileContent); - } - - [Fact] - public void ResetsCacheBeforeEachNewRun() - { - var generator = new CodeGenerator( - new IPreProcessor[] {new Pre1PreProcessor(new List())}, - new IDataProvider[] {new CachableProvider(), new CachableProvider()}, - new ICodeGenerator[] {new DataFile1CodeGenerator()}, - new IPostProcessor[] {new Processed1PostProcessor()} - ); - - var result1 = generator.Generate()[0].fileContent; - var result2 = generator.Generate()[0].fileContent; - result1.Should().NotBe(result2); - } - } -} - -public class Data_1_2_Provider : IDataProvider -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => true; - - public CodeGeneratorData[] GetData() - { - var data1 = new CodeGeneratorData(); - data1.Add("testKey", "data1"); - - var data2 = new CodeGeneratorData(); - data2.Add("testKey", "data2"); - - return new[] - { - data1, - data2 - }; - } -} - -public class Data_3_4_Provider : IDataProvider -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => true; - - public CodeGeneratorData[] GetData() - { - var data1 = new CodeGeneratorData(); - data1.Add("testKey", "data3"); - - var data2 = new CodeGeneratorData(); - data2.Add("testKey", "data4"); - - return new[] - { - data1, - data2 - }; - } -} - -public class DisabledDataProvider : IDataProvider -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => false; - - public CodeGeneratorData[] GetData() - { - var data1 = new CodeGeneratorData(); - data1.Add("testKey", "data5"); - - var data2 = new CodeGeneratorData(); - data2.Add("testKey", "data6"); - - return new[] - { - data1, - data2 - }; - } -} - -public class DataFile1CodeGenerator : ICodeGenerator -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => true; - - public CodeGenFile[] Generate(CodeGeneratorData[] data) - { - return data - .Select((d, i) => new CodeGenFile( - "Test1File" + i, - d["testKey"].ToString(), - "Test1CodeGenerator" - )).ToArray(); - } -} - -public class DataFile2CodeGenerator : ICodeGenerator -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => true; - - public CodeGenFile[] Generate(CodeGeneratorData[] data) - { - return data - .Select((d, i) => new CodeGenFile( - "Test2File" + i, - d["testKey"].ToString(), - "Test2CodeGenerator" - )).ToArray(); - } -} - -public class DisabledCodeGenerator : ICodeGenerator -{ - public string name => ""; - public int priority => -5; - public bool runInDryMode => false; - - public CodeGenFile[] Generate(CodeGeneratorData[] data) - { - return data - .Select((d, i) => new CodeGenFile( - "Test3File" + i, - d["testKey"].ToString(), - "DisabledCodeGenerator" - )).ToArray(); - } -} - -public class Processed1PostProcessor : IPostProcessor -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => true; - - public CodeGenFile[] PostProcess(CodeGenFile[] files) - { - foreach (var file in files) - { - file.fileName += "-Processed1"; - } - - return files; - } -} - -public class Processed2PostProcessor : IPostProcessor -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => true; - - public CodeGenFile[] PostProcess(CodeGenFile[] files) - { - foreach (var file in files) - { - file.fileName += "-Processed2"; - } - - return files; - } -} - -public class DisabledPostProcessor : IPostProcessor -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => false; - - public CodeGenFile[] PostProcess(CodeGenFile[] files) - { - foreach (var file in files) - { - file.fileName += "-Disabled"; - } - - return files; - } -} - -public class NoFilesPostProcessor : IPostProcessor -{ - public string name => ""; - public int priority => -5; - public bool runInDryMode => true; - - public CodeGenFile[] PostProcess(CodeGenFile[] files) - { - return new[] {files[0]}; - } -} - -public class CachableProvider : IDataProvider, ICachable -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => true; - - public Dictionary objectCache { get; set; } - - public CodeGeneratorData[] GetData() - { - object o; - if (!objectCache.TryGetValue("myObject", out o)) - { - o = new object(); - objectCache.Add("myObject", o); - } - - var data = new CodeGeneratorData(); - data.Add("testKey", o.GetHashCode()); - return new[] {data}; - } -} - -public class Pre1PreProcessor : IPreProcessor -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => true; - - List _strings; - - public Pre1PreProcessor(List strings) - { - _strings = strings; - } - - public void PreProcess() - { - _strings.Add("Pre1"); - } -} - -public class Pre2PreProcessor : IPreProcessor -{ - public string name => ""; - public int priority => 5; - public bool runInDryMode => true; - - List _strings; - - public Pre2PreProcessor(List strings) - { - _strings = strings; - } - - public void PreProcess() - { - _strings.Add("Pre2"); - } -} - -public class DisabledPreProcessor : IPreProcessor -{ - public string name => ""; - public int priority => 0; - public bool runInDryMode => false; - - List _strings; - - public DisabledPreProcessor(List strings) - { - _strings = strings; - } - - public void PreProcess() - { - _strings.Add("DisabledPre"); - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorUtilTests.cs b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorUtilTests.cs deleted file mode 100644 index 2d768d3e..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/CodeGeneratorUtilTests.cs +++ /dev/null @@ -1,45 +0,0 @@ -ο»Ώusing System.IO; -using DesperateDevs.Serialization.Tests.Fixtures; -using DesperateDevs.Tests; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.CodeGeneration.CodeGenerator.Tests -{ - public class CodeGeneratorUtilTests - { - static readonly string ProjectRoot = TestHelper.GetProjectRoot(); - - static readonly string SearchPaths = Path.Combine( - "src", "DesperateDevs.CodeGeneration.CodeGenerator", "tests", "Fixtures" - ); - - readonly CodeGeneratorConfig _config; - - public CodeGeneratorUtilTests() - { - _config = new CodeGeneratorConfig(); - var preferences = new TestPreferences(string.Empty); - preferences.properties.AddProperties(_config.defaultProperties, true); - _config.Configure(preferences); - } - - [Fact(Skip = "Add project to build test plugin dlls")] - public void UpdatesSearchPathsInCodeGeneratorConfig() - { - CodeGeneratorUtil.AutoImport(_config, Path.Combine(ProjectRoot, SearchPaths, "/TestPlugins")); - _config.searchPaths.Length.Should().Be(2); - _config.searchPaths[0].Should().Be(SearchPaths + "/TestPlugins/One"); - _config.searchPaths[1].Should().Be(SearchPaths + "/TestPlugins/Two"); - } - - [Fact(Skip = "Add project to build test plugin dlls")] - public void UpdatesSearchPathsWhenPathContainsSpaces() - { - CodeGeneratorUtil.AutoImport(_config, Path.Combine(ProjectRoot, SearchPaths, "/Test Plugins")); - _config.searchPaths.Length.Should().Be(2); - _config.searchPaths[0].Should().Be(SearchPaths + "/Test Plugins/One"); - _config.searchPaths[1].Should().Be(SearchPaths + "/Test Plugins/Two"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/DesperateDevs.CodeGeneration.CodeGenerator.Tests.csproj b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/DesperateDevs.CodeGeneration.CodeGenerator.Tests.csproj deleted file mode 100644 index 594a2161..00000000 --- a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/DesperateDevs.CodeGeneration.CodeGenerator.Tests.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.CodeGeneration.Plugins.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.CodeGeneration.Plugins.dll deleted file mode 100644 index dc46b76c..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.CodeGeneration.Plugins.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Logging.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Logging.dll deleted file mode 100644 index dd800e8b..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Logging.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Serialization.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Serialization.dll deleted file mode 100644 index c8bba640..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Serialization.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Utils.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Utils.dll deleted file mode 100644 index 1ec8d1e6..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/One/DesperateDevs.Utils.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Analytics.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Analytics.dll deleted file mode 100644 index ddf01c81..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Analytics.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll deleted file mode 100644 index 12e7ed02..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll deleted file mode 100644 index 33f46a7f..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.dll deleted file mode 100644 index c126635d..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.CodeGeneration.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Logging.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Logging.dll deleted file mode 100644 index dd800e8b..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Logging.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll deleted file mode 100644 index c8bba640..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Utils.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Utils.dll deleted file mode 100644 index 1ec8d1e6..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/Test Plugins/Two/DesperateDevs.Utils.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.Plugins.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.Plugins.dll deleted file mode 100644 index dc46b76c..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.Plugins.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.dll deleted file mode 100644 index c126635d..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.CodeGeneration.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Logging.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Logging.dll deleted file mode 100644 index dd800e8b..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Logging.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Serialization.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Serialization.dll deleted file mode 100644 index c8bba640..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Serialization.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Utils.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Utils.dll deleted file mode 100644 index 1ec8d1e6..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/One/DesperateDevs.Utils.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Analytics.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Analytics.dll deleted file mode 100644 index ddf01c81..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Analytics.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll deleted file mode 100644 index 12e7ed02..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.CodeGenerator.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll deleted file mode 100644 index 33f46a7f..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.Unity.Plugins.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.dll deleted file mode 100644 index c126635d..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.CodeGeneration.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Logging.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Logging.dll deleted file mode 100644 index dd800e8b..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Logging.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll deleted file mode 100644 index c8bba640..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Utils.dll b/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Utils.dll deleted file mode 100644 index 1ec8d1e6..00000000 Binary files a/src/DesperateDevs.CodeGeneration.CodeGenerator/tests/Fixtures/TestPlugins/Two/DesperateDevs.Utils.dll and /dev/null differ diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs deleted file mode 100644 index 5720bda2..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs +++ /dev/null @@ -1,20 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class ProjectPathConfig : AbstractConfigurableConfig { - - const string PROJECT_PATH_KEY = "DesperateDevs.CodeGeneration.Plugins.ProjectPath"; - - public override Dictionary defaultProperties { - get { - return new Dictionary { - { PROJECT_PATH_KEY, "Assembly-CSharp.csproj" } - }; - } - } - - public string projectPath { get { return _preferences[PROJECT_PATH_KEY]; } } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs deleted file mode 100644 index d6f65351..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs +++ /dev/null @@ -1,40 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class TargetDirectoryConfig : AbstractConfigurableConfig { - - const string TARGET_DIRECTORY_KEY = "DesperateDevs.CodeGeneration.Plugins.TargetDirectory"; - - public override Dictionary defaultProperties { - get { - return new Dictionary { - { TARGET_DIRECTORY_KEY, "Assets" } - }; - } - } - - public string targetDirectory { get { return _preferences[TARGET_DIRECTORY_KEY].ToSafeDirectory(); } } - } - - public static class TargetDirectoryStringExtension { - - public static string ToSafeDirectory(this string directory) { - if (string.IsNullOrEmpty(directory) || directory == ".") { - return "Generated"; - } - - if (directory.EndsWith("/", StringComparison.Ordinal)) { - directory = directory.Substring(0, directory.Length - 1); - } - - if (!directory.EndsWith("/Generated", StringComparison.OrdinalIgnoreCase)) { - directory += "/Generated"; - } - - return directory; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/DesperateDevs.CodeGeneration.Plugins.csproj b/src/DesperateDevs.CodeGeneration.Plugins/src/DesperateDevs.CodeGeneration.Plugins.csproj deleted file mode 100644 index 49bc6a45..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/DesperateDevs.CodeGeneration.Plugins.csproj +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs deleted file mode 100644 index 9a52a9e1..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace DesperateDevs.CodeGeneration.Plugins { - - public class AddFileHeaderPostProcessor : IPostProcessor { - - public string name { get { return "Add file header"; } } - public int priority { get { return 0; } } - public bool runInDryMode { get { return true; } } - - public const string AUTO_GENERATED_HEADER_FORMAT = - @"//------------------------------------------------------------------------------ -// -// This code was generated by {0}. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -"; - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - foreach (var file in files) { - file.fileContent = string.Format(AUTO_GENERATED_HEADER_FORMAT, file.generatorName) + file.fileContent; - } - - return files; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs deleted file mode 100644 index e1daff0a..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using DesperateDevs.Logging; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class CleanTargetDirectoryPostProcessor : IPostProcessor, IConfigurable { - - public string name { get { return "Clean target directory"; } } - public int priority { get { return 0; } } - public bool runInDryMode { get { return false; } } - - public Dictionary defaultProperties { get { return _targetDirectoryConfig.defaultProperties; } } - - readonly Logger _logger = fabl.GetLogger(typeof(CleanTargetDirectoryPostProcessor)); - - readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); - - public void Configure(Preferences preferences) { - _targetDirectoryConfig.Configure(preferences); - } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - cleanDir(); - return files; - } - - void cleanDir() { - if (Directory.Exists(_targetDirectoryConfig.targetDirectory)) { - var files = new DirectoryInfo(_targetDirectoryConfig.targetDirectory).GetFiles("*.cs", SearchOption.AllDirectories); - foreach (var file in files) { - try { - File.Delete(file.FullName); - } catch { - _logger.Error("Could not delete file " + file); - } - } - } else { - Directory.CreateDirectory(_targetDirectoryConfig.targetDirectory); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs deleted file mode 100644 index 6ac0e71d..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Linq; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class ConsoleWriteLinePostProcessor : IPostProcessor { - - public string name { get { return "Console.WriteLine generated files"; } } - public int priority { get { return 200; } } - public bool runInDryMode { get { return true; } } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - Console.WriteLine(files.Aggregate( - string.Empty, - (acc, file) => acc + file.fileName + " - " + file.generatorName + "\n") - ); - - return files; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs deleted file mode 100644 index 66afbd9d..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class MergeFilesPostProcessor : IPostProcessor { - - public string name { get { return "Merge files"; } } - public int priority { get { return 90; } } - public bool runInDryMode { get { return true; } } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - var pathToFile = new Dictionary(); - for (int i = 0; i < files.Length; i++) { - var file = files[i]; - if (!pathToFile.ContainsKey(file.fileName)) { - pathToFile.Add(file.fileName, file); - } else { - pathToFile[file.fileName].fileContent += "\n" + file.fileContent; - pathToFile[file.fileName].generatorName += ", " + file.generatorName; - files[i] = null; - } - } - - return files - .Where(file => file != null) - .ToArray(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs deleted file mode 100644 index 50323eed..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class NewLinePostProcessor : IPostProcessor { - - public string name { get { return "Convert newlines"; } } - public int priority { get { return 95; } } - public bool runInDryMode { get { return true; } } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - foreach (var file in files) { - file.fileContent = file.fileContent.Replace("\n", Environment.NewLine); - } - - return files; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs deleted file mode 100644 index cc378bc5..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Text.RegularExpressions; -using System.Linq; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class UpdateCSProjPostProcessor : IPostProcessor, IConfigurable { - - public string name { get { return "Update .csproj"; } } - public int priority { get { return 96; } } - public bool runInDryMode { get { return false; } } - - public Dictionary defaultProperties { - get { - return _projectPathConfig.defaultProperties - .Merge(_targetDirectoryConfig.defaultProperties); - } - } - - readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); - readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); - - public void Configure(Preferences preferences) { - _projectPathConfig.Configure(preferences); - _targetDirectoryConfig.Configure(preferences); - } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - var project = File.ReadAllText(_projectPathConfig.projectPath); - project = removeExistingGeneratedEntries(project); - project = addGeneratedEntries(project, files); - File.WriteAllText(_projectPathConfig.projectPath, project); - return files; - } - - string removeExistingGeneratedEntries(string project) { - var escapedTargetDirectory = _targetDirectoryConfig.targetDirectory - .Replace("/", "\\") - .Replace("\\", "\\\\"); - - var entryPattern = @"\s*"; - project = Regex.Replace(project, entryPattern, string.Empty); - - const string emptyItemGroup = @"\s*\s*<\/ItemGroup>"; - project = Regex.Replace(project, emptyItemGroup, string.Empty); - - return project; - } - - string addGeneratedEntries(string project, CodeGenFile[] files) { - const string endOfItemGroupPattern = @"<\/ItemGroup>"; - - const string generatedEntriesTemplate = - @" - -{0} - "; - - var entryTemplate = @" "; - - var entries = string.Join("\r\n", files.Select( - file => string.Format(entryTemplate, file.fileName.Replace("/", "\\"))).ToArray()); - - var generatedEntries = string.Format(generatedEntriesTemplate, entries); - - return new Regex(endOfItemGroupPattern).Replace(project, generatedEntries, 1); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs deleted file mode 100644 index f0cc5334..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class WriteToDiskPostProcessor : IPostProcessor, IConfigurable { - - public string name { get { return "Write to disk"; } } - public int priority { get { return 100; } } - public bool runInDryMode { get { return false; } } - - public Dictionary defaultProperties { get { return _targetDirectoryConfig.defaultProperties; } } - - readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); - - public void Configure(Preferences preferences) { - _targetDirectoryConfig.Configure(preferences); - } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - foreach (var file in files) { - var fileName = _targetDirectoryConfig.targetDirectory + Path.DirectorySeparatorChar + file.fileName; - var targetDir = Path.GetDirectoryName(fileName); - if (!Directory.Exists(targetDir)) { - Directory.CreateDirectory(targetDir); - } - File.WriteAllText(fileName, file.fileContent); - } - - return files; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs deleted file mode 100644 index c4e13c4a..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs +++ /dev/null @@ -1,36 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using System.IO; -using System.Text.RegularExpressions; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class TargetFrameworkProfilePreProcessor : IPreProcessor, IConfigurable { - - public string name { get { return "Fix Target Framework Profile"; } } - public int priority { get { return 0; } } - public bool runInDryMode { get { return true; } } - - public Dictionary defaultProperties { get { return _projectPathConfig.defaultProperties; } } - - readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); - - public void Configure(Preferences preferences) { - _projectPathConfig.Configure(preferences); - } - - public void PreProcess() { - var project = File.ReadAllText(_projectPathConfig.projectPath); - project = removeTargetFrameworkProfile(project); - File.WriteAllText(_projectPathConfig.projectPath, project); - } - - string removeTargetFrameworkProfile(string project) { - const string pattern1 = @"\s*Unity Subset v3.5"; - const string pattern2 = @"\s*Unity Full v3.5"; - project = Regex.Replace(project, pattern1, string.Empty); - project = Regex.Replace(project, pattern2, string.Empty); - return project; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs b/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs deleted file mode 100644 index 113bfba9..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs +++ /dev/null @@ -1,34 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.IO; -using DesperateDevs.Serialization; - -namespace DesperateDevs.CodeGeneration.Plugins { - - public class ValidateProjectPathPreProcessor : IPreProcessor, IConfigurable { - - public string name { get { return "Validate Project Path"; } } - public int priority { get { return -10; } } - public bool runInDryMode { get { return true; } } - - public Dictionary defaultProperties { get { return _projectPathConfig.defaultProperties; } } - - readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); - - Preferences _preferences; - - public void Configure(Preferences preferences) { - _preferences = preferences; - _projectPathConfig.Configure(preferences); - } - - public void PreProcess() { - if (!File.Exists(_projectPathConfig.projectPath)) { - throw new Exception( - @"Could not find file '" + _projectPathConfig.projectPath + "\'\n" + - "Press \"Assets -> Open C# Project\" to create the project and make sure that \"Project Path\" is set to the created *.csproj." - ); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/DesperateDevs.CodeGeneration.Plugins.Tests.csproj b/src/DesperateDevs.CodeGeneration.Plugins/tests/DesperateDevs.CodeGeneration.Plugins.Tests.csproj deleted file mode 100644 index 1ea36369..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/tests/DesperateDevs.CodeGeneration.Plugins.Tests.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/MergeFilesPostProcessorTests.cs b/src/DesperateDevs.CodeGeneration.Plugins/tests/MergeFilesPostProcessorTests.cs deleted file mode 100644 index 78ff7d4d..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/tests/MergeFilesPostProcessorTests.cs +++ /dev/null @@ -1,29 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.CodeGeneration.Plugins.Tests -{ - public class MergeFilesPostProcessorTests - { - [Fact] - public void MergesFilesWithSameFilename() - { - var files = new[] - { - new CodeGenFile("file1", "content1", "gen1"), - new CodeGenFile("file1", "content2", "gen2"), - new CodeGenFile("file3", "content3", "gen3") - }; - - var postprocessor = new MergeFilesPostProcessor(); - files = postprocessor.PostProcess(files); - - files.Length.Should().Be(2); - files[0].fileName.Should().Be("file1"); - files[1].fileName.Should().Be("file3"); - - files[0].fileContent.Should().Be("content1\ncontent2"); - files[0].generatorName.Should().Be("gen1, gen2"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs b/src/DesperateDevs.CodeGeneration.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs deleted file mode 100644 index 8130ecab..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs +++ /dev/null @@ -1,19 +0,0 @@ -ο»Ώusing DesperateDevs.Serialization.Tests.Fixtures; -using Xunit; - -namespace DesperateDevs.CodeGeneration.Plugins.Tests -{ - public class TargetFrameworkProfilePreProcessorTests - { - [Fact(Skip = "Manual Test")] - public void UpdatesCsproj() - { - var preProcessor = new TargetFrameworkProfilePreProcessor(); - var preferences = new TestPreferences( - "DesperateDevs.CodeGeneration.Plugins.ProjectPath = Tests/Tests/DesperateDevs.CodeGeneration.Plugins/TestTargetFrameworkProfilePreProcessor.csproj" - ); - preProcessor.Configure(preferences); - preProcessor.PreProcess(); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/UpdateCsProjPostProcessorTests.cs b/src/DesperateDevs.CodeGeneration.Plugins/tests/UpdateCsProjPostProcessorTests.cs deleted file mode 100644 index b18773e7..00000000 --- a/src/DesperateDevs.CodeGeneration.Plugins/tests/UpdateCsProjPostProcessorTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using DesperateDevs.Serialization.Tests.Fixtures; -using Xunit; - -namespace DesperateDevs.CodeGeneration.Plugins.Tests -{ - public class UpdateCsProjPostProcessorTests - { - [Fact(Skip = "Manual Test")] - public void UpdatesCsproj() - { - var postProcessor = new UpdateCSProjPostProcessor(); - var preferences = new TestPreferences( - @"DesperateDevs.CodeGeneration.Plugins.ProjectPath = Tests/TestUpdateCSProjPostProcessor/TestUpdateCSProjPostProcessor.csproj -DesperateDevs.CodeGeneration.Plugins.TargetDirectory = Assets/Sources"); - postProcessor.Configure(preferences); - - var files = new[] - { - new CodeGenFile("My/Generated/Folder/File1.cs", "Hello, world!", "Test1"), - new CodeGenFile("My/Generated/Folder/File2.cs", "Hello, world!", "Test2") - }; - - postProcessor.PostProcess(files); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/DesperateDevs.CodeGeneration.Unity.Plugins.csproj b/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/DesperateDevs.CodeGeneration.Unity.Plugins.csproj deleted file mode 100644 index 72a47b36..00000000 --- a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/DesperateDevs.CodeGeneration.Unity.Plugins.csproj +++ /dev/null @@ -1,16 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs b/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs deleted file mode 100644 index 2fd01d11..00000000 --- a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs +++ /dev/null @@ -1,55 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.CodeGeneration.CodeGenerator; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.Unity.Plugins { - - public class DebugLogDoctor : IDoctor, IConfigurable { - - public string name { get { return "Debug.Log"; } } - public int priority { get { return 0; } } - public bool runInDryMode { get { return true; } } - - public Dictionary defaultProperties { get { return new Dictionary(); } } - - readonly CodeGeneratorConfig _codeGeneratorConfig = new CodeGeneratorConfig(); - - public void Configure(Preferences preferences) { - _codeGeneratorConfig.Configure(preferences); - } - - public Diagnosis Diagnose() { - var isStandalone = AppDomain.CurrentDomain - .GetAllTypes() - .Any(type => type.FullName == "DesperateDevs.CodeGeneration.CodeGenerator.CLI.Program"); - - if (isStandalone) { - var typeName = typeof(DebugLogPostProcessor).FullName; - if (_codeGeneratorConfig.postProcessors.Contains(typeName)) { - return new Diagnosis( - typeName + " uses Unity APIs but is used outside of Unity!", - "Remove " + typeName + " from CodeGenerator.PostProcessors", - DiagnosisSeverity.Error - ); - } - } - - return Diagnosis.Healthy; - } - - public bool Fix() { - var postProcessorList = _codeGeneratorConfig.postProcessors.ToList(); - var removed = postProcessorList.Remove(typeof(DebugLogPostProcessor).FullName); - if (removed) { - _codeGeneratorConfig.postProcessors = postProcessorList.ToArray(); - - return true; - } - - return false; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs b/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs deleted file mode 100644 index a65da4e2..00000000 --- a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Linq; -using UnityEngine; - -namespace DesperateDevs.CodeGeneration.Unity.Plugins { - - public class DebugLogPostProcessor : IPostProcessor { - - public string name { get { return "Debug.Log generated files"; } } - public int priority { get { return 200; } } - public bool runInDryMode { get { return true; } } - - public CodeGenFile[] PostProcess(CodeGenFile[] files) { - Debug.Log(files.Aggregate( - string.Empty, - (acc, file) => acc + file.fileName + " - " + file.generatorName + "\n") - ); - - return files; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs b/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs deleted file mode 100644 index 96c7de1e..00000000 --- a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs +++ /dev/null @@ -1,55 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.CodeGeneration.CodeGenerator; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration.Unity.Plugins { - - public class WarnIfCompilationErrorsDoctor : IDoctor, IConfigurable { - - public string name { get { return "Warn If Compilation Errors"; } } - public int priority { get { return 0; } } - public bool runInDryMode { get { return true; } } - - public Dictionary defaultProperties { get { return new Dictionary(); } } - - readonly CodeGeneratorConfig _codeGeneratorConfig = new CodeGeneratorConfig(); - - public void Configure(Preferences preferences) { - _codeGeneratorConfig.Configure(preferences); - } - - public Diagnosis Diagnose() { - var isStandalone = AppDomain.CurrentDomain - .GetAllTypes() - .Any(type => type.FullName == "DesperateDevs.CodeGeneration.CodeGenerator.CLI.Program"); - - if (isStandalone) { - var typeName = typeof(WarnIfCompilationErrorsPreProcessor).FullName; - if (_codeGeneratorConfig.preProcessors.Contains(typeName)) { - return new Diagnosis( - typeName + " uses Unity APIs but is used outside of Unity!", - "Remove " + typeName + " from CodeGenerator.PreProcessors", - DiagnosisSeverity.Error - ); - } - } - - return Diagnosis.Healthy; - } - - public bool Fix() { - var preProcessorList = _codeGeneratorConfig.preProcessors.ToList(); - var removed = preProcessorList.Remove(typeof(WarnIfCompilationErrorsPreProcessor).FullName); - if (removed) { - _codeGeneratorConfig.preProcessors = preProcessorList.ToArray(); - - return true; - } - - return false; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs b/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs deleted file mode 100644 index ecfaca29..00000000 --- a/src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs +++ /dev/null @@ -1,34 +0,0 @@ -ο»Ώusing System; -using UnityEditor; - -namespace DesperateDevs.CodeGeneration.Unity.Plugins { - - public class WarnIfCompilationErrorsPreProcessor : IPreProcessor { - - public string name { get { return "Warn If Compilation Errors"; } } - public int priority { get { return -5; } } - public bool runInDryMode { get { return true; } } - - public void PreProcess() { - string errorMessage = null; - if (EditorApplication.isCompiling) { - errorMessage = "Cannot generate because Unity is still compiling. Please wait..."; - } - - var assembly = typeof(Editor).Assembly; - - var logEntries = assembly.GetType("UnityEditorInternal.LogEntries") - ?? assembly.GetType("UnityEditor.LogEntries"); - - logEntries.GetMethod("Clear").Invoke(new object(), null); - var canCompile = (int)logEntries.GetMethod("GetCount").Invoke(new object(), null) == 0; - if (!canCompile) { - errorMessage = "There are compilation errors! Please fix all errors first."; - } - - if (errorMessage != null) { - throw new Exception(errorMessage + "\n\n" + "You can disable this warning by removing '" + name + "' from the Pre Processors."); - } - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs b/src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs deleted file mode 100644 index 7e1f0bf2..00000000 --- a/src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs +++ /dev/null @@ -1,24 +0,0 @@ -ο»Ώusing DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration { - - public class CodeGenFile { - - public string fileName { get; set; } - - public string fileContent { - get { return _fileContent; } - set { _fileContent = value.ToUnixLineEndings(); } - } - - public string generatorName { get; set; } - - string _fileContent; - - public CodeGenFile(string fileName, string fileContent, string generatorName) { - this.fileName = fileName; - this.fileContent = fileContent; - this.generatorName = generatorName; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs b/src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs deleted file mode 100644 index 003f8711..00000000 --- a/src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs +++ /dev/null @@ -1,33 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using System.Linq; -using DesperateDevs.Utils; - -namespace DesperateDevs.CodeGeneration { - - public class CodeGeneratorData : Dictionary { - - public CodeGeneratorData() { - } - - public CodeGeneratorData(CodeGeneratorData data) : base(data) { - } - - public string ReplacePlaceholders(string template) { - return this.Aggregate(template, (current, kv) => ReplacePlaceholders(current, kv.Key, kv.Value.ToString())); - } - - public string ReplacePlaceholders(string template, string key, string value) { - const string placeholderFormat = @"${{{0}}}"; - - var upperKey = string.Format(placeholderFormat, key.UppercaseFirst()); - var lowerKey = string.Format(placeholderFormat, key.LowercaseFirst()); - var upperValue = value.UppercaseFirst(); - var lowerValue = value.LowercaseFirst(); - - template = template.Replace(upperKey, upperValue); - template = template.Replace(lowerKey, lowerValue); - - return template; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/DesperateDevs.CodeGeneration.csproj b/src/DesperateDevs.CodeGeneration/src/DesperateDevs.CodeGeneration.csproj deleted file mode 100644 index 86c566cc..00000000 --- a/src/DesperateDevs.CodeGeneration/src/DesperateDevs.CodeGeneration.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.CodeGeneration/src/Diagnosis.cs b/src/DesperateDevs.CodeGeneration/src/Diagnosis.cs deleted file mode 100644 index 0278df54..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Diagnosis.cs +++ /dev/null @@ -1,24 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public enum DiagnosisSeverity { - Healthy, - Hint, - Warning, - Error - } - - public class Diagnosis { - - public static Diagnosis Healthy { get { return new Diagnosis(null, null, DiagnosisSeverity.Healthy); } } - - public readonly string symptoms; - public readonly string treatment; - public readonly DiagnosisSeverity severity; - - public Diagnosis(string symptoms, string treatment, DiagnosisSeverity severity) { - this.symptoms = symptoms; - this.treatment = treatment; - this.severity = severity; - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs deleted file mode 100644 index 78f76300..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs +++ /dev/null @@ -1,9 +0,0 @@ -ο»Ώusing System.Collections.Generic; - -namespace DesperateDevs.CodeGeneration { - - public interface ICachable { - - Dictionary objectCache { get; set; } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs deleted file mode 100644 index 0d5171ec..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs +++ /dev/null @@ -1,9 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public interface ICodeGenerationPlugin { - - string name { get; } - int priority { get; } - bool runInDryMode { get; } - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs deleted file mode 100644 index 63bd1e79..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace DesperateDevs.CodeGeneration { - - public interface ICodeGenerator : ICodeGenerationPlugin { - - CodeGenFile[] Generate(CodeGeneratorData[] data); - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs deleted file mode 100644 index 91430340..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public interface IDataProvider : ICodeGenerationPlugin { - - CodeGeneratorData[] GetData(); - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs deleted file mode 100644 index 5d4ae8ba..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs +++ /dev/null @@ -1,8 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public interface IDoctor : ICodeGenerationPlugin { - - Diagnosis Diagnose(); - bool Fix(); - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs deleted file mode 100644 index c86573b6..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public interface IPostProcessor : ICodeGenerationPlugin { - - CodeGenFile[] PostProcess(CodeGenFile[] files); - } -} diff --git a/src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs b/src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs deleted file mode 100644 index 7f4a0c6b..00000000 --- a/src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.CodeGeneration { - - public interface IPreProcessor : ICodeGenerationPlugin { - - void PreProcess(); - } -} diff --git a/src/DesperateDevs.CodeGeneration/tests/CodeGenFileTests.cs b/src/DesperateDevs.CodeGeneration/tests/CodeGenFileTests.cs deleted file mode 100644 index f29f7243..00000000 --- a/src/DesperateDevs.CodeGeneration/tests/CodeGenFileTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.CodeGeneration.Tests -{ - public class CodeGenFileTests - { - [Fact] - public void SetFields() - { - var file = new CodeGenFile("name.cs", "content", "MyGenerator"); - file.fileName.Should().Be("name.cs"); - file.fileContent.Should().Be("content"); - file.generatorName.Should().Be("MyGenerator"); - } - - [Fact] - public void ConvertsToUnixNewLines() - { - var file = new CodeGenFile(null, "line1\r\nline2\r", null); - file.fileContent.Should().Be("line1\nline2\n"); - } - - [Fact] - public void ConvertsToUnixNewLinesWhenSettingFileContent() - { - var file = new CodeGenFile(null, string.Empty, null); - file.fileContent = "line1\r\nline2\r"; - file.fileContent.Should().Be("line1\nline2\n"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/tests/CodeGeneratorDataTests.cs b/src/DesperateDevs.CodeGeneration/tests/CodeGeneratorDataTests.cs deleted file mode 100644 index c9f2d8b3..00000000 --- a/src/DesperateDevs.CodeGeneration/tests/CodeGeneratorDataTests.cs +++ /dev/null @@ -1,43 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.CodeGeneration.Tests -{ - public class CodeGeneratorDataTests - { - readonly CodeGeneratorData _data; - - public CodeGeneratorDataTests() - { - _data = new CodeGeneratorData {["TestKey"] = "TestValue"}; - } - - [Fact] - public void AddsKeyAndValue() - { - _data["TestKey"].Should().Be("TestValue"); - } - - [Fact] - public void ReplacesPlaceholders() - { - _data.ReplacePlaceholders("Hello, ${TestKey}") - .Should().Be("Hello, TestValue"); - } - - [Fact] - public void RespectsCaseOfPlaceholder() - { - _data.ReplacePlaceholders("Hello, ${testKey}") - .Should().Be("Hello, testValue"); - } - - [Fact] - public void ClonesData() - { - var clone = new CodeGeneratorData(_data); - clone.Count.Should().Be(_data.Count); - clone["TestKey"].Should().Be("TestValue"); - } - } -} diff --git a/src/DesperateDevs.CodeGeneration/tests/DesperateDevs.CodeGeneration.Tests.csproj b/src/DesperateDevs.CodeGeneration/tests/DesperateDevs.CodeGeneration.Tests.csproj deleted file mode 100644 index 7a82ff4d..00000000 --- a/src/DesperateDevs.CodeGeneration/tests/DesperateDevs.CodeGeneration.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Extensions/benchmarks/AppDomainExtensionBenchmarks.cs b/src/DesperateDevs.Extensions/benchmarks/AppDomainExtensionBenchmarks.cs new file mode 100644 index 00000000..71084ea0 --- /dev/null +++ b/src/DesperateDevs.Extensions/benchmarks/AppDomainExtensionBenchmarks.cs @@ -0,0 +1,19 @@ +using System; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; +using DesperateDevs.Reflection; + +namespace DesperateDevs.Extensions.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class AppDomainExtensionBenchmarks + { + [Benchmark] + public void GetAllTypes() + { + AppDomain.CurrentDomain.GetAllTypes(); + } + } +} diff --git a/src/DesperateDevs.Extensions/benchmarks/DesperateDevs.Extensions.Benchmarks.csproj b/src/DesperateDevs.Extensions/benchmarks/DesperateDevs.Extensions.Benchmarks.csproj new file mode 100644 index 00000000..fc1f407d --- /dev/null +++ b/src/DesperateDevs.Extensions/benchmarks/DesperateDevs.Extensions.Benchmarks.csproj @@ -0,0 +1,19 @@ +ο»Ώ + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + + + + + + diff --git a/src/DesperateDevs.Extensions/benchmarks/DictionaryExtensionBenchmarks.cs b/src/DesperateDevs.Extensions/benchmarks/DictionaryExtensionBenchmarks.cs new file mode 100644 index 00000000..ec52f430 --- /dev/null +++ b/src/DesperateDevs.Extensions/benchmarks/DictionaryExtensionBenchmarks.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace DesperateDevs.Extensions.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class DictionaryExtensionBenchmarks + { + [Params(10, 100)] + public int Factor { get; set; } + + [Benchmark] + public Dictionary Merge() + { + var d1 = CreateDict(0, 1); + var d2 = CreateDict(1, 2); + var d3 = CreateDict(2, 3); + var d4 = CreateDict(3, 4); + var d5 = CreateDict(4, 5); + return d1.Merge(new[] {d2, d3, d4, d5}); + } + + Dictionary CreateDict(int start, int end) + { + start *= Factor; + end *= Factor; + var dict = new Dictionary(end - start); + for (var i = start; i < end; i++) + { + var key = i.ToString(); + dict[key] = key; + } + + return dict; + } + } +} diff --git a/src/DesperateDevs.Extensions/benchmarks/Program.cs b/src/DesperateDevs.Extensions/benchmarks/Program.cs new file mode 100644 index 00000000..2a716964 --- /dev/null +++ b/src/DesperateDevs.Extensions/benchmarks/Program.cs @@ -0,0 +1,14 @@ +ο»Ώusing BenchmarkDotNet.Running; + +namespace DesperateDevs.Extensions.Benchmarks +{ + static class Program + { + public static void Main(string[] args) + { + // BenchmarkRunner.Run(typeof(AppDomainExtensionBenchmarks)); + // BenchmarkRunner.Run(typeof(DictionaryExtensionBenchmarks)); + BenchmarkRunner.Run(typeof(StringExtensionBenchmarks)); + } + } +} diff --git a/src/DesperateDevs.Extensions/benchmarks/StringExtensionBenchmarks.cs b/src/DesperateDevs.Extensions/benchmarks/StringExtensionBenchmarks.cs new file mode 100644 index 00000000..54d848ed --- /dev/null +++ b/src/DesperateDevs.Extensions/benchmarks/StringExtensionBenchmarks.cs @@ -0,0 +1,32 @@ +using System.Linq; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace DesperateDevs.Extensions.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class StringExtensionBenchmarks + { + readonly string[] _values; + readonly string _csv; + + public StringExtensionBenchmarks() + { + _values = new string[10000]; + _csv = string.Empty; + for (var i = 0; i < _values.Length; i++) + { + _values[i] = $"Number {i.ToString()}"; + _csv += $"Number {i},"; + } + } + + [Benchmark] + public string ToCSV() => _values.ToCSV(false, true); + + [Benchmark] + public string[] FromCSV() => _csv.FromCSV(true).ToArray(); + } +} diff --git a/src/DesperateDevs.Extensions/src/DesperateDevs.Extensions.csproj b/src/DesperateDevs.Extensions/src/DesperateDevs.Extensions.csproj new file mode 100644 index 00000000..3458b685 --- /dev/null +++ b/src/DesperateDevs.Extensions/src/DesperateDevs.Extensions.csproj @@ -0,0 +1,8 @@ + + + + $(DefaultTargetFramework) + 1.0.0 + + + diff --git a/src/DesperateDevs.Extensions/src/DictionaryExtension.cs b/src/DesperateDevs.Extensions/src/DictionaryExtension.cs new file mode 100644 index 00000000..58c214e5 --- /dev/null +++ b/src/DesperateDevs.Extensions/src/DictionaryExtension.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace DesperateDevs.Extensions +{ + public static class DictionaryExtension + { + public static Dictionary Merge( + this Dictionary source, + Dictionary dictionary + ) + { + foreach (var kvp in dictionary) + source[kvp.Key] = kvp.Value; + + return source; + } + + public static Dictionary Merge( + this Dictionary dictionary, + IEnumerable> dictionaries + ) + { + foreach (var dict in dictionaries) + foreach (var kvp in dict) + dictionary[kvp.Key] = kvp.Value; + + return dictionary; + } + } +} diff --git a/src/DesperateDevs.Extensions/src/StringExtension.cs b/src/DesperateDevs.Extensions/src/StringExtension.cs new file mode 100644 index 00000000..3f1db2f5 --- /dev/null +++ b/src/DesperateDevs.Extensions/src/StringExtension.cs @@ -0,0 +1,79 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; + +namespace DesperateDevs.Extensions +{ + public static class StringExtension + { + public static string ToUpperFirst(this string str) => string.IsNullOrEmpty(str) + ? str + : char.ToUpper(str[0]) + str.Substring(1); + + public static string ToLowerFirst(this string str) => string.IsNullOrEmpty(str) + ? str + : char.ToLower(str[0]) + str.Substring(1); + + public static string ToUnixLineEndings(this string str) => str + .Replace("\r\n", "\n") + .Replace("\r", "\n"); + + public static string ToUnixPath(this string str) => str.Replace("\\", "/"); + + public static string ToCSV(this IEnumerable values, bool minified, bool removeEmptyEntries) => + string.Join(minified ? "," : ", ", removeEmptyEntries + ? values + .Where(value => !string.IsNullOrEmpty(value)) + .Select(value => value.Trim()) + : values + .Select(value => value.Trim())); + + public static IEnumerable FromCSV(this string values, bool removeEmptyEntries) => values + .Split(new[] {','}, removeEmptyEntries + ? StringSplitOptions.RemoveEmptyEntries + : StringSplitOptions.None) + .Select(value => value.Trim()); + + public static string ToSpacedCamelCase(this string text) + { + if (!string.IsNullOrEmpty(text)) + { + var sb = new System.Text.StringBuilder(text.Length * 2); + sb.Append(char.ToUpper(text[0])); + for (var i = 1; i < text.Length; i++) + { + if (char.IsUpper(text[i]) && text[i - 1] != ' ') + sb.Append(' '); + + sb.Append(text[i]); + } + + return sb.ToString(); + } + else + { + return text; + } + } + + public static string MakePathRelativeTo(this string path, string currentDirectory) + { + currentDirectory = CreateUri(currentDirectory); + path = CreateUri(path); + if (path.StartsWith(currentDirectory)) + { + path = path.Replace(currentDirectory, string.Empty); + if (path.StartsWith("/")) + path = path.Substring(1); + } + + return path; + } + + public static string CreateUri(this string path) + { + var uri = new Uri(path); + return Uri.UnescapeDataString(uri.AbsolutePath + uri.Fragment); + } + } +} diff --git a/src/DesperateDevs.Extensions/src/TypeExtension.cs b/src/DesperateDevs.Extensions/src/TypeExtension.cs new file mode 100644 index 00000000..e296c365 --- /dev/null +++ b/src/DesperateDevs.Extensions/src/TypeExtension.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; + +namespace DesperateDevs.Extensions +{ + public static class TypeExtension + { + public static bool ImplementsInterface(this Type type) => + !type.IsInterface && type.GetInterface(typeof(T).FullName) != null; + + /// Generates a simplified type string for the specified type that + /// can be compiled. This is useful for code generation that will + /// produce compilable source code. + /// e.g. int instead of System.Int32 + /// e.g. System.Collections.Generic.Dictionary instead of + /// System.Collections.Generic.Dictionary`2[System.Int32,System.String] + public static string ToCompilableString(this Type type) + { + if (BuiltInTypesToString.TryGetValue(type.FullName, out var fullName)) + return fullName; + + if (type.IsGenericType) + { + var genericArguments = type.GetGenericArguments() + .Select(argType => argType.ToCompilableString()); + return $"{type.FullName.Split('`')[0]}<{string.Join(", ", genericArguments)}>"; + } + + if (type.IsArray) + return $"{type.GetElementType().ToCompilableString()}[{new string(',', type.GetArrayRank() - 1)}]"; + + if (type.IsNested) + return type.FullName.Replace('+', '.'); + + return type.FullName; + } + + /// Tries to find and create a type based on the specified type string. + public static Type ToType(this string typeString) + { + var fullTypeName = GenerateTypeString(typeString); + var type = Type.GetType(fullTypeName); + if (type != null) + return type; + + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + type = assembly.GetType(fullTypeName); + if (type != null) + return type; + } + + return null; + } + + public static string ShortTypeName(this string fullTypeName) + { + var split = fullTypeName.Split('.'); + return split[split.Length - 1]; + } + + public static string RemoveDots(this string fullTypeName) => + fullTypeName.Replace(".", string.Empty); + + static string GenerateTypeString(string typeString) + { + if (BuiltInTypeStrings.TryGetValue(typeString, out var fullName)) + { + typeString = fullName; + } + else + { + typeString = GenerateGenericArguments(typeString); + typeString = GenerateArray(typeString); + } + + return typeString; + } + + static string GenerateGenericArguments(string typeString) + { + const string genericArgsPattern = @"<(?.*)>"; + var separator = new[] {", "}; + typeString = Regex.Replace(typeString, genericArgsPattern, + match => + { + var ts = GenerateTypeString(match.Groups["arg"].Value); + var argsCount = ts.Split(separator, StringSplitOptions.None).Length; + return $"`{argsCount}[{ts}]"; + }); + + return typeString; + } + + static string GenerateArray(string typeString) + { + const string arrayPattern = @"(?[^\[]*)(?\[,*\])"; + typeString = Regex.Replace(typeString, arrayPattern, + match => + { + var type = GenerateTypeString(match.Groups["type"].Value); + var rank = match.Groups["rank"].Value; + return type + rank; + }); + + return typeString; + } + + static readonly Dictionary BuiltInTypesToString = new Dictionary + { + {"System.Boolean", "bool"}, + {"System.Byte", "byte"}, + {"System.SByte", "sbyte"}, + {"System.Char", "char"}, + {"System.Decimal", "decimal"}, + {"System.Double", "double"}, + {"System.Single", "float"}, + {"System.Int32", "int"}, + {"System.UInt32", "uint"}, + {"System.Int64", "long"}, + {"System.UInt64", "ulong"}, + {"System.Object", "object"}, + {"System.Int16", "short"}, + {"System.UInt16", "ushort"}, + {"System.String", "string"}, + {"System.Void", "void"} + }; + + static readonly Dictionary BuiltInTypeStrings = new Dictionary + { + {"bool", "System.Boolean"}, + {"byte", "System.Byte"}, + {"sbyte", "System.SByte"}, + {"char", "System.Char"}, + {"decimal", "System.Decimal"}, + {"double", "System.Double"}, + {"float", "System.Single"}, + {"int", "System.Int32"}, + {"uint", "System.UInt32"}, + {"long", "System.Int64"}, + {"ulong", "System.UInt64"}, + {"object", "System.Object"}, + {"short", "System.Int16"}, + {"ushort", "System.UInt16"}, + {"string", "System.String"}, + {"void", "System.Void"} + }; + } +} diff --git a/src/DesperateDevs.Extensions/tests/DesperateDevs.Extensions.Tests.csproj b/src/DesperateDevs.Extensions/tests/DesperateDevs.Extensions.Tests.csproj new file mode 100644 index 00000000..ea9dbd7e --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/DesperateDevs.Extensions.Tests.csproj @@ -0,0 +1,22 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + diff --git a/src/DesperateDevs.Extensions/tests/DictionaryExtensionTests.cs b/src/DesperateDevs.Extensions/tests/DictionaryExtensionTests.cs new file mode 100644 index 00000000..b743451d --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/DictionaryExtensionTests.cs @@ -0,0 +1,40 @@ +ο»Ώusing System.Collections.Generic; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Extensions.Tests +{ + public class DictionaryExtensionTests + { + [Fact] + public void MergesIntoDictionary() + { + var d1 = new Dictionary + { + {"k1", "v1"}, + {"k2", "v2"} + }; + + var d2 = new Dictionary + { + {"k1", "v2"}, + {"k3", "v3"} + }; + + var d3 = new Dictionary + { + {"k1", "v3"}, + {"k4", "v4"} + }; + + var merged = d1.Merge(new[] {d2, d3}); + merged.Should().BeSameAs(d1); + merged.Should().HaveCount(4); + merged.Keys.Should().Contain("k1"); + merged.Keys.Should().Contain("k2"); + merged.Keys.Should().Contain("k3"); + merged.Keys.Should().Contain("k4"); + merged["k1"].Should().Be("v3"); + } + } +} diff --git a/src/DesperateDevs.Extensions/tests/StringExtensionTests.cs b/src/DesperateDevs.Extensions/tests/StringExtensionTests.cs new file mode 100644 index 00000000..1570bc88 --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/StringExtensionTests.cs @@ -0,0 +1,63 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace DesperateDevs.Extensions.Tests +{ + public class StringExtensionTests + { + [Fact] + public void UppercaseFirst() + { + string.Empty.ToUpperFirst().Should().Be(string.Empty); + "Test".ToUpperFirst().Should().Be("Test"); + "test".ToUpperFirst().Should().Be("Test"); + } + + [Fact] + public void LowercaseFirst() + { + string.Empty.ToLowerFirst().Should().Be(string.Empty); + "Test".ToLowerFirst().Should().Be("test"); + "test".ToLowerFirst().Should().Be("test"); + } + + [Fact] + public void ToUnixLineEndings() => "1\r\n2\r3\n".ToUnixLineEndings().Should().Be("1\n2\n3\n"); + + [Fact] + public void ToUnixPath() => "a/b\\c\\d/e".ToUnixPath().Should().Be("a/b/c/d/e"); + + [Fact] + public void ToCsv() => new[] {"1", " 2", "", "3 "}.ToCSV(false, false).Should().Be("1, 2, , 3"); + + [Fact] + public void ToCsvMinified() => new[] {"1", " 2", "", "3 "}.ToCSV(true, false).Should().Be("1,2,,3"); + + [Fact] + public void ToCsvRemoveEmptyEntries() => new[] {"1", " 2", "", "3 "}.ToCSV(false, true).Should().Be("1, 2, 3"); + + [Fact] + public void ToCsvMinifiedRemoveEmptyEntries() => new[] {"1", " 2", "", "3 "}.ToCSV(true, true).Should().Be("1,2,3"); + + [Fact] + public void FromCsv() => "1,2 ,, 3".FromCSV(false).Should().BeEquivalentTo("1", "2", "", "3"); + + [Fact] + public void FromCsvRemoveEmptyEntries() => "1,2 ,, 3".FromCSV(true).Should().BeEquivalentTo("1", "2", "3"); + + [Fact] + public void ToSpacedCamelCase() + { + string.Empty.ToSpacedCamelCase().Should().Be(string.Empty); + "Test".ToSpacedCamelCase().Should().Be("Test"); + "Test Test".ToSpacedCamelCase().Should().Be("Test Test"); + "ThisIsATest".ToSpacedCamelCase().Should().Be("This Is A Test"); + } + + [Fact] + public void MakesPathRelativeToParentDirs() => "/home/DesperateDevs/test/file".MakePathRelativeTo("/home/DesperateDevs").Should().Be("test/file"); + + [Fact] + public void CannotMakePathRelativeToSubDirs() => "/home".MakePathRelativeTo("/home/DesperateDevs").Should().Be("/home"); + } +} diff --git a/src/DesperateDevs.Extensions/tests/TypeExtensionTests.cs b/src/DesperateDevs.Extensions/tests/TypeExtensionTests.cs new file mode 100644 index 00000000..c579b16a --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/TypeExtensionTests.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using DesperateDevs.Extensions.Tests.Fixtures; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Extensions.Tests +{ + public class TypeExtensionTests + { + [Fact] + public void ReturnsFalseIfTypeDoesNotImplementInterface() + { + typeof(object).ImplementsInterface().Should().BeFalse(); + } + + [Fact] + public void ReturnsFalseIfTypeIsSame() + { + typeof(ITestInterface).ImplementsInterface().Should().BeFalse(); + } + + [Fact] + public void ReturnFalseIfTypeIsInterface() + { + typeof(ITestSubInterface).ImplementsInterface().Should().BeFalse(); + } + + [Fact] + public void ReturnsTrueIfTypeImplementsInterface() + { + typeof(TestInterfaceClass).ImplementsInterface().Should().BeTrue(); + } + + [Theory] + // built-in types, https://msdn.microsoft.com/en-us/library/ya5y69ds.aspx + [InlineData(typeof(bool), "bool")] + [InlineData(typeof(byte), "byte")] + [InlineData(typeof(sbyte), "sbyte")] + [InlineData(typeof(char), "char")] + [InlineData(typeof(decimal), "decimal")] + [InlineData(typeof(double), "double")] + [InlineData(typeof(float), "float")] + [InlineData(typeof(int), "int")] + [InlineData(typeof(uint), "uint")] + [InlineData(typeof(long), "long")] + [InlineData(typeof(ulong), "ulong")] + [InlineData(typeof(object), "object")] + [InlineData(typeof(short), "short")] + [InlineData(typeof(ushort), "ushort")] + [InlineData(typeof(string), "string")] + [InlineData(typeof(void), "void")] + // arrays + [InlineData(typeof(int[]), "int[]")] + [InlineData(typeof(int[,]), "int[,]")] + [InlineData(typeof(int[,,]), "int[,,]")] + [InlineData(typeof(int[][]), "int[][]")] + // generics + [InlineData(typeof(List), "System.Collections.Generic.List")] + [InlineData(typeof(HashSet), "System.Collections.Generic.HashSet")] + [InlineData(typeof(Dictionary), "System.Collections.Generic.Dictionary")] + // enum + [InlineData(typeof(TestEnum), "DesperateDevs.Extensions.Tests.Fixtures.TestEnum")] + [InlineData(typeof(TestNestedEnumClass.NestedEnum), "DesperateDevs.Extensions.Tests.Fixtures.TestNestedEnumClass.NestedEnum")] + // custom types + [InlineData(typeof(TestClass), "DesperateDevs.Extensions.Tests.Fixtures.TestClass")] + [InlineData(typeof(TestNestedClass.TestInnerClass), "DesperateDevs.Extensions.Tests.Fixtures.TestNestedClass.TestInnerClass")] + // mixed + [InlineData(typeof(List[,]), "System.Collections.Generic.List[,]")] + [InlineData(typeof(Dictionary[,], TestClass>[]), "System.Collections.Generic.Dictionary[,], DesperateDevs.Extensions.Tests.Fixtures.TestClass>[]")] + public void ToCompilableString(Type type, string typeName) + { + type.ToCompilableString().Should().Be(typeName); + } + + [Theory] + // built-in types + [InlineData("bool", typeof(bool))] + [InlineData("byte", typeof(byte))] + [InlineData("sbyte", typeof(sbyte))] + [InlineData("char", typeof(char))] + [InlineData("decimal", typeof(decimal))] + [InlineData("double", typeof(double))] + [InlineData("float", typeof(float))] + [InlineData("int", typeof(int))] + [InlineData("uint", typeof(uint))] + [InlineData("long", typeof(long))] + [InlineData("ulong", typeof(ulong))] + [InlineData("object", typeof(object))] + [InlineData("short", typeof(short))] + [InlineData("ushort", typeof(ushort))] + [InlineData("string", typeof(string))] + [InlineData("void", typeof(void))] + // arrays + [InlineData("int[]", typeof(int[]))] + [InlineData("int[,]", typeof(int[,]))] + [InlineData("int[,,]", typeof(int[,,]))] + [InlineData("int[][]", typeof(int[][]))] + // generics + [InlineData("System.Collections.Generic.List", typeof(List))] + // [InlineData("System.Collections.Generic.HashSet", typeof(HashSet))] + // [InlineData("System.Collections.Generic.Dictionary", typeof(Dictionary))] + // enum + [InlineData("DesperateDevs.Extensions.Tests.Fixtures.TestEnum", typeof(TestEnum))] + [InlineData("DesperateDevs.Extensions.Tests.Fixtures.TestNestedEnumClass+NestedEnum", typeof(TestNestedEnumClass.NestedEnum))] + // custom types + [InlineData("DesperateDevs.Extensions.Tests.Fixtures.TestClass", typeof(TestClass))] + [InlineData("DesperateDevs.Extensions.Tests.Fixtures.TestNestedClass+TestInnerClass", typeof(TestNestedClass.TestInnerClass))] + // mixed + [InlineData("System.Collections.Generic.List[,]", typeof(List[,]))] + // [InlineData("System.Collections.Generic.Dictionary[,], DesperateDevs.Extensions.Tests.Fixtures.TestClass>[]", typeof(Dictionary[,], TestClass>[]))] +// + public void ToType(string typeName, Type type) + { + typeName.ToType().Should().Be(type); + } + + [Fact] + public void ToTypeReturnsNullWhenTypeNotFound() + { + "unknown".ToType().Should().BeNull(); + } + + [Fact] + public void ReturnsShortTypeNameForShortTypeName() + { + "MyClass".ShortTypeName().Should().Be("MyClass"); + } + + [Fact] + public void ReturnsShortTypeNameForFullTypeName() + { + "Namespace.Module.MyClass".ShortTypeName().Should().Be("MyClass"); + } + + [Fact] + public void ReturnsTypeNameForShortTypeName() + { + "MyClass".RemoveDots().Should().Be("MyClass"); + } + + [Fact] + public void ReturnsTypeNameWithoutDotsForFullTypeName() + { + "Namespace.Module.MyClass".RemoveDots().Should().Be("NamespaceModuleMyClass"); + } + } +} diff --git a/src/DesperateDevs.Extensions/tests/fixtures/ITestInterface.cs b/src/DesperateDevs.Extensions/tests/fixtures/ITestInterface.cs new file mode 100644 index 00000000..71ddbca4 --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/ITestInterface.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public interface ITestInterface { } +} diff --git a/src/DesperateDevs.Extensions/tests/fixtures/ITestSubInterface.cs b/src/DesperateDevs.Extensions/tests/fixtures/ITestSubInterface.cs new file mode 100644 index 00000000..bc6c1adf --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/ITestSubInterface.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public interface ITestSubInterface : ITestInterface { } +} \ No newline at end of file diff --git a/src/DesperateDevs.Extensions/tests/fixtures/TestClass.cs b/src/DesperateDevs.Extensions/tests/fixtures/TestClass.cs new file mode 100644 index 00000000..c786d15b --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/TestClass.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public class TestClass { } +} \ No newline at end of file diff --git a/src/DesperateDevs.Extensions/tests/fixtures/TestEnum.cs b/src/DesperateDevs.Extensions/tests/fixtures/TestEnum.cs new file mode 100644 index 00000000..db146d71 --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/TestEnum.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public enum TestEnum { } +} \ No newline at end of file diff --git a/src/DesperateDevs.Extensions/tests/fixtures/TestInterfaceClass.cs b/src/DesperateDevs.Extensions/tests/fixtures/TestInterfaceClass.cs new file mode 100644 index 00000000..208448c6 --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/TestInterfaceClass.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public class TestInterfaceClass : ITestInterface { } +} \ No newline at end of file diff --git a/src/DesperateDevs.Extensions/tests/fixtures/TestNestedClass.cs b/src/DesperateDevs.Extensions/tests/fixtures/TestNestedClass.cs new file mode 100644 index 00000000..19e286a5 --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/TestNestedClass.cs @@ -0,0 +1,7 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public class TestNestedClass + { + public class TestInnerClass { } + } +} \ No newline at end of file diff --git a/src/DesperateDevs.Extensions/tests/fixtures/TestNestedEnumClass.cs b/src/DesperateDevs.Extensions/tests/fixtures/TestNestedEnumClass.cs new file mode 100644 index 00000000..f652b57c --- /dev/null +++ b/src/DesperateDevs.Extensions/tests/fixtures/TestNestedEnumClass.cs @@ -0,0 +1,7 @@ +namespace DesperateDevs.Extensions.Tests.Fixtures +{ + public class TestNestedEnumClass + { + public enum NestedEnum { } + } +} \ No newline at end of file diff --git a/src/DesperateDevs.Logging.Appenders/src/ConsoleAppender.cs b/src/DesperateDevs.Logging.Appenders/src/ConsoleAppender.cs deleted file mode 100644 index 8b5c07ba..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/ConsoleAppender.cs +++ /dev/null @@ -1,25 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using System; - -namespace DesperateDevs.Logging.Appenders { - - public class ConsoleAppender { - - readonly Dictionary _consoleColors; - - public ConsoleAppender(Dictionary consoleColors) { - _consoleColors = consoleColors; - } - - public void WriteLine(Logger logger, LogLevel logLevel, string message) { - ConsoleColor color; - if (_consoleColors.TryGetValue(logLevel, out color)) { - Console.ForegroundColor = color; - Console.WriteLine(message); - Console.ResetColor(); - } else { - Console.WriteLine(message); - } - } - } -} diff --git a/src/DesperateDevs.Logging.Appenders/src/DesperateDevs.Logging.Appenders.csproj b/src/DesperateDevs.Logging.Appenders/src/DesperateDevs.Logging.Appenders.csproj deleted file mode 100644 index cf348ea3..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/DesperateDevs.Logging.Appenders.csproj +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - diff --git a/src/DesperateDevs.Logging.Appenders/src/FileWriterAppender.cs b/src/DesperateDevs.Logging.Appenders/src/FileWriterAppender.cs deleted file mode 100644 index b7790706..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/FileWriterAppender.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.IO; - -namespace DesperateDevs.Logging.Appenders { - - public class FileWriterAppender { - - readonly object _lock = new object(); - readonly string _filePath; - - public FileWriterAppender(string filePath) { - _filePath = filePath; - } - - public void WriteLine(Logger logger, LogLevel logLevel, string message) { - lock (_lock) { - using (var writer = new StreamWriter(_filePath, true)) { - writer.WriteLine(message); - } - } - } - - public void ClearFile() { - lock (_lock) { - using (var writer = new StreamWriter(_filePath, false)) { - writer.Write(string.Empty); - } - } - } - } -} diff --git a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/AbstractTcpSocketAppender.cs b/src/DesperateDevs.Logging.Appenders/src/SocketAppender/AbstractTcpSocketAppender.cs deleted file mode 100644 index d1b11876..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/AbstractTcpSocketAppender.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System.Collections.Generic; -using System.Net; -using DesperateDevs.Networking; - -namespace DesperateDevs.Logging.Appenders { - - public abstract class AbstractTcpSocketAppender { - - public AbstractTcpSocket socket { get; private set; } - - readonly Logger _logger = fabl.GetLogger(typeof(AbstractTcpSocketAppender)); - - readonly List _history = new List(); - - public void Connect(IPAddress ip, int port) { - var client = new TcpClientSocket(); - socket = client; - client.OnConnected += sender => onConnected(); - client.Connect(ip, port); - } - - public void Listen(int port) { - var server = new TcpServerSocket(); - socket = server; - server.OnClientConnected += (sender, client) => onConnected(); - server.Listen(port); - } - - public void Disconnect() { - socket.Disconnect(); - } - - public void Send(Logger logger, LogLevel logLevel, string message) { - if (isSocketReady()) { - socket.Send(serializeMessage(logger, logLevel, message)); - } else { - _history.Add(new HistoryItem(logger, logLevel, message)); - } - } - - bool isSocketReady() { - if (socket != null) { - var server = socket as TcpServerSocket; - if (server != null) { - return server.count > 0; - } - - var client = socket as TcpClientSocket; - if (client != null) { - return client.isConnected; - } - } - - return false; - } - - void onConnected() { - if (_history.Count > 0) { - Send(_logger, LogLevel.Debug, "Flush history - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - foreach (var item in _history) { - Send(item.logger, item.logLevel, item.message); - } - Send(_logger, LogLevel.Debug, "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - _history.Clear(); - } - } - - protected abstract byte[] serializeMessage(Logger logger, LogLevel logLevel, string message); - - class HistoryItem { - - public readonly Logger logger; - public readonly LogLevel logLevel; - public readonly string message; - - public HistoryItem(Logger logger, LogLevel logLevel, string message) { - this.logger = logger; - this.logLevel = logLevel; - this.message = message; - } - } - } -} diff --git a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/SosMaxAppender.cs b/src/DesperateDevs.Logging.Appenders/src/SocketAppender/SosMaxAppender.cs deleted file mode 100644 index 3b7b6b18..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/SosMaxAppender.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Text; - -namespace DesperateDevs.Logging.Appenders { - - public class SosMaxAppender : AbstractTcpSocketAppender { - - protected override byte[] serializeMessage(Logger logger, LogLevel logLevel, string message) { - return Encoding.UTF8.GetBytes(formatLogMessage(logLevel.ToString(), message)); - } - - string formatLogMessage(string logLevel, string message) { - var lines = message.Split('\n'); - var commandType = lines.Length == 1 ? "showMessage" : "showFoldMessage"; - var isMultiLine = lines.Length > 1; - - return string.Format("!SOS<{0} key=\"{1}\">{2}\0", - commandType, - logLevel, - isMultiLine ? multilineMessage(lines[0], message) : replaceXmlSymbols(message)); - } - - string multilineMessage(string title, string message) { - return "" - + replaceXmlSymbols(title) - + "" - + replaceXmlSymbols(message.Substring(message.IndexOf('\n') + 1)) - + ""; - } - - string replaceXmlSymbols(string str) { - return str.Replace("<", "<") - .Replace(">", ">") - .Replace("<", "") - .Replace(">", "]]>") - .Replace("&", ""); - } - } -} diff --git a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/TcpSocketAppender.cs b/src/DesperateDevs.Logging.Appenders/src/SocketAppender/TcpSocketAppender.cs deleted file mode 100644 index 4e3a5ea3..00000000 --- a/src/DesperateDevs.Logging.Appenders/src/SocketAppender/TcpSocketAppender.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Text; -using DesperateDevs.Networking; - -namespace DesperateDevs.Logging.Appenders { - - public class TcpSocketAppender : AbstractTcpSocketAppender { - - protected override byte[] serializeMessage(Logger logger, LogLevel logLevel, string message) { - return TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(message)); - } - } -} diff --git a/src/DesperateDevs.Logging.Formatters/src/ColorCodeFormatter.cs b/src/DesperateDevs.Logging.Formatters/src/ColorCodeFormatter.cs deleted file mode 100644 index b960e2dd..00000000 --- a/src/DesperateDevs.Logging.Formatters/src/ColorCodeFormatter.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using System.Text; - -namespace DesperateDevs.Logging.Formatters { - - public class ColorCodeFormatter { - - // ANSI COLOR escape codes for colors and other things. - // You can change the color of foreground and background plus bold, italic, underline etc - // For a complete list see http://en.wikipedia.org/wiki/ANSI_escape_code#Colors - - const string Reset = "0m"; - const string ESC = "\x1B["; - - // Foreground colors - const string FG_Black = "30m"; - const string FG_Red = "31m"; - const string FG_Green = "32m"; - const string FG_Yellow = "33m"; - const string FG_Blue = "34m"; - const string FG_Magenta = "35m"; - const string FG_Cyan = "36m"; - const string FG_White = "37m"; - - // Background colors - const string BG_None = ""; - const string BG_Black = "40m"; - const string BG_Red = "41m"; - const string BG_Green = "42m"; - const string BG_Yellow = "43m"; - const string BG_Blue = "44m"; - const string BG_Magenta = "45m"; - const string BG_Cyan = "46m"; - const string BG_White = "47m"; - - - static readonly Dictionary colors = new Dictionary { - { LogLevel.Trace, new [] { FG_White, BG_Cyan } }, - { LogLevel.Debug, new [] { FG_Blue, BG_None } }, - { LogLevel.Info, new [] { FG_Green, BG_None } }, - { LogLevel.Warn, new [] { FG_Yellow, BG_None } }, - { LogLevel.Error, new [] { FG_White, BG_Red } }, - { LogLevel.Fatal, new [] { FG_White, BG_Magenta } } - }; - - readonly StringBuilder _stringBuilder = new StringBuilder(); - - public string FormatMessage(Logger logger, LogLevel logLevel, string message) { - _stringBuilder.Length = 0; - - _stringBuilder.Append(ESC); - _stringBuilder.Append(colors[logLevel][1]); - - _stringBuilder.Append(ESC); - _stringBuilder.Append(colors[logLevel][0]); - - _stringBuilder.Append(message); - - _stringBuilder.Append(ESC); - _stringBuilder.Append(Reset); - - return _stringBuilder.ToString(); - } - } -} diff --git a/src/DesperateDevs.Logging.Formatters/src/DefaultLogMessageFormatter.cs b/src/DesperateDevs.Logging.Formatters/src/DefaultLogMessageFormatter.cs deleted file mode 100644 index 632ea7bc..00000000 --- a/src/DesperateDevs.Logging.Formatters/src/DefaultLogMessageFormatter.cs +++ /dev/null @@ -1,42 +0,0 @@ -ο»Ώusing System; -using System.Text; - -namespace DesperateDevs.Logging.Formatters { - - public class DefaultLogMessageFormatter { - - static readonly int _maxLogLevelLength; - - readonly StringBuilder _stringBuilder = new StringBuilder(); - - static DefaultLogMessageFormatter() { - _maxLogLevelLength = getLongestLogLevelWordLength() + 2; - } - - static int getLongestLogLevelWordLength() { - var maxLength = 0; - var names = Enum.GetNames(typeof(LogLevel)); - foreach (var name in names) { - if (name.Length > maxLength) { - maxLength = name.Length; - } - } - - return maxLength; - } - - public string FormatMessage(Logger logger, LogLevel logLevel, string message) { - var logLevelStr = ("[" + logLevel.ToString().ToUpper() + "]").PadRight(_maxLogLevelLength); - - _stringBuilder.Length = 0; - - _stringBuilder.Append(logLevelStr); - _stringBuilder.Append(" "); - _stringBuilder.Append(logger.name); - _stringBuilder.Append(": "); - _stringBuilder.Append(message); - - return _stringBuilder.ToString(); - } - } -} diff --git a/src/DesperateDevs.Logging.Formatters/src/DesperateDevs.Logging.Formatters.csproj b/src/DesperateDevs.Logging.Formatters/src/DesperateDevs.Logging.Formatters.csproj deleted file mode 100644 index 2f97ef00..00000000 --- a/src/DesperateDevs.Logging.Formatters/src/DesperateDevs.Logging.Formatters.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.Logging.Formatters/src/LogFormatter.cs b/src/DesperateDevs.Logging.Formatters/src/LogFormatter.cs deleted file mode 100644 index 145bbe47..00000000 --- a/src/DesperateDevs.Logging.Formatters/src/LogFormatter.cs +++ /dev/null @@ -1,4 +0,0 @@ -ο»Ώnamespace DesperateDevs.Logging.Formatters { - - public delegate string LogFormatter(Logger logger, LogLevel logLevel, string message); -} diff --git a/src/DesperateDevs.Logging.Formatters/src/TimestampFormatter.cs b/src/DesperateDevs.Logging.Formatters/src/TimestampFormatter.cs deleted file mode 100644 index 8eb58e3b..00000000 --- a/src/DesperateDevs.Logging.Formatters/src/TimestampFormatter.cs +++ /dev/null @@ -1,21 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.Logging.Formatters { - - public class TimestampFormatter { - - readonly string _timeFormat; - - public TimestampFormatter() : this("{0:yyyy/MM/dd/hh:mm:ss:fff}") { - } - - public TimestampFormatter(string timeFormat) { - _timeFormat = timeFormat; - } - - public string FormatMessage(Logger logger, LogLevel logLevel, string message) { - var time = string.Format(_timeFormat, DateTime.Now); - return string.Format(_timeFormat, time + " " + message); - } - } -} diff --git a/src/DesperateDevs.Logging.Formatters/tests/DefaultLogMessageFormatterTests.cs b/src/DesperateDevs.Logging.Formatters/tests/DefaultLogMessageFormatterTests.cs deleted file mode 100644 index 35682ead..00000000 --- a/src/DesperateDevs.Logging.Formatters/tests/DefaultLogMessageFormatterTests.cs +++ /dev/null @@ -1,33 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.Logging.Formatters.Tests -{ - public class DefaultLogMessageFormatterTests - { - readonly DefaultLogMessageFormatter _formatter; - readonly Logger _logger; - - public DefaultLogMessageFormatterTests() - { - _formatter = new DefaultLogMessageFormatter(); - _logger = new Logger("MyLogger"); - } - - [Fact] - public void FormatsString() - { - var message = _formatter.FormatMessage(_logger, LogLevel.Debug, "test"); - message.Should().Be("[DEBUG] MyLogger: test"); - } - - [Fact] - public void PadsLogLevel() - { - var message1 = _formatter.FormatMessage(_logger, LogLevel.Debug, "test1"); - var message2 = _formatter.FormatMessage(_logger, LogLevel.Warn, "test2"); - message1.Should().Be("[DEBUG] MyLogger: test1"); - message2.Should().Be("[WARN] MyLogger: test2"); - } - } -} diff --git a/src/DesperateDevs.Logging.Formatters/tests/DesperateDevs.Logging.Formatters.Tests.csproj b/src/DesperateDevs.Logging.Formatters/tests/DesperateDevs.Logging.Formatters.Tests.csproj deleted file mode 100644 index 76e7ed13..00000000 --- a/src/DesperateDevs.Logging.Formatters/tests/DesperateDevs.Logging.Formatters.Tests.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Logging/src/DesperateDevs.Logging.csproj b/src/DesperateDevs.Logging/src/DesperateDevs.Logging.csproj deleted file mode 100644 index 44eca124..00000000 --- a/src/DesperateDevs.Logging/src/DesperateDevs.Logging.csproj +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - diff --git a/src/DesperateDevs.Logging/src/LogLevel.cs b/src/DesperateDevs.Logging/src/LogLevel.cs deleted file mode 100644 index f110022a..00000000 --- a/src/DesperateDevs.Logging/src/LogLevel.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace DesperateDevs.Logging { - - public enum LogLevel { - On, - Trace, - Debug, - Info, - Warn, - Error, - Fatal, - Off - } -} diff --git a/src/DesperateDevs.Logging/src/Logger.cs b/src/DesperateDevs.Logging/src/Logger.cs deleted file mode 100644 index bd1ff264..00000000 --- a/src/DesperateDevs.Logging/src/Logger.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; - -namespace DesperateDevs.Logging { - - public delegate void LogDelegate(Logger logger, LogLevel logLevel, string message); - - public class Logger { - - public event LogDelegate OnLog; - public LogLevel logLevel { get; set; } - public string name { get; private set; } - - public Logger(string name) { this.name = name; } - - public void Trace(string message) { log(LogLevel.Trace, message); } - public void Debug(string message) { log(LogLevel.Debug, message); } - public void Info (string message) { log(LogLevel.Info, message); } - public void Warn (string message) { log(LogLevel.Warn, message); } - public void Error(string message) { log(LogLevel.Error, message); } - public void Fatal(string message) { log(LogLevel.Fatal, message); } - - public void Assert(bool condition, string message) { - if (!condition) { - throw new FablAssertException(message); - } - } - - void log(LogLevel logLvl, string message) { - if (OnLog != null && logLevel <= logLvl) { - OnLog(this, logLvl, message); - } - } - - public void Reset() { - OnLog = null; - } - } - - public class FablAssertException : Exception { - - public FablAssertException(string message) : base(message) { - } - } -} diff --git a/src/DesperateDevs.Logging/src/fabl.cs b/src/DesperateDevs.Logging/src/fabl.cs deleted file mode 100644 index 8b43aa35..00000000 --- a/src/DesperateDevs.Logging/src/fabl.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace DesperateDevs.Logging { - - public static class fabl { - - public static LogLevel globalLogLevel { - get { return _globalLogLevel; } - set { - _globalLogLevel = value; - foreach (var logger in _loggers.Values) { - logger.logLevel = value; - } - } - } - - static LogLevel _globalLogLevel; - static LogDelegate _appenders; - static readonly Dictionary _loggers = new Dictionary(); - static readonly Logger _logger = GetLogger("fabl"); - - public static void Trace(string message) { _logger.Trace(message); } - public static void Debug(string message) { _logger.Debug(message); } - public static void Info (string message) { _logger.Info (message); } - public static void Warn (string message) { _logger.Warn (message); } - public static void Error(string message) { _logger.Error(message); } - public static void Fatal(string message) { _logger.Fatal(message); } - - public static void Assert(bool condition, string message) { _logger.Assert(condition, message); } - - public static void AddAppender(LogDelegate appender) { - _appenders += appender; - foreach (var logger in _loggers.Values) { - logger.OnLog += appender; - } - } - - public static void RemoveAppender(LogDelegate appender) { - _appenders -= appender; - foreach (var logger in _loggers.Values) { - logger.OnLog -= appender; - } - } - - public static Logger GetLogger(Type type) { - return GetLogger(type.FullName); - } - - public static Logger GetLogger(string name) { - Logger logger; - if (!_loggers.TryGetValue(name, out logger)) { - logger = new Logger(name); - logger.logLevel = globalLogLevel; - logger.OnLog += _appenders; - _loggers.Add(name, logger); - } - - return logger; - } - - public static void ResetLoggers() { - _loggers.Clear(); - } - - public static void ResetAppenders() { - _appenders = null; - } - } -} diff --git a/src/DesperateDevs.Logging/tests/DesperateDevs.Logging.Tests.csproj b/src/DesperateDevs.Logging/tests/DesperateDevs.Logging.Tests.csproj deleted file mode 100644 index 88560ed6..00000000 --- a/src/DesperateDevs.Logging/tests/DesperateDevs.Logging.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Logging/tests/FablTests.cs b/src/DesperateDevs.Logging/tests/FablTests.cs deleted file mode 100644 index 3ad315e9..00000000 --- a/src/DesperateDevs.Logging/tests/FablTests.cs +++ /dev/null @@ -1,126 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.Logging.Tests -{ - public class FablTests - { - public FablTests() - { - fabl.ResetLoggers(); - fabl.ResetAppenders(); - fabl.globalLogLevel = LogLevel.On; - } - - [Fact] - public void CreatesNewLogger() - { - var logger = fabl.GetLogger("MyLogger"); - logger.Should().NotBeNull(); - logger.GetType().Should().BeSameAs(typeof(Logger)); - logger.name.Should().Be("MyLogger"); - logger.logLevel.Should().Be(LogLevel.On); - } - - [Fact] - public void ReturnsSameLoggerWhenNameIsEqual() - { - var logger1 = fabl.GetLogger("MyLogger"); - var logger2 = fabl.GetLogger("MyLogger"); - logger1.Should().BeSameAs(logger2); - } - - [Fact] - public void ClearsCreatedLoggers() - { - var logger1 = fabl.GetLogger("MyLogger"); - fabl.ResetLoggers(); - var logger2 = fabl.GetLogger("MyLogger"); - logger1.Should().NotBeSameAs(logger2); - } - - [Fact] - public void CreatesNewLoggerWithGlobalLogLevel() - { - fabl.globalLogLevel = LogLevel.Error; - var logger = fabl.GetLogger("MyLogger"); - logger.logLevel.Should().Be(LogLevel.Error); - } - - [Fact] - public void SetsGlobalLogLevelOnCreatedLogger() - { - var logger = fabl.GetLogger("MyLogger"); - logger.logLevel.Should().Be(LogLevel.On); - fabl.globalLogLevel = LogLevel.Error; - logger.logLevel.Should().Be(LogLevel.Error); - } - - [Fact] - public void CreatesNewLoggerWithGlobalAppender() - { - var appenderLogLevel = LogLevel.Off; - var appenderMessage = string.Empty; - fabl.AddAppender((log, logLevel, message) => - { - appenderLogLevel = logLevel; - appenderMessage = message; - }); - - var appenderLogLevel2 = LogLevel.Off; - var appenderMessage2 = string.Empty; - fabl.AddAppender((log, logLevel, message) => - { - appenderLogLevel2 = logLevel; - appenderMessage2 = message; - }); - - var logger = fabl.GetLogger("MyLogger"); - logger.Info("hi"); - - appenderLogLevel.Should().Be(LogLevel.Info); - appenderMessage.Should().Be("hi"); - appenderLogLevel2.Should().Be(LogLevel.Info); - appenderMessage2.Should().Be("hi"); - } - - [Fact] - public void AddsAppenderOnCreatedLogger() - { - var logger = fabl.GetLogger("MyLogger"); - var didLog = false; - fabl.AddAppender((log, logLevel, message) => didLog = true); - logger.Info("hi"); - didLog.Should().BeTrue(); - } - - [Fact] - public void RemovesAppenderOnCreatedLogger() - { - var didLog = false; - LogDelegate appender = (log, logLevel, message) => didLog = true; - fabl.AddAppender(appender); - var logger = fabl.GetLogger("MyLogger"); - fabl.RemoveAppender(appender); - logger.Info("hi"); - didLog.Should().BeFalse(); - } - - [Fact] - public void ClearsGlobalAppenders() - { - var appenderLogLevel = LogLevel.Off; - var appenderMessage = string.Empty; - fabl.AddAppender((log, logLevel, message) => - { - appenderLogLevel = logLevel; - appenderMessage = message; - }); - fabl.ResetAppenders(); - var logger = fabl.GetLogger("MyLogger"); - logger.Info("hi"); - appenderLogLevel.Should().Be(LogLevel.Off); - appenderMessage.Should().Be(string.Empty); - } - } -} diff --git a/src/DesperateDevs.Networking.CLI/src/Commands/AbstractSocketCommand.cs b/src/DesperateDevs.Networking.CLI/src/Commands/AbstractSocketCommand.cs deleted file mode 100644 index fdd0a5ce..00000000 --- a/src/DesperateDevs.Networking.CLI/src/Commands/AbstractSocketCommand.cs +++ /dev/null @@ -1,42 +0,0 @@ -ο»Ώusing System; -using System.Net.Sockets; -using System.Text; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; - -namespace DesperateDevs.Networking.CLI { - - public abstract class AbstractSocketCommand : AbstractCommand { - - protected readonly Logger _logger; - protected AbstractTcpSocket _socket; - - TcpMessageParser _tcpMessageParser; - - protected AbstractSocketCommand(string loggerName) { - _logger = fabl.GetLogger(loggerName); - } - - protected void start() { - _tcpMessageParser = new TcpMessageParser(); - _tcpMessageParser.OnMessage += onMessage; - _socket.OnReceived += onReceive; - Console.CancelKeyPress += onCancel; - while (true) { - _socket.Send(TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(Console.ReadLine()))); - } - } - - void onMessage(TcpMessageParser messageparser, byte[] bytes) { - _logger.Info(Encoding.UTF8.GetString(bytes)); - } - - protected void onReceive(AbstractTcpSocket socket, Socket client, byte[] bytes) { - _tcpMessageParser.Receive(bytes); - } - - protected void onCancel(object sender, ConsoleCancelEventArgs e) { - _socket.Disconnect(); - } - } -} diff --git a/src/DesperateDevs.Networking.CLI/src/Commands/ConnectCommand.cs b/src/DesperateDevs.Networking.CLI/src/Commands/ConnectCommand.cs deleted file mode 100644 index 47d451f6..00000000 --- a/src/DesperateDevs.Networking.CLI/src/Commands/ConnectCommand.cs +++ /dev/null @@ -1,36 +0,0 @@ -ο»Ώusing System; -using System.Net; - -namespace DesperateDevs.Networking.CLI { - - public class ConnectCommand : AbstractSocketCommand { - - public override string trigger { get { return "connect"; } } - public override string description { get { return "Connect to ip on port"; } } - public override string group { get { return null; } } - public override string example { get { return "connect [ip] [port]"; } } - - public ConnectCommand() : base(typeof(ConnectCommand).FullName) { - } - - protected override void run() { - IPAddress ip = null; - int port; - - try { - ip = _args[0].ResolveHost(); - port = int.Parse(_args[1]); - } catch (Exception) { - _logger.Warn("Please specify a valid ip and port"); - return; - } - - var client = new TcpClientSocket(); - _socket = client; - client.OnDisconnected += socket => Environment.Exit(0); - client.Connect(ip, port); - - start(); - } - } -} diff --git a/src/DesperateDevs.Networking.CLI/src/Commands/HelpCommand.cs b/src/DesperateDevs.Networking.CLI/src/Commands/HelpCommand.cs deleted file mode 100644 index ab412731..00000000 --- a/src/DesperateDevs.Networking.CLI/src/Commands/HelpCommand.cs +++ /dev/null @@ -1,38 +0,0 @@ -ο»Ώusing System; -using DesperateDevs.CLI.Utils; - -namespace DesperateDevs.Networking.CLI -{ - public class HelpCommand : AbstractCommand - { - public override string trigger => "help"; - public override string description => "Show help"; - public override string group => null; - public override string example => "help"; - - protected override void run() - { - const string header = @" -β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•— β–ˆβ–ˆβ•— -β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ•β•β–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β• - β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•”β• β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• - β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ–ˆβ•”β• β•šβ–ˆβ–ˆβ•”β• - β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘ - β•šβ•β• β•šβ•β•β•β•β•β•β•šβ•β• β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•šβ•β• - - Connecting sockets since 2013 -"; - - var pad = _program.GetCommandListPad(); - var commandList = _program.GetFormattedCommandList(); - var args = "[-v]".PadRight(pad) + " - verbose output\n" + - "[-s]".PadRight(pad) + " - silent (minimal output)"; - - const string examples = "EXAMPLE\n" + - " tcpezy listen 1234\n" + - " tcpezy connect localhost 1234"; - - Console.WriteLine(header + "\nusage:\n" + commandList + "\n" + args + "\n\n" + examples); - } - } -} diff --git a/src/DesperateDevs.Networking.CLI/src/Commands/ListenCommand.cs b/src/DesperateDevs.Networking.CLI/src/Commands/ListenCommand.cs deleted file mode 100644 index 67098c89..00000000 --- a/src/DesperateDevs.Networking.CLI/src/Commands/ListenCommand.cs +++ /dev/null @@ -1,32 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.Networking.CLI { - - public class ListenCommand : AbstractSocketCommand { - - public override string trigger { get { return "listen"; } } - public override string description { get { return "Listen on port"; } } - public override string group { get { return null; } } - public override string example { get { return "listen [port]"; } } - - public ListenCommand() : base(typeof(ListenCommand).FullName) { - } - - protected override void run() { - int port; - - try { - port = int.Parse(_args[0]); - } catch (Exception) { - _logger.Warn("Invalid port"); - return; - } - - var server = new TcpServerSocket(); - _socket = server; - server.Listen(port); - - start(); - } - } -} diff --git a/src/DesperateDevs.Networking.CLI/src/DesperateDevs.Networking.CLI.csproj b/src/DesperateDevs.Networking.CLI/src/DesperateDevs.Networking.CLI.csproj deleted file mode 100644 index 51b50d03..00000000 --- a/src/DesperateDevs.Networking.CLI/src/DesperateDevs.Networking.CLI.csproj +++ /dev/null @@ -1,13 +0,0 @@ -ο»Ώ - - - $(DefaultNetTargetFramework) - Exe - - - - - - - - diff --git a/src/DesperateDevs.Networking.CLI/src/Program.cs b/src/DesperateDevs.Networking.CLI/src/Program.cs deleted file mode 100644 index d5969bce..00000000 --- a/src/DesperateDevs.Networking.CLI/src/Program.cs +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώusing DesperateDevs.CLI.Utils; - -namespace DesperateDevs.Networking.CLI -{ - class Program - { - public static void Main(string[] args) - { - new CLIProgram("TCPezy", typeof(HelpCommand), args).Run(); - } - } -} diff --git a/src/DesperateDevs.Networking/src/AbstractTcpSocket.cs b/src/DesperateDevs.Networking/src/AbstractTcpSocket.cs deleted file mode 100644 index 9cfc5289..00000000 --- a/src/DesperateDevs.Networking/src/AbstractTcpSocket.cs +++ /dev/null @@ -1,93 +0,0 @@ -ο»Ώusing System; -using System.Net; -using System.Net.Sockets; -using DesperateDevs.Logging; - -namespace DesperateDevs.Networking { - - public class ReceiveVO { - - public readonly Socket socket; - public readonly byte[] bytes; - - public ReceiveVO(Socket socket, byte[] bytes) { - this.socket = socket; - this.bytes = bytes; - } - } - - public delegate void TcpSocketReceive(AbstractTcpSocket tcpSocket, Socket socket, byte[] bytes); - - public abstract class AbstractTcpSocket { - - public event TcpSocketReceive OnReceived; - - protected readonly Logger _logger; - protected readonly Socket _socket; - - protected AbstractTcpSocket(string loggerName) { - _logger = fabl.GetLogger(loggerName); - _socket = new Socket( - AddressFamily.InterNetwork, - SocketType.Stream, - ProtocolType.Tcp - ); - } - - public abstract void Send(byte[] buffer); - - protected void send(Socket socket, byte[] buffer) { - var key = keyForEndPoint((IPEndPoint)socket.RemoteEndPoint); - _logger.Debug("Sending " + buffer.Length + " bytes via " + key); - - socket.BeginSend( - buffer, - 0, - buffer.Length, - SocketFlags.None, - onSent, - socket - ); - } - - void onSent(IAsyncResult ar) { - var socket = (Socket)ar.AsyncState; - try { - socket.EndSend(ar); - } catch (ObjectDisposedException) { - // ignored - } - } - - protected void receive(ReceiveVO receiveVO) { - receiveVO.socket.BeginReceive( - receiveVO.bytes, - 0, - receiveVO.bytes.Length, - SocketFlags.None, - onReceived, - receiveVO - ); - } - - protected abstract void onReceived(IAsyncResult ar); - - public abstract void Disconnect(); - - protected void triggerOnReceived(ReceiveVO receiveVO, int bytesReceived) { - if (OnReceived != null) { - OnReceived(this, receiveVO.socket, trimmedBytes(receiveVO.bytes, bytesReceived)); - } - } - - protected static string keyForEndPoint(IPEndPoint endPoint) { - return endPoint.Address + ":" + endPoint.Port; - } - - static byte[] trimmedBytes(byte[] bytes, int length) { - var trimmed = new byte[length]; - Array.Copy(bytes, trimmed, length); - return trimmed; - } - } -} diff --git a/src/DesperateDevs.Networking/src/DesperateDevs.Networking.csproj b/src/DesperateDevs.Networking/src/DesperateDevs.Networking.csproj deleted file mode 100644 index 2f97ef00..00000000 --- a/src/DesperateDevs.Networking/src/DesperateDevs.Networking.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.Networking/src/IPAddressStringExtension.cs b/src/DesperateDevs.Networking/src/IPAddressStringExtension.cs deleted file mode 100644 index 2d16047a..00000000 --- a/src/DesperateDevs.Networking/src/IPAddressStringExtension.cs +++ /dev/null @@ -1,15 +0,0 @@ -ο»Ώusing System.Linq; -using System.Net; -using System.Net.Sockets; - -namespace DesperateDevs.Networking { - - public static class IPAddressStringExtension { - - public static IPAddress ResolveHost(this string host) { - return Dns.GetHostEntry(host) - .AddressList - .FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork); - } - } -} diff --git a/src/DesperateDevs.Networking/src/TcpClientSocket.cs b/src/DesperateDevs.Networking/src/TcpClientSocket.cs deleted file mode 100644 index 6f55e425..00000000 --- a/src/DesperateDevs.Networking/src/TcpClientSocket.cs +++ /dev/null @@ -1,113 +0,0 @@ -ο»Ώusing System; -using System.Net; -using System.Net.Sockets; - -namespace DesperateDevs.Networking { - - public class TcpClientSocket : AbstractTcpSocket { - - public delegate void TcpClientSocketHandler(TcpClientSocket client); - - public event TcpClientSocketHandler OnConnected; - public event TcpClientSocketHandler OnDisconnected; - - public bool isConnected { get { return _socket.Connected; } } - - public TcpClientSocket() : base(typeof(TcpClientSocket).FullName) { - } - - public void Connect(IPAddress ipAddress, int port) { - _logger.Debug("Client is connecting to " + ipAddress + ":" + port + "..."); - _socket.BeginConnect(ipAddress, port, onConnected, _socket); - } - - public override void Send(byte[] buffer) { - send(_socket, buffer); - } - - public override void Disconnect() { - _logger.Debug("Client is disconnecting..."); - _socket.Shutdown(SocketShutdown.Both); - _socket.BeginDisconnect(false, onDisconnected, _socket); - } - - void onConnected(IAsyncResult ar) { - var client = (Socket)ar.AsyncState; - - var didConnect = false; - try { - client.EndConnect(ar); - didConnect = true; - } catch (SocketException ex) { - // Intended catch: - // SocketException "Conn ection refused" - - // Caused by - // Port is not beeing listened to. - - _logger.Error(ex.Message); - } - - if (didConnect) { - var rep = (IPEndPoint)client.RemoteEndPoint; - _logger.Debug("Client connected to " + keyForEndPoint(rep)); - - receive(new ReceiveVO(client, new byte[client.ReceiveBufferSize])); - - if (OnConnected != null) { - OnConnected(this); - } - } - } - - protected override void onReceived(IAsyncResult ar) { - var receiveVO = (ReceiveVO)ar.AsyncState; - var bytesReceived = 0; - try { - bytesReceived = receiveVO.socket.EndReceive(ar); - } catch (SocketException) { - // Intended catch: - // SocketException "interrupted" - - // Caused by: - // tcpClientSocket.Disconnect() disconnects client while socket.BeginReceive() is in progress. - // This will interrupt - } - - if (bytesReceived == 0) { - if (receiveVO.socket.Connected) { - disconnectedByRemote(receiveVO.socket); - } else { - // Client manually disconnected via client.Disconnect() and will - // be closed in onDisconnected() - } - } else { - var key = keyForEndPoint((IPEndPoint)receiveVO.socket.RemoteEndPoint); - _logger.Debug("Client received " + bytesReceived + " bytes from " + key); - - triggerOnReceived(receiveVO, bytesReceived); - - receive(receiveVO); - } - } - - void disconnectedByRemote(Socket client) { - client.Close(); - _logger.Info("Client got disconnected by remote"); - if (OnDisconnected != null) { - OnDisconnected(this); - } - } - - void onDisconnected(IAsyncResult ar) { - var client = (Socket)ar.AsyncState; - client.EndDisconnect(ar); - client.Close(); - _logger.Debug("Client disconnected"); - - if (OnDisconnected != null) { - OnDisconnected(this); - } - } - } -} diff --git a/src/DesperateDevs.Networking/src/TcpMessageParser.cs b/src/DesperateDevs.Networking/src/TcpMessageParser.cs deleted file mode 100644 index 4c7bb0e7..00000000 --- a/src/DesperateDevs.Networking/src/TcpMessageParser.cs +++ /dev/null @@ -1,82 +0,0 @@ -ο»Ώusing System; - -namespace DesperateDevs.Networking { - - public class TcpMessageParser { - - public const int LENGH_BUFFER_LENGTH = sizeof(int); - - public delegate void TcpMessageParserMessage(TcpMessageParser messageParser, byte[] bytes); - - public event TcpMessageParserMessage OnMessage; - - readonly byte[] _lengthBuffer = new byte[LENGH_BUFFER_LENGTH]; - - byte[] _messageBuffer; - int _readIndex; - int _writeIndex; - - public static byte[] WrapMessage(byte[] message) { - var lengthPrefix = BitConverter.GetBytes(message.Length); - var prefixedMessage = new byte[lengthPrefix.Length + message.Length]; - lengthPrefix.CopyTo(prefixedMessage, 0); - message.CopyTo(prefixedMessage, lengthPrefix.Length); - return prefixedMessage; - } - - public static byte[] UnwrapMessage(byte[] message) { - var lengthPrefix = new byte[LENGH_BUFFER_LENGTH]; - var unwrappedMessage = new byte[message.Length - LENGH_BUFFER_LENGTH]; - Array.Copy(message, lengthPrefix, LENGH_BUFFER_LENGTH); - Array.Copy(message, LENGH_BUFFER_LENGTH, unwrappedMessage, 0, unwrappedMessage.Length); - return unwrappedMessage; - } - - public void Receive(byte[] bytes) { - while (_readIndex < bytes.Length) { - if (_messageBuffer == null) { - readLength(bytes); - } - - if (_messageBuffer != null) { - readMessage(bytes); - } - } - - _readIndex = 0; - } - - void readLength(byte[] bytes) { - if (read(bytes, _lengthBuffer, LENGH_BUFFER_LENGTH)) { - _messageBuffer = new byte[BitConverter.ToInt32(_lengthBuffer, 0)]; - } - } - - void readMessage(byte[] bytes) { - if (read(bytes, _messageBuffer, _messageBuffer.Length)) { - var message = _messageBuffer; - _messageBuffer = null; - - if (OnMessage != null) { - OnMessage(this, message); - } - } - } - - bool read(byte[] bytes, byte[] buffer, int length) { - var bytesToReadToFillBuffer = length - _writeIndex; - var availableBytesToRead = bytes.Length - _readIndex; - if (bytesToReadToFillBuffer <= availableBytesToRead) { - Array.Copy(bytes, _readIndex, buffer, _writeIndex, bytesToReadToFillBuffer); - _readIndex += bytesToReadToFillBuffer; - _writeIndex = 0; - return true; - } - - Array.Copy(bytes, _readIndex, buffer, _writeIndex, availableBytesToRead); - _readIndex += availableBytesToRead; - _writeIndex += availableBytesToRead; - return false; - } - } -} diff --git a/src/DesperateDevs.Networking/src/TcpServerSocket.cs b/src/DesperateDevs.Networking/src/TcpServerSocket.cs deleted file mode 100644 index f70b7365..00000000 --- a/src/DesperateDevs.Networking/src/TcpServerSocket.cs +++ /dev/null @@ -1,158 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Sockets; - -namespace DesperateDevs.Networking { - - public class TcpServerSocket : AbstractTcpSocket { - - public delegate void TcpServerSocketHandler(TcpServerSocket server, Socket client); - - public event TcpServerSocketHandler OnClientConnected; - public event TcpServerSocketHandler OnClientDisconnected; - - public int count { get { return _clients.Count; } } - - readonly Dictionary _clients; - - public TcpServerSocket() : base(typeof(TcpServerSocket).FullName) { - _clients = new Dictionary(); - } - - public void Listen(int port) { - _logger.Info("Server is listening on port " + port + "..."); - _socket.Bind(new IPEndPoint(IPAddress.Any, port)); - _socket.Listen(128); - _socket.BeginAccept(onAccepted, _socket); - } - - public Socket GetClientWithRemoteEndPoint(IPEndPoint endPoint) { - Socket client; - _clients.TryGetValue(keyForEndPoint(endPoint), out client); - return client; - } - - public override void Send(byte[] buffer) { - if (_clients.Count != 0) { - foreach (var client in _clients.Values.ToArray()) { - send(client, buffer); - } - } else { - _logger.Debug("Server doesn't have any connected clients. Won't send."); - } - } - - public void SendTo(byte[] buffer, IPEndPoint endPoint) { - var client = GetClientWithRemoteEndPoint(endPoint); - send(client, buffer); - } - - public void DisconnectClient(IPEndPoint endPoint) { - var client = GetClientWithRemoteEndPoint(endPoint); - client.Shutdown(SocketShutdown.Both); - client.BeginDisconnect(false, onDisconnectClient, client); - } - - public override void Disconnect() { - _socket.Close(); - _logger.Info("Server stopped listening"); - - foreach (var client in _clients.Values.ToArray()) { - client.Shutdown(SocketShutdown.Both); - client.BeginDisconnect(false, onDisconnectClient, client); - } - } - - void onAccepted(IAsyncResult ar) { - var server = (Socket)ar.AsyncState; - Socket client = null; - - try { - client = server.EndAccept(ar); - } catch (ObjectDisposedException) { - // Intended catch: - // ObjectDisposedException "Cannot access a disposed object." - - // Caused by: - // tcpServerSocket.Disconnect() calls socket.Close() while socket.BeginAccept() is in progress. - - // Explanation: - // When the socket.Close() method is called while an asynchronous operation is in progress, - // the callback provided to the socket.BeginAccept method is called. - // A subsequent call to the socket.EndAccept method will throw an ObjectDisposedException - // to indicate that the operation has been cancelled. - } - - if (client != null) { - addClient(client); - _socket.BeginAccept(onAccepted, _socket); - } - } - - void addClient(Socket client) { - var key = keyForEndPoint((IPEndPoint)client.RemoteEndPoint); - _clients.Add(key, client); - - _logger.Debug("Server accepted new client connection from " + key); - - receive(new ReceiveVO(client, new byte[client.ReceiveBufferSize])); - - if (OnClientConnected != null) { - OnClientConnected(this, client); - } - } - - protected override void onReceived(IAsyncResult ar) { - var receiveVO = (ReceiveVO)ar.AsyncState; - var bytesReceived = 0; - try { - bytesReceived = receiveVO.socket.EndReceive(ar); - } catch (SocketException) { - // Intended catch: - // SocketException "interrupted" - - // Caused by: - // tcpServerSocket.Disconnect() disconnects each client while socket.BeginReceive() is in progress. - // This will interrupt - } - - if (bytesReceived == 0) { - if (receiveVO.socket.Connected) { - removeClient(receiveVO.socket); - } else { - // Server manually disconnected client via server.Disconnect() and will - // close client in onDisconnectClient() - } - } else { - var key = keyForEndPoint((IPEndPoint)receiveVO.socket.RemoteEndPoint); - _logger.Debug("Server received " + bytesReceived + " bytes from " + key); - - triggerOnReceived(receiveVO, bytesReceived); - - receive(receiveVO); - } - } - - void removeClient(Socket socket) { - var key = _clients.Single(kv => kv.Value == socket).Key; - _clients.Remove(key); - socket.Close(); - _logger.Debug("Client " + key + " disconnected from server"); - - if (OnClientDisconnected != null) { - OnClientDisconnected(this, socket); - } - } - - void onDisconnectClient(IAsyncResult ar) { - var client = (Socket)ar.AsyncState; - var key = _clients.Single(kv => kv.Value == client).Key; - _clients.Remove(key); - client.EndDisconnect(ar); - client.Close(); - _logger.Debug("Server disconnected client " + key); - } - } -} diff --git a/src/DesperateDevs.Networking/tests/DesperateDevs.Networking.Tests.csproj b/src/DesperateDevs.Networking/tests/DesperateDevs.Networking.Tests.csproj deleted file mode 100644 index a2b10ac6..00000000 --- a/src/DesperateDevs.Networking/tests/DesperateDevs.Networking.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - diff --git a/src/DesperateDevs.Networking/tests/TcpClientSocketTests.cs b/src/DesperateDevs.Networking/tests/TcpClientSocketTests.cs deleted file mode 100644 index 937a1d3e..00000000 --- a/src/DesperateDevs.Networking/tests/TcpClientSocketTests.cs +++ /dev/null @@ -1,157 +0,0 @@ -ο»Ώusing System; -using System.Net; -using System.Text; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Networking.Tests -{ - [Collection("Non-Parallel")] - public class TcpClientSocketTests : IDisposable - { - const int Port = 4321; - - readonly IPAddress _ipAddress = IPAddress.Loopback; - readonly TcpServerSocket _server = new(); - - TcpClientSocket NewClient => new(); - - TcpClientSocket ConnectedClient - { - get - { - var client = NewClient; - client.Connect(_ipAddress, Port); - Wait(); - return client; - } - } - - public TcpClientSocketTests() - { - _server.Listen(Port); - Wait(); - } - - [Fact] - public void DoesNotConnectToClosedPort() - { - var client = NewClient; - client.Connect(_ipAddress, Port + 1); - Wait(2000); - client.isConnected.Should().BeFalse(); - } - - [Fact] - public void DispatchesOnConnected() - { - var client = NewClient; - var connected = 0; - TcpClientSocket eventClient = null; - - client.OnConnected += socket => - { - connected += 1; - eventClient = socket; - }; - - client.Connect(_ipAddress, Port); - Wait(); - - connected.Should().Be(1); - eventClient.Should().BeSameAs(client); - } - - [Fact] - public void Connects() - { - ConnectedClient.isConnected.Should().BeTrue(); - } - - [Fact] - public void Disconnects() - { - var client = ConnectedClient; - client.Disconnect(); - Wait(); - client.isConnected.Should().BeFalse(); - } - - [Fact] - public void DispatchesOnDisconnected() - { - var client = ConnectedClient; - TcpClientSocket eventSocket = null; - client.OnDisconnected += socket => { eventSocket = socket; }; - client.Disconnect(); - Wait(); - client.isConnected.Should().BeFalse(); - eventSocket.Should().BeSameAs(client); - } - - [Fact] - public void DisconnectedByRemote() - { - var client = ConnectedClient; - _server.Disconnect(); - Wait(); - client.isConnected.Should().BeFalse(); - } - - [Fact] - public void DispatchesOnDisconnectedWhenDisconnectedByRemote() - { - var client = ConnectedClient; - TcpClientSocket eventSocket = null; - client.OnDisconnected += socket => { eventSocket = socket; }; - _server.Disconnect(); - Wait(); - client.isConnected.Should().BeFalse(); - eventSocket.Should().BeSameAs(client); - } - - [Fact] - public void ReceivesMessage() - { - var client = ConnectedClient; - AbstractTcpSocket eventClient = null; - byte[] eventBuffer = null; - - client.OnReceived += (tcpSocket, socket, b) => - { - eventClient = tcpSocket; - eventBuffer = b; - }; - - var buffer = Encoding.UTF8.GetBytes("test"); - _server.Send(buffer); - - Wait(); - - eventClient.Should().BeSameAs(client); - eventBuffer.Should().BeEquivalentTo(buffer); - } - - [Fact] - public void SendsMessage() - { - var client = ConnectedClient; - byte[] eventBytes = null; - _server.OnReceived += (socket, socket1, bytes) => { eventBytes = bytes; }; - - var buffer = Encoding.UTF8.GetBytes("test"); - client.Send(buffer); - Wait(); - - eventBytes.Should().BeEquivalentTo(buffer); - } - - public void Dispose() - { - _server.Disconnect(); - Wait(); - } - - static void Wait(int ms = 50) => System.Threading.Thread.Sleep(ms); - } -} diff --git a/src/DesperateDevs.Networking/tests/TcpServerSocketTests.cs b/src/DesperateDevs.Networking/tests/TcpServerSocketTests.cs deleted file mode 100644 index 274a64a4..00000000 --- a/src/DesperateDevs.Networking/tests/TcpServerSocketTests.cs +++ /dev/null @@ -1,330 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Text; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Networking.Tests -{ - [Collection("Non-Parallel")] - public class TcpServerSocketTests : IDisposable - { - const int Port = 1234; - readonly IPAddress _ipAddress = IPAddress.Loopback; - readonly TcpServerSocket _server = new(); - - Socket _client1; - Socket _client2; - IPEndPoint _rep1; - IPEndPoint _rep2; - - [Fact] - public void InvokingDisconnectOnDisconnectedServerDoesNothing() - { - _server.Disconnect(); - _server.Disconnect(); - } - - [Fact] - public void NewServerSocketDoesNotHaveConnectedClients() - { - Listen(); - _server.count.Should().Be(0); - } - - [Fact] - public void CanSendWithoutHavingConnectedClients() - { - Listen(); - _server.Send(Encoding.UTF8.GetBytes("test")); - Wait(); - } - - [Fact] - public void AcceptsClientConnection() - { - Listen(); - ConnectClient(out _client1); - _server.count.Should().Be(1); - } - - [Fact] - public void DispatchesOnClientConnected() - { - var connected = 0; - TcpServerSocket eventServer = null; - _server.OnClientConnected += (s, c) => - { - connected += 1; - eventServer = s; - }; - - Listen(); - ConnectClient(out _client1); - connected.Should().Be(1); - eventServer.Should().BeSameAs(_server); - } - - [Fact] - public void GetsClientByEndPoint() - { - Socket eventClient = null; - _server.OnClientConnected += (s, c) => { eventClient = c; }; - - Listen(); - ConnectClient(out _client1); - - var rep = (IPEndPoint) eventClient.RemoteEndPoint; - var key = new IPEndPoint(IPAddress.Parse(rep.Address.ToString()), rep.Port); - - var client = _server.GetClientWithRemoteEndPoint(key); - client.Should().BeSameAs(eventClient); - } - - [Fact] - public void RemovesDisconnectedClient() - { - Listen(); - ConnectClientWithEndPoint1(out _client1); - DisconnectClient(ref _client1); - _server.count.Should().Be(0); - } - - [Fact] - public void DispatchesOnClientDisconnected() - { - var disconnected = 0; - TcpServerSocket eventServer = null; - - _server.OnClientDisconnected += (s, c) => - { - disconnected += 1; - eventServer = s; - }; - - Listen(); - ConnectClient(out _client1); - DisconnectClient(ref _client1); - - disconnected.Should().Be(1); - eventServer.Should().BeSameAs(_server); - } - - [Fact] - public void ServerDisconnectsAndRemovesClients() - { - Listen(); - ConnectClient(out _client1); - _server.Disconnect(); - Wait(); - _server.count.Should().Be(0); - } - - [Fact] - public void DisconnectsClient() - { - Listen(); - ConnectClientWithEndPoint1(out _client1); - PrepareForReceive(_client1, s => { }); - - var client = _server.GetClientWithRemoteEndPoint(_rep1); - client.Connected.Should().BeTrue(); - - _server.DisconnectClient(_rep1); - Wait(); - - client.Connected.Should().BeFalse(); - } - - [Fact] - public void ReceivesClientMessage() - { - AbstractTcpSocket eventServer = null; - byte[] eventBytes = null; - _server.OnReceived += (tcpSocket, socket, bytes) => - { - eventServer = tcpSocket; - eventBytes = bytes; - }; - - Listen(); - ConnectClient(out _client1); - var buffer = Encoding.UTF8.GetBytes("test"); - _client1.Send(buffer, 0, buffer.Length, SocketFlags.None); - Wait(); - - eventServer.Should().BeSameAs(_server); - eventBytes.Should().BeEquivalentTo(buffer); - } - - [Fact] - public void SendsMessageToClient() - { - string eventMsg = null; - Listen(); - ConnectClient(out _client1); - PrepareForReceive(_client1, s => eventMsg = s); - - const string message = "test"; - var buffer = Encoding.UTF8.GetBytes(message); - _server.Send(buffer); - Wait(); - - eventMsg.Should().Be(message); - } - - [Fact] - public void ReceivesMultipleClientMessages() - { - var eventBytes = new List(); - _server.OnReceived += (sender, receiver, bytes) => { eventBytes.Add(bytes); }; - - Listen(); - ConnectClient(out _client1); - - var buffer1 = Encoding.UTF8.GetBytes("test1"); - var buffer2 = Encoding.UTF8.GetBytes("test2"); - _client1.Send(buffer1, 0, buffer1.Length, SocketFlags.None); - Wait(); - _client1.Send(buffer2, 0, buffer2.Length, SocketFlags.None); - Wait(); - - eventBytes[0].Should().BeEquivalentTo(buffer1); - eventBytes[1].Should().BeEquivalentTo(buffer2); - } - - [Fact] - public void AcceptsMultipleClientConnection() - { - Listen(); - ConnectClient(out _client1); - ConnectClient(out _client2); - _server.count.Should().Be(2); - } - - [Fact] - public void SendsMessageToAllConnectedClients() - { - Listen(); - ConnectClient(out _client1); - ConnectClient(out _client2); - string eventMsg1 = null; - string eventMsg2 = null; - PrepareForReceive(_client1, s => eventMsg1 = s); - PrepareForReceive(_client2, s => eventMsg2 = s); - - const string message = "test"; - var buffer = Encoding.UTF8.GetBytes(message); - _server.Send(buffer); - Wait(); - - eventMsg1.Should().Be(message); - eventMsg2.Should().Be(message); - } - - [Fact] - public void SendsMessageToSpecifiedClient() - { - Listen(); - ConnectClient(out _client1); - ConnectClientWithEndPoint2(out _client2); - string eventMsg1 = null; - string eventMsg2 = null; - PrepareForReceive(_client1, s => eventMsg1 = s, true); - PrepareForReceive(_client2, s => eventMsg2 = s); - - const string message = "test"; - var buffer = Encoding.UTF8.GetBytes(message); - _server.SendTo(buffer, _rep2); - Wait(); - - eventMsg1.Should().BeNull(); - eventMsg2.Should().Be(message); - } - - Socket CreateClient() => new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - - void Listen() - { - _server.Listen(Port); - Wait(); - } - - void ConnectClient(out Socket client) - { - client = CreateClient(); - client.Connect(_ipAddress, Port); - Wait(); - } - - void ConnectClientWithEndPoint1(out Socket client) - { - _server.OnClientConnected += (socket, c) => { _rep1 = (IPEndPoint) c.RemoteEndPoint; }; - ConnectClient(out client); - } - - void ConnectClientWithEndPoint2(out Socket client) - { - _server.OnClientConnected += (socket, c) => { _rep2 = (IPEndPoint) c.RemoteEndPoint; }; - ConnectClient(out client); - } - - void DisconnectClient(ref Socket client) - { - client.Shutdown(SocketShutdown.Both); - client.Disconnect(false); - client.Close(); - Wait(); - client = null; - } - - void PrepareForReceive(Socket socket, Action onReceive, bool mayFail = false, Action failAction = null) - { - var buffer = new byte[socket.ReceiveBufferSize]; - socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, - ar => - { - var client = (Socket) ar.AsyncState; - - if (mayFail) - { - try - { - var bytesReceived = client.EndReceive(ar); - var trimmedBuffer = new byte[bytesReceived]; - Array.Copy(buffer, trimmedBuffer, bytesReceived); - onReceive(Encoding.UTF8.GetString(trimmedBuffer)); - } - catch (Exception) - { - if (failAction != null) - { - failAction(); - } - } - } - else - { - var bytesReceived = client.EndReceive(ar); - var trimmedBuffer = new byte[bytesReceived]; - Array.Copy(buffer, trimmedBuffer, bytesReceived); - onReceive(Encoding.UTF8.GetString(trimmedBuffer)); - } - }, socket); - - Wait(); - } - - public void Dispose() - { - if (_client1 != null) DisconnectClient(ref _client1); - if (_client2 != null) DisconnectClient(ref _client2); - _server.Disconnect(); - Wait(); - } - - static void Wait() => System.Threading.Thread.Sleep(50); - } -} diff --git a/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/DesperateDevs.Reflection.Tests.Project1.csproj b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/DesperateDevs.Reflection.Tests.Project1.csproj new file mode 100644 index 00000000..0690a2f3 --- /dev/null +++ b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/DesperateDevs.Reflection.Tests.Project1.csproj @@ -0,0 +1,10 @@ + + + + $(DefaultNetTargetFramework) + false + false + bin/$(Configuration) + + + diff --git a/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/TestClass.cs b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/TestClass.cs new file mode 100644 index 00000000..cf6ec982 --- /dev/null +++ b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project1/TestClass.cs @@ -0,0 +1,4 @@ +ο»Ώnamespace DesperateDevs.Reflection.Tests.Project1 +{ + public class TestClass { } +} diff --git a/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/DesperateDevs.Reflection.Tests.Project2.csproj b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/DesperateDevs.Reflection.Tests.Project2.csproj new file mode 100644 index 00000000..4dc396cb --- /dev/null +++ b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/DesperateDevs.Reflection.Tests.Project2.csproj @@ -0,0 +1,14 @@ + + + + $(DefaultNetTargetFramework) + false + false + bin/$(Configuration) + + + + + + + diff --git a/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/TestClass.cs b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/TestClass.cs new file mode 100644 index 00000000..cbebaaab --- /dev/null +++ b/src/DesperateDevs.Reflection/fixtures/DesperateDevs.Reflection.Tests.Project2/TestClass.cs @@ -0,0 +1,7 @@ +ο»Ώnamespace DesperateDevs.Reflection.Tests.Project2 +{ + public class TestClass + { + public DesperateDevs.Reflection.Tests.Project1.TestClass Value = new Project1.TestClass(); + } +} diff --git a/src/DesperateDevs.Reflection/src/AppDomainExtension.cs b/src/DesperateDevs.Reflection/src/AppDomainExtension.cs new file mode 100644 index 00000000..0dd8b33e --- /dev/null +++ b/src/DesperateDevs.Reflection/src/AppDomainExtension.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using DesperateDevs.Extensions; + +namespace DesperateDevs.Reflection +{ + public static class AppDomainExtension + { + public static IEnumerable GetAllTypes(this AppDomain appDomain) => + GetAllTypes(appDomain.GetAssemblies()); + + public static IEnumerable GetAllTypes(this IEnumerable assemblies) + { + var types = new List(); + foreach (var assembly in assemblies) + { + try + { + types.AddRange(assembly.GetTypes()); + } + catch (ReflectionTypeLoadException exception) + { + types.AddRange(exception.Types.Where(type => type != null)); + } + } + + return types; + } + + public static IEnumerable GetNonAbstractTypes(this AppDomain appDomain) => + GetNonAbstractTypes(GetAllTypes(appDomain)); + + public static IEnumerable GetNonAbstractTypes(this IEnumerable types) => types + .Where(type => !type.IsAbstract) + .Where(type => type.ImplementsInterface()); + + public static IEnumerable GetInstancesOf(this AppDomain appDomain) => + GetInstancesOf(GetNonAbstractTypes(appDomain)); + + public static IEnumerable GetInstancesOf(this IEnumerable types) => + GetNonAbstractTypes(types).Select(type => (T)Activator.CreateInstance(type)); + } +} diff --git a/src/DesperateDevs.Reflection/src/AssemblyResolver.cs b/src/DesperateDevs.Reflection/src/AssemblyResolver.cs new file mode 100644 index 00000000..1766c16d --- /dev/null +++ b/src/DesperateDevs.Reflection/src/AssemblyResolver.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Sherlog; + +namespace DesperateDevs.Reflection +{ + public class AssemblyResolver : IDisposable + { + readonly Logger _logger = Logger.GetLogger(nameof(AssemblyResolver)); + + public IEnumerable Assemblies => _assemblies; + + readonly string[] _basePaths; + readonly HashSet _assemblies; + readonly AppDomain _appDomain; + + readonly ResolveEventHandler _cachedOnAssemblyResolve; + + bool _isDisposed; + + public AssemblyResolver(params string[] basePaths) + { + _basePaths = basePaths; + _assemblies = new HashSet(); + _appDomain = AppDomain.CurrentDomain; + + _cachedOnAssemblyResolve = OnAssemblyResolve; + _appDomain.AssemblyResolve += _cachedOnAssemblyResolve; + } + + public static AssemblyResolver LoadAssemblies(bool allDirectories, params string[] basePaths) + { + var resolver = new AssemblyResolver(basePaths); + foreach (var file in GetAssemblyFiles(allDirectories, basePaths)) + resolver.Load(file); + + return resolver; + } + + static IEnumerable GetAssemblyFiles(bool allDirectories, params string[] basePaths) + { + var patterns = new[] {"*.dll", "*.exe"}; + var files = new List(); + foreach (var pattern in patterns) + files.AddRange(basePaths.SelectMany(s => Directory.GetFiles(s, pattern, allDirectories + ? SearchOption.AllDirectories + : SearchOption.TopDirectoryOnly))); + + return files; + } + + public void Load(string path) + { + _logger.Debug($"{_appDomain} load: {path}"); + ResolveAndLoad(path, false); + } + + Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) => + ResolveAndLoad(args.Name, true); + + Assembly ResolveAndLoad(string name, bool isDependency) + { + try + { + _logger.Debug(isDependency + ? $" ➜ Loading dependency: {name}" + : $" ➜ Loading: {name}"); + + var assembly = Assembly.LoadFrom(name); + + if (_isDisposed) + _logger.Debug($" ℹ️ Not adding {name} because {nameof(AssemblyResolver)} is disposed"); + else + _assemblies.Add(assembly); + + return assembly; + } + catch (Exception) + { + var path = ResolvePath(name); + if (path != null) + { + try + { + var assembly = Assembly.LoadFrom(path); + + if (_isDisposed) + _logger.Debug($" ℹ️ Not adding {name} because {nameof(AssemblyResolver)} is disposed"); + else + _assemblies.Add(assembly); + + return assembly; + } + catch (BadImageFormatException exception) + { + _logger.Warn(exception.Message); + } + } + } + + return null; + } + + string ResolvePath(string name) + { + try + { + var assemblyName = new AssemblyName(name).Name; + + if (!assemblyName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && + !assemblyName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + assemblyName += ".dll"; + + foreach (var basePath in _basePaths) + { + var path = Path.Combine(basePath, assemblyName); + if (File.Exists(path)) + { + _logger.Debug($" ➜ Resolved: {path}"); + return path; + } + } + } + catch (FileLoadException) + { + _logger.Warn($" Γ— Could not resolve: {name}"); + } + + return null; + } + + public IEnumerable GetTypes() => _assemblies.GetAllTypes(); + + public void Dispose() => _isDisposed = true; + } +} diff --git a/src/DesperateDevs.Reflection/src/AttributeInfo.cs b/src/DesperateDevs.Reflection/src/AttributeInfo.cs new file mode 100644 index 00000000..ea572ab9 --- /dev/null +++ b/src/DesperateDevs.Reflection/src/AttributeInfo.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace DesperateDevs.Reflection +{ + public class AttributeInfo + { + public readonly object Attribute; + public readonly IEnumerable MemberInfos; + + public AttributeInfo(object attribute, IEnumerable memberInfos) + { + Attribute = attribute; + MemberInfos = memberInfos; + } + } +} diff --git a/src/DesperateDevs.Reflection/src/DesperateDevs.Reflection.csproj b/src/DesperateDevs.Reflection/src/DesperateDevs.Reflection.csproj new file mode 100644 index 00000000..ba2b5b7c --- /dev/null +++ b/src/DesperateDevs.Reflection/src/DesperateDevs.Reflection.csproj @@ -0,0 +1,13 @@ + + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + diff --git a/src/DesperateDevs.Reflection/src/PublicMemberInfo.cs b/src/DesperateDevs.Reflection/src/PublicMemberInfo.cs new file mode 100644 index 00000000..5d96771f --- /dev/null +++ b/src/DesperateDevs.Reflection/src/PublicMemberInfo.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace DesperateDevs.Reflection +{ + public class PublicMemberInfo + { + public readonly Type Type; + public readonly string Name; + public readonly AttributeInfo[] Attributes; + + readonly FieldInfo _fieldInfo; + readonly PropertyInfo _propertyInfo; + + public PublicMemberInfo(FieldInfo info) + { + _fieldInfo = info; + Type = _fieldInfo.FieldType; + Name = _fieldInfo.Name; + Attributes = GetAttributes(_fieldInfo.GetCustomAttributes(false)); + } + + public PublicMemberInfo(PropertyInfo info) + { + _propertyInfo = info; + Type = _propertyInfo.PropertyType; + Name = _propertyInfo.Name; + Attributes = GetAttributes(_propertyInfo.GetCustomAttributes(false)); + } + + public object GetValue(object obj) => _fieldInfo != null + ? _fieldInfo.GetValue(obj) + : _propertyInfo.GetValue(obj, null); + + public void SetValue(object obj, object value) + { + if (_fieldInfo != null) + _fieldInfo.SetValue(obj, value); + else + _propertyInfo.SetValue(obj, value); + } + + static AttributeInfo[] GetAttributes(IEnumerable attributes) => attributes + .Select(attr => new AttributeInfo(attr, attr.GetType().GetPublicMemberInfos())) + .ToArray(); + } +} diff --git a/src/DesperateDevs.Reflection/src/PublicMemberInfoExtension.cs b/src/DesperateDevs.Reflection/src/PublicMemberInfoExtension.cs new file mode 100644 index 00000000..3358836b --- /dev/null +++ b/src/DesperateDevs.Reflection/src/PublicMemberInfoExtension.cs @@ -0,0 +1,43 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace DesperateDevs.Reflection +{ + public static class PublicMemberInfoExtension + { + public static PublicMemberInfo[] GetPublicMemberInfos(this Type type) + { + const BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public; + + var fieldInfos = type.GetFields(bindingFlags) + .Select(info => new PublicMemberInfo(info)); + + var propertyInfos = type.GetProperties(bindingFlags) + .Where(info => info.CanRead && info.CanWrite && info.GetIndexParameters().Length == 0) + .Select(info => new PublicMemberInfo(info)); + + return fieldInfos.Concat(propertyInfos).ToArray(); + } + + public static object PublicMemberClone(this object obj) + { + var clone = Activator.CreateInstance(obj.GetType()); + CopyPublicMemberValues(obj, clone); + return clone; + } + + public static T PublicMemberClone(this object obj) where T : new() + { + var clone = new T(); + CopyPublicMemberValues(obj, clone); + return clone; + } + + public static void CopyPublicMemberValues(this object source, object target) + { + foreach (var info in source.GetType().GetPublicMemberInfos()) + info.SetValue(target, info.GetValue(source)); + } + } +} diff --git a/src/DesperateDevs.Reflection/tests/AppDomainExtensionTests.cs b/src/DesperateDevs.Reflection/tests/AppDomainExtensionTests.cs new file mode 100644 index 00000000..14a1889e --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/AppDomainExtensionTests.cs @@ -0,0 +1,36 @@ +ο»Ώusing System; +using System.Linq; +using DesperateDevs.Reflection.Tests.Fixtures; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Reflection.Tests +{ + public class AppDomainExtensionTests + { + [Fact] + public void GetsAllTypes() + { + var types = AppDomain.CurrentDomain.GetAllTypes().ToArray(); + types.Should().Contain(typeof(object)); + types.Should().Contain(typeof(AppDomainExtensionTests)); + types.Should().Contain(typeof(AppDomainExtension)); + } + + [Fact] + public void GetNonAbstractTypes() + { + var types = AppDomain.CurrentDomain.GetNonAbstractTypes().ToArray(); + types.Should().HaveCount(1); + types[0].Should().Be(typeof(TestInterfaceClass)); + } + + [Fact] + public void GetInstancesOf() + { + var types = AppDomain.CurrentDomain.GetInstancesOf().ToArray(); + types.Should().HaveCount(1); + types[0].GetType().Should().Be(typeof(TestInterfaceClass)); + } + } +} diff --git a/src/DesperateDevs.Reflection/tests/AssemblyResolverTests.cs b/src/DesperateDevs.Reflection/tests/AssemblyResolverTests.cs new file mode 100644 index 00000000..10910326 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/AssemblyResolverTests.cs @@ -0,0 +1,130 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using DesperateDevs.Tests; +using FluentAssertions; +using Sherlog; +using Sherlog.Formatters; +using Xunit; +using Xunit.Abstractions; + +namespace DesperateDevs.Reflection.Tests +{ + public class AssemblyResolverTests : IDisposable + { + static readonly LogMessageFormatter Formatter = new LogMessageFormatter("[{1}]\t{0}: {2}"); + + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + + const string AssemblyName1 = "DesperateDevs.Reflection.Tests.Project1"; + const string AssemblyName2 = "DesperateDevs.Reflection.Tests.Project2"; + const string AssemblyFile1 = $"{AssemblyName1}.dll"; + const string AssemblyFile2 = $"{AssemblyName2}.dll"; + const string Type1 = $"{AssemblyName1}.TestClass"; + const string Type2 = $"{AssemblyName2}.TestClass"; + + static readonly string BasePath1 = Path.Combine(ProjectRoot, "DesperateDevs.Reflection", "fixtures", AssemblyName1, "bin", "Release"); + static readonly string BasePath2 = Path.Combine(ProjectRoot, "DesperateDevs.Reflection", "fixtures", AssemblyName2, "bin", "Release"); + + readonly ITestOutputHelper _output; + + public AssemblyResolverTests(ITestOutputHelper output) + { + _output = output; + Logger.AddAppender((logger, level, message) => _output.WriteLine(Formatter.FormatMessage(logger, level, message))); + } + + [Fact] + public void LoadsAssemblyWithFullPath() + { + using var resolver = new AssemblyResolver(); + resolver.Load(Path.Combine(BasePath1, AssemblyFile1)); + + resolver.Assemblies.Should().HaveCount(1); + resolver.GetTypes() + .Select(t => t.FullName) + .Should().Contain(Type1); + } + + [Fact] + public void LoadsAssemblyByFileNameAndBasePath() + { + using var resolver = new AssemblyResolver(BasePath1); + resolver.Load(AssemblyFile1); + + resolver.Assemblies.Should().HaveCount(1); + resolver.GetTypes() + .Select(t => t.FullName) + .Should().Contain(Type1); + } + + [Fact] + public void LoadsAssemblyByNameAndBasePath() + { + using var resolver = new AssemblyResolver(BasePath1); + resolver.Load(AssemblyName1); + + resolver.Assemblies.Should().HaveCount(1); + resolver.GetTypes() + .Select(t => t.FullName) + .Should().Contain(Type1); + } + + [Fact] + public void RetrievesAssemblyFromType() + { + using var resolver = new AssemblyResolver(BasePath1); + resolver.Load(AssemblyName1); + + var type = resolver.GetTypes().First(); + type.FullName.Should().Be(Type1); + type.Assembly.Should().BeSameAs(resolver.Assemblies.First()); + } + + [Fact] + public void DoesNotAddSameAssemblyTwice() + { + using var resolver = new AssemblyResolver(BasePath1); + resolver.Load(AssemblyName1); + resolver.Load(AssemblyName1); + resolver.Assemblies.Should().HaveCount(1); + } + + [Fact] + public void InstantiatesType() + { + using var resolver = new AssemblyResolver(BasePath1); + resolver.Load(AssemblyName1); + Activator.CreateInstance(resolver.GetTypes().First()); + } + + [Fact] + public void CanLoadTypeWithDependencies() + { + using var resolver = new AssemblyResolver(BasePath1, BasePath2); + resolver.Load(AssemblyName2); + var types = resolver.GetTypes().ToArray(); + types.Should().HaveCount(1); + Activator.CreateInstance(types[0]); + } + + [Fact] + public void DoesNotLoadAnyDependencies() + { + using var resolver = new AssemblyResolver(BasePath1, BasePath2); + resolver.Load(AssemblyName2); + var types = resolver.GetTypes().ToArray(); + types.Should().HaveCount(1); + types[0].FullName.Should().Be(Type2); + resolver.Assemblies.Should().HaveCount(1); + } + + public void Dispose() + { + _output.WriteLine("Dispose"); + Logger.GlobalLogLevel = LogLevel.On; + Logger.ClearAppenders(); + Logger.ClearLoggers(); + } + } +} diff --git a/src/DesperateDevs.Reflection/tests/DesperateDevs.Reflection.Tests.csproj b/src/DesperateDevs.Reflection/tests/DesperateDevs.Reflection.Tests.csproj new file mode 100644 index 00000000..78c11ab2 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/DesperateDevs.Reflection.Tests.csproj @@ -0,0 +1,26 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + + + + diff --git a/src/DesperateDevs.Reflection/tests/PublicMemberInfoTests.cs b/src/DesperateDevs.Reflection/tests/PublicMemberInfoTests.cs new file mode 100644 index 00000000..6016c246 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/PublicMemberInfoTests.cs @@ -0,0 +1,159 @@ +using System; +using System.Linq; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Reflection.Tests +{ + public class PublicMemberInfoTests + { + [Fact] + public void CreatesEmptyInfoWhenClassHasNoFieldsOrProperties() + { + var infos = typeof(EmptyTestClass).GetPublicMemberInfos(); + infos.Should().BeEmpty(); + } + + [Fact] + public void CreatesMemberInfosForPublicFields() + { + var infos = typeof(TestClassWithFields).GetPublicMemberInfos(); + infos.Should().HaveCount(1); + var mi = infos[0]; + mi.Type.Should().Be(typeof(string)); + mi.Name.Should().Be("PublicField"); + mi.Attributes.Should().HaveCount(1); + var attribute = mi.Attributes.First(); + attribute.MemberInfos.Should().HaveCount(1); + var attrValue = attribute.MemberInfos.First().GetValue(attribute.Attribute); + attrValue.Should().Be("MyField"); + } + + [Fact] + public void CreatesMemberInfosForPublicProperties() + { + var infos = typeof(TestClassWithProperties).GetPublicMemberInfos(); + infos.Should().HaveCount(1); + var mi = infos[0]; + mi.Type.Should().Be(typeof(string)); + mi.Name.Should().Be("PublicProperty"); + mi.Attributes.Should().HaveCount(1); + var attribute = mi.Attributes.First(); + attribute.MemberInfos.Should().HaveCount(1); + var attrValue = attribute.MemberInfos.First().GetValue(attribute.Attribute); + attrValue.Should().Be("MyProperty"); + } + + [Fact] + public void CreatesMemberInfosForFieldsAndProperties() + { + var infos = typeof(TestClassWithFieldsAndProperties).GetPublicMemberInfos(); + infos.Should().HaveCount(2); + + infos[0].Type.Should().Be(typeof(string)); + infos[0].Name.Should().Be("PublicField"); + + infos[1].Type.Should().Be(typeof(string)); + infos[1].Name.Should().Be("PublicProperty"); + } + + [Fact] + public void GetsValuesForFieldsAndProperties() + { + var obj = new TestClassWithFieldsAndProperties + { + PublicField = "publicFieldValue", + PublicProperty = "publicPropertyValue" + }; + + var infos = obj.GetType().GetPublicMemberInfos(); + infos[0].GetValue(obj).Should().Be("publicFieldValue"); + infos[1].GetValue(obj).Should().Be("publicPropertyValue"); + } + + [Fact] + public void SetsValuesForFieldsAndProperties() + { + var obj = new TestClassWithFieldsAndProperties(); + var infos = obj.GetType().GetPublicMemberInfos(); + infos[0].SetValue(obj, "publicFieldValue"); + infos[1].SetValue(obj, "publicPropertyValue"); + obj.PublicField.Should().Be("publicFieldValue"); + obj.PublicProperty.Should().Be("publicPropertyValue"); + } + + [Fact] + public void ClonesObjectAndSetsPublicMembers() + { + var obj = new TestClassWithFieldsAndProperties + { + PublicField = "field", + PublicProperty = "property" + }; + + var clone = (TestClassWithFieldsAndProperties)obj.PublicMemberClone(); + clone.Should().NotBeSameAs(obj); + clone.PublicField.Should().Be(obj.PublicField); + clone.PublicProperty.Should().Be(obj.PublicProperty); + } + + [Fact] + public void CopiesPublicMembersToOtherObject() + { + var obj = new TestClassWithFieldsAndProperties + { + PublicField = "field", + PublicProperty = "property" + }; + var newObj = new TestClassWithFieldsAndProperties(); + obj.CopyPublicMemberValues(newObj); + newObj.PublicField.Should().Be(obj.PublicField); + newObj.PublicProperty.Should().Be(obj.PublicProperty); + } + } + + public class EmptyTestClass { } + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] + public class TestMemberAttribute : Attribute + { + public readonly string Value; + public TestMemberAttribute(string value) => Value = value; + } + + public class TestClassWithFields + { + [TestMember("MyField")] + public string PublicField; + + // Should be ignored +#pragma warning disable + public static bool PublicStaticField; + bool _privateField; + static bool _privateStaticField; + } + + public class TestClassWithProperties + { + [TestMember("MyProperty")] + public string PublicProperty { get; set; } + + // Should be ignored +#pragma warning disable + public static bool PublicStaticProperty { get; set; } + bool PrivateProperty { get; set; } + static bool PrivateStaticProperty { get; set; } + public string PublicPropertyGet => null; + + public string PublicPropertySet + { + set { } + } + } + + public class TestClassWithFieldsAndProperties + { + public string PublicField; + public string PublicProperty { get; set; } + } +} diff --git a/src/DesperateDevs.Reflection/tests/fixtures/AbstractTestInterfaceClass.cs b/src/DesperateDevs.Reflection/tests/fixtures/AbstractTestInterfaceClass.cs new file mode 100644 index 00000000..837c5dc6 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/fixtures/AbstractTestInterfaceClass.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Reflection.Tests.Fixtures +{ + public abstract class AbstractTestInterfaceClass : ITestInterface { } +} diff --git a/src/DesperateDevs.Reflection/tests/fixtures/ITestInterface.cs b/src/DesperateDevs.Reflection/tests/fixtures/ITestInterface.cs new file mode 100644 index 00000000..5ca32ef3 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/fixtures/ITestInterface.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Reflection.Tests.Fixtures +{ + public interface ITestInterface { } +} diff --git a/src/DesperateDevs.Reflection/tests/fixtures/TestInterfaceClass.cs b/src/DesperateDevs.Reflection/tests/fixtures/TestInterfaceClass.cs new file mode 100644 index 00000000..3de66c30 --- /dev/null +++ b/src/DesperateDevs.Reflection/tests/fixtures/TestInterfaceClass.cs @@ -0,0 +1,4 @@ +namespace DesperateDevs.Reflection.Tests.Fixtures +{ + public class TestInterfaceClass : ITestInterface { } +} diff --git a/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/DesperateDevs.Roslyn.CodeGeneration.Plugins.csproj b/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/DesperateDevs.Roslyn.CodeGeneration.Plugins.csproj deleted file mode 100644 index 0172a54a..00000000 --- a/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/DesperateDevs.Roslyn.CodeGeneration.Plugins.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultNetTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/PluginUtil.cs b/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/PluginUtil.cs deleted file mode 100644 index 0bc1591d..00000000 --- a/src/DesperateDevs.Roslyn.CodeGeneration.Plugins/src/PluginUtil.cs +++ /dev/null @@ -1,19 +0,0 @@ -ο»Ώusing System.Collections.Generic; - -namespace DesperateDevs.Roslyn.CodeGeneration.Plugins { - - public static class PluginUtil { - - public const string PROJECT_PARSER_KEY = "DesperateDevs.Roslyn.CodeGeneration.Plugins.ProjectParser"; - - public static ProjectParser GetCachedProjectParser(Dictionary objectCache, string projectPath) { - object cachedProjectParser; - if (!objectCache.TryGetValue(PROJECT_PARSER_KEY, out cachedProjectParser)) { - cachedProjectParser = new ProjectParser(projectPath); - objectCache.Add(PROJECT_PARSER_KEY, cachedProjectParser); - } - - return (ProjectParser)cachedProjectParser; - } - } -} diff --git a/src/DesperateDevs.Roslyn/README.md b/src/DesperateDevs.Roslyn/README.md deleted file mode 100644 index afefd28d..00000000 --- a/src/DesperateDevs.Roslyn/README.md +++ /dev/null @@ -1,12 +0,0 @@ -https://github.com/dotnet/roslyn - -Install packages: -Microsoft.Net.Compilers -Microsoft.CodeAnalysis - - Microsoft.CodeAnalysis.CSharp.Workspaces (use this instead) - -Fix, after roslyn update: -Microsoft.CodeAnalysis.Workspaces.MSBuild - -Copy Mono Hosted MSBuild into bin/Release -https://github.com/Microsoft/msbuild/releases/tag/mono-hosted-msbuild-v0.03 diff --git a/src/DesperateDevs.Roslyn/fixtures/DesperateDevs.Roslyn.Tests.Project/DesperateDevs.Roslyn.Tests.Project.csproj b/src/DesperateDevs.Roslyn/fixtures/DesperateDevs.Roslyn.Tests.Project/DesperateDevs.Roslyn.Tests.Project.csproj index 061215f6..88197f0e 100644 --- a/src/DesperateDevs.Roslyn/fixtures/DesperateDevs.Roslyn.Tests.Project/DesperateDevs.Roslyn.Tests.Project.csproj +++ b/src/DesperateDevs.Roslyn/fixtures/DesperateDevs.Roslyn.Tests.Project/DesperateDevs.Roslyn.Tests.Project.csproj @@ -33,6 +33,7 @@ false + false diff --git a/src/DesperateDevs.Roslyn/mono_msbuild_d25dd923839404bd64cc63f420e75acf96fc75c4.zip b/src/DesperateDevs.Roslyn/mono_msbuild_d25dd923839404bd64cc63f420e75acf96fc75c4.zip deleted file mode 100644 index 551514c2..00000000 Binary files a/src/DesperateDevs.Roslyn/mono_msbuild_d25dd923839404bd64cc63f420e75acf96fc75c4.zip and /dev/null differ diff --git a/src/DesperateDevs.Roslyn/src/DesperateDevs.Roslyn.csproj b/src/DesperateDevs.Roslyn/src/DesperateDevs.Roslyn.csproj index cd0bafab..7a79b38c 100644 --- a/src/DesperateDevs.Roslyn/src/DesperateDevs.Roslyn.csproj +++ b/src/DesperateDevs.Roslyn/src/DesperateDevs.Roslyn.csproj @@ -2,16 +2,13 @@ $(DefaultNetTargetFramework) + 1.0.0 - - - - - - - + + + diff --git a/src/DesperateDevs.Roslyn/src/ProjectParser.cs b/src/DesperateDevs.Roslyn/src/ProjectParser.cs new file mode 100644 index 00000000..496bfdfb --- /dev/null +++ b/src/DesperateDevs.Roslyn/src/ProjectParser.cs @@ -0,0 +1,35 @@ +ο»Ώusing System.Linq; +using Microsoft.Build.Locator; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.MSBuild; + +namespace DesperateDevs.Roslyn +{ + public class ProjectParser + { + readonly Project _project; + INamedTypeSymbol[] _types; + + public ProjectParser(string projectPath) + { + if (!MSBuildLocator.IsRegistered) MSBuildLocator.RegisterDefaults(); + using (var workspace = MSBuildWorkspace.Create()) + { + _project = workspace.OpenProjectAsync(projectPath).Result; + } + } + + public INamedTypeSymbol[] GetTypes() + { + if (_types == null) + { + _types = _project.GetCompilationAsync().Result + .GetSymbolsWithName(name => true, SymbolFilter.Type) + .OfType() + .ToArray(); + } + + return _types; + } + } +} diff --git a/src/DesperateDevs.Roslyn/src/ProjectParser/ProjectParser.cs b/src/DesperateDevs.Roslyn/src/ProjectParser/ProjectParser.cs deleted file mode 100644 index fb0d7c32..00000000 --- a/src/DesperateDevs.Roslyn/src/ProjectParser/ProjectParser.cs +++ /dev/null @@ -1,39 +0,0 @@ -ο»Ώusing System.Linq; -using DesperateDevs.Logging; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.MSBuild; - -namespace DesperateDevs.Roslyn { - - public class ProjectParser { - - static readonly Logger _logger = fabl.GetLogger(typeof(ProjectParser).Name); - - readonly Project _project; - INamedTypeSymbol[] _types; - - public ProjectParser(string projectPath) { - _logger.Debug("Opening " + projectPath); - - using (var workspace = MSBuildWorkspace.Create()) { - _project = workspace.OpenProjectAsync(projectPath).Result; - _logger.Debug("Opened " + _project.Name); - } - } - - public INamedTypeSymbol[] GetTypes() { - if (_types == null) { - _logger.Debug("Parsing " + _project.Name); - - _types = _project.GetCompilationAsync().Result - .GetSymbolsWithName(name => true, SymbolFilter.Type) - .OfType() - .ToArray(); - - _logger.Debug("Complete " + _project.Name); - } - - return _types; - } - } -} diff --git a/src/DesperateDevs.Roslyn/src/ProjectParser/SymbolExtension.cs b/src/DesperateDevs.Roslyn/src/ProjectParser/SymbolExtension.cs deleted file mode 100644 index e2daddda..00000000 --- a/src/DesperateDevs.Roslyn/src/ProjectParser/SymbolExtension.cs +++ /dev/null @@ -1,74 +0,0 @@ -ο»Ώusing System.Linq; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Syntax; - -namespace DesperateDevs.Roslyn { - - public static class SymbolExtension { - - public static AttributeData GetAttribute(this ISymbol type, bool inherit = false) { - return type.GetAttributes(inherit).SingleOrDefault(); - } - - public static AttributeData[] GetAttributes(this ISymbol type, bool inherit = false) { - return type.GetAttributes() - .Where(attr => isAttributeType(attr, inherit)) - .ToArray(); - } - - public static ISymbol[] GetPublicMembers(this ITypeSymbol type, bool includeBaseTypeMembers) { - var members = type.GetMembers() - .Where(isPublicMember) - .ToArray(); - - if (includeBaseTypeMembers) { - if (type.BaseType != null && type.BaseType.ToDisplayString() != "object") { - members = members.Concat(GetPublicMembers(type.BaseType, true)).ToArray(); - } - } - - return members; - } - - public static ITypeSymbol PublicMemberType(this ISymbol member) { - return (member is IFieldSymbol) - ? ((IFieldSymbol)member).Type - : ((IPropertySymbol)member).Type; - } - - public static string ToCompilableString(this ISymbol symbol) { - return symbol.ToDisplayString() - .Replace("*", string.Empty); - } - - static bool isAttributeType(AttributeData attr, bool inherit) { - return inherit - ? attr.AttributeClass.BaseType.ToCompilableString() == typeof(T).FullName - : attr.AttributeClass.ToCompilableString() == typeof(T).FullName; - } - - static bool isPublicMember(ISymbol symbol) { - return (symbol is IFieldSymbol || IsAutoProperty(symbol)) - && !symbol.IsStatic - && symbol.DeclaredAccessibility == Accessibility.Public - && symbol.CanBeReferencedByName; - } - - static bool IsAutoProperty(ISymbol symbol) { - var property = symbol as IPropertySymbol; - if (property != null) { - return property.SetMethod != null && property.GetMethod != null - && !property.GetMethod.DeclaringSyntaxReferences.First() - .GetSyntax() - .DescendantNodes() - .Any(node => node is MethodDeclarationSyntax) - && !property.SetMethod.DeclaringSyntaxReferences.First() - .GetSyntax() - .DescendantNodes() - .Any(node => node is MethodDeclarationSyntax); - } - - return false; - } - } -} diff --git a/src/DesperateDevs.Roslyn/src/SymbolExtension.cs b/src/DesperateDevs.Roslyn/src/SymbolExtension.cs new file mode 100644 index 00000000..a47e066c --- /dev/null +++ b/src/DesperateDevs.Roslyn/src/SymbolExtension.cs @@ -0,0 +1,67 @@ +ο»Ώusing System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace DesperateDevs.Roslyn +{ + public static class SymbolExtension + { + public static AttributeData GetAttribute(this ISymbol type, bool inherit = false) => + type.GetAttributes(inherit).SingleOrDefault(); + + public static AttributeData[] GetAttributes(this ISymbol type, bool inherit = false) => type.GetAttributes() + .Where(attr => IsAttributeType(attr, inherit)) + .ToArray(); + + public static ISymbol[] GetPublicMembers(this ITypeSymbol type, bool includeBaseTypeMembers) + { + var members = type.GetMembers() + .Where(IsPublicMember) + .ToArray(); + + if (includeBaseTypeMembers) + if (type.BaseType != null && type.BaseType.ToDisplayString() != "object") + members = members.Concat(GetPublicMembers(type.BaseType, true)).ToArray(); + + return members; + } + + public static ITypeSymbol PublicMemberType(this ISymbol member) => (member is IFieldSymbol) + ? ((IFieldSymbol)member).Type + : ((IPropertySymbol)member).Type; + + public static string ToCompilableString(this ISymbol symbol) => symbol.ToDisplayString() + .Replace("*", string.Empty); + + static bool IsAttributeType(AttributeData attr, bool inherit) => inherit + ? attr.AttributeClass.BaseType.ToCompilableString() == typeof(T).FullName + : attr.AttributeClass.ToCompilableString() == typeof(T).FullName; + + static bool IsPublicMember(ISymbol symbol) => + (symbol is IFieldSymbol || IsAutoProperty(symbol)) + && !symbol.IsStatic + && symbol.DeclaredAccessibility == Accessibility.Public + && symbol.CanBeReferencedByName; + + static bool IsAutoProperty(ISymbol symbol) + { + if (symbol is IPropertySymbol property) + { + return property.SetMethod != null + && property.GetMethod != null + && !property.GetMethod.DeclaringSyntaxReferences.First() + .GetSyntax() + .DescendantNodes() + .Any(node => node is MethodDeclarationSyntax) + && !property.SetMethod.DeclaringSyntaxReferences.First() + .GetSyntax() + .DescendantNodes() + .Any(node => node is MethodDeclarationSyntax); + } + else + { + return false; + } + } + } +} diff --git a/src/DesperateDevs.Roslyn/tests/DesperateDevs.Roslyn.Tests.csproj b/src/DesperateDevs.Roslyn/tests/DesperateDevs.Roslyn.Tests.csproj index aaaf25ca..10ebebc7 100644 --- a/src/DesperateDevs.Roslyn/tests/DesperateDevs.Roslyn.Tests.csproj +++ b/src/DesperateDevs.Roslyn/tests/DesperateDevs.Roslyn.Tests.csproj @@ -3,19 +3,21 @@ $(DefaultTestTargetFramework) false + false - - + + + - + - - + + diff --git a/src/DesperateDevs.Roslyn/tests/ProjectParserTests.cs b/src/DesperateDevs.Roslyn/tests/ProjectParserTests.cs index 728940b4..e579f5d2 100644 --- a/src/DesperateDevs.Roslyn/tests/ProjectParserTests.cs +++ b/src/DesperateDevs.Roslyn/tests/ProjectParserTests.cs @@ -1,5 +1,4 @@ ο»Ώusing System.IO; -using System.Linq; using DesperateDevs.Tests; using FluentAssertions; using Xunit; @@ -17,8 +16,7 @@ public void GetsAllTypes() { new ProjectParser(TestProject) .GetTypes() - .Any(c => c.ToCompilableString() == "DesperateDevs.Roslyn.Tests.Project.TestClass") - .Should().BeTrue(); + .Should().Contain(c => c.ToCompilableString() == "DesperateDevs.Roslyn.Tests.Project.TestClass"); } } } diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/AbstractPreferencesCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/AbstractPreferencesCommand.cs deleted file mode 100644 index c7438792..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/AbstractPreferencesCommand.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.IO; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public abstract class AbstractPreferencesCommand : AbstractCommand - { - public static string defaultPropertiesPath; - - protected readonly Logger _logger; - protected Preferences _preferences; - - protected AbstractPreferencesCommand(string loggerName) - { - _logger = fabl.GetLogger(loggerName); - } - - public override void Run(CLIProgram program, string[] args) - { - try - { - var propertiesPath = args.GetPropertiesPath() ?? defaultPropertiesPath; - if (!File.Exists(propertiesPath)) - { - throw new Exception("The file " + propertiesPath + " does not exist."); - } - - var userPropertiesPath = args.GetUserPropertiesPath(); - if (userPropertiesPath != null && !File.Exists(userPropertiesPath)) - { - throw new Exception("The file " + userPropertiesPath + " does not exist."); - } - - _preferences = new Preferences(propertiesPath, userPropertiesPath); - (this as IConfigurable)?.Configure(_preferences); - } - catch (Exception ex) - { - _logger.Error(ex.Message); - - return; - } - - base.Run(program, args); - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/ArgsExtension.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/ArgsExtension.cs deleted file mode 100644 index 06048e6c..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/ArgsExtension.cs +++ /dev/null @@ -1,23 +0,0 @@ -ο»Ώusing System; -using System.Linq; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public static class ArgsExtension - { - public static bool isForce(this string[] args) - { - return args.Any(arg => arg == "-f"); - } - - public static string GetPropertiesPath(this string[] args) - { - return args.SingleOrDefault(arg => arg.EndsWith(".properties", StringComparison.OrdinalIgnoreCase)); - } - - public static string GetUserPropertiesPath(this string[] args) - { - return args.SingleOrDefault(arg => arg.EndsWith(".userproperties", StringComparison.OrdinalIgnoreCase)); - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/CLIUtil.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/CLIUtil.cs deleted file mode 100644 index 8d2259bf..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/CLIUtil.cs +++ /dev/null @@ -1,18 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using System.Linq; -using DesperateDevs.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils { - - public static class CLIUtil { - - public static Dictionary GetDefaultProperties() { - return new Dictionary().Merge( - AppDomain.CurrentDomain - .GetInstancesOf() - .Select(instance => instance.defaultProperties) - .ToArray()); - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/AddKeyValueCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/AddKeyValueCommand.cs deleted file mode 100644 index a772fd69..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/AddKeyValueCommand.cs +++ /dev/null @@ -1,44 +0,0 @@ -ο»Ώusing DesperateDevs.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class AddKeyValueCommand : AbstractPreferencesCommand - { - public override string trigger => "add"; - public override string description => "Add a value to a key"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "add [key] [value]"; - - public AddKeyValueCommand() : base(typeof(AddKeyValueCommand).FullName) - { - } - - protected override void run() - { - if (_args.Length == 2) - { - addKeyValue(_args[0], _args[1]); - } - else - { - _logger.Error("The add command expects exactly two arguments"); - _logger.Info("E.g. add myKey myValue"); - } - } - - void addKeyValue(string key, string value) - { - if (_preferences.HasKey(key)) - { - _preferences.AddValue( - value, - _preferences[key].ArrayFromCSV(), - values => _preferences[key] = values.ToCSV()); - } - else - { - _preferences.AskAddKey("Key doesn't exist. Do you want to add", key, value); - } - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/CommandGroups.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/CommandGroups.cs deleted file mode 100644 index a083c5d2..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/CommandGroups.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.Serialization.CLI.Utils -{ - public static class CommandGroups - { - public const string PROPERTIES = "Properties"; - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/DumpCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/DumpCommand.cs deleted file mode 100644 index 1279fc5e..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/DumpCommand.cs +++ /dev/null @@ -1,46 +0,0 @@ -ο»Ώusing System.Linq; -using DesperateDevs.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class DumpCommand : AbstractPreferencesCommand - { - public override string trigger => "dump"; - public override string description => "List all config keys and values"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "dump"; - - public DumpCommand() : base(typeof(DumpCommand).FullName) - { - } - - protected override void run() - { - _logger.Debug(_preferences.ToString()); - - const string indent = "\nβ”œβ”€β”€ "; - const string lastIndent = "\n└── "; - foreach (var key in _preferences.keys) - { - var values = _preferences[key].ArrayFromCSV(); - - string valueString; - if (values.Length > 1) - { - valueString = indent + string.Join(indent, values.Take(values.Length - 1).ToArray()) + - lastIndent + values.Last(); - } - else if (values.Length == 1) - { - valueString = lastIndent + values[0]; - } - else - { - valueString = string.Empty; - } - - _logger.Info(key + valueString); - } - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/EditConfigCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/EditConfigCommand.cs deleted file mode 100644 index e148083a..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/EditConfigCommand.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Threading; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class EditConfigCommand : AbstractPreferencesCommand - { - public override string trigger => "edit"; - public override string description => "Open config files with default editor"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "edit"; - - public EditConfigCommand() : base(typeof(EditConfigCommand).FullName) - { - } - - protected override void run() - { - _logger.Debug("Opening " + _preferences.userPropertiesPath); - System.Diagnostics.Process.Start(_preferences.userPropertiesPath); - - Thread.Sleep(100); - - _logger.Debug("Opening " + _preferences.propertiesPath); - System.Diagnostics.Process.Start(_preferences.propertiesPath); - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/FormatCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/FormatCommand.cs deleted file mode 100644 index fa6f6fb3..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/FormatCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -ο»Ώusing DesperateDevs.CLI.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class FormatCommand : AbstractPreferencesCommand - { - public override string trigger => "format"; - public override string description => "Format the config files"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "format [-mini]"; - - public FormatCommand() : base(typeof(FormatCommand).FullName) - { - } - - protected override void run() - { - _preferences.minified = _args.HasParameter("-mini"); - _preferences.Save(); - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/NewConfigCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/NewConfigCommand.cs deleted file mode 100644 index d24de37c..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/NewConfigCommand.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.IO; -using DesperateDevs.CLI.Utils; -using DesperateDevs.Logging; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class NewConfigCommand : AbstractCommand - { - public override string trigger => "new"; - public override string description => "Create new properties file(s) with default values"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "new [file] [userFile] [-f]"; - - readonly Logger _logger = fabl.GetLogger(typeof(NewConfigCommand)); - - protected override void run() - { - var properties = _args.GetPropertiesPath(); - var userProperties = _args.GetUserPropertiesPath(); - - if (!_args.isForce() && (doesAlreadyExist(properties) || doesAlreadyExist(userProperties))) - { - return; - } - - var preferences = new Preferences(properties, userProperties); - preferences.Reset(true); - var defaultProperties = CLIUtil.GetDefaultProperties(); - preferences.properties.AddProperties(defaultProperties, true); - preferences.Save(); - - _logger.Info("Created " + preferences.propertiesPath); - _logger.Info("Created " + preferences.userPropertiesPath); - _logger.Debug(preferences.ToString()); - - if (!_rawArgs.IsSilent()) - { - new EditConfigCommand().Run(_program, _args); - } - } - - bool doesAlreadyExist(string path) - { - if (File.Exists(path)) - { - _logger.Warn(path + " already exists!"); - _logger.Info("Use 'new -f' to overwrite the exiting file."); - _logger.Info("Use 'edit' to open the exiting file."); - - return true; - } - - return false; - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/RemoveKeyValueCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/RemoveKeyValueCommand.cs deleted file mode 100644 index 95dee65c..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/RemoveKeyValueCommand.cs +++ /dev/null @@ -1,62 +0,0 @@ -ο»Ώusing DesperateDevs.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class RemoveKeyValueCommand : AbstractPreferencesCommand - { - public override string trigger => "remove"; - public override string description => "Remove a key or a value from a key"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "remove [key] [value]"; - - public RemoveKeyValueCommand() : base(typeof(RemoveKeyValueCommand).FullName) - { - } - - protected override void run() - { - if (_args.Length == 2) - { - removeValue(_args[0], _args[1]); - } - else if (_args.Length == 1) - { - removeKey(_args[0]); - } - else - { - _logger.Error("The remove command expects one or two arguments"); - _logger.Info("E.g. remove myKey myValue"); - } - } - - void removeValue(string key, string value) - { - if (_preferences.HasKey(key)) - { - _preferences.RemoveValue( - value, - _preferences[key].ArrayFromCSV(), - values => _preferences[key] = values.ToCSV()); - } - else - { - _logger.Warn("Key doesn't exist: " + key); - } - } - - void removeKey(string key) - { - if (_preferences.HasKey(key)) - { - _preferences.AskRemoveKey( - "Do you want to remove", - key); - } - else - { - _logger.Warn("Key doesn't exist: " + key); - } - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/SetKeyValueCommand.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/SetKeyValueCommand.cs deleted file mode 100644 index 7751e9ac..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/Commands/SetKeyValueCommand.cs +++ /dev/null @@ -1,44 +0,0 @@ -ο»Ώusing DesperateDevs.Utils; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public class SetKeyValueCommand : AbstractPreferencesCommand - { - public override string trigger => "set"; - public override string description => "Set the value of a key"; - public override string group => CommandGroups.PROPERTIES; - public override string example => "set [key] [value]"; - - public SetKeyValueCommand() : base(typeof(SetKeyValueCommand).FullName) - { - } - - protected override void run() - { - if (_args.Length == 2) - { - setKeyValue(_args[0], _args[1]); - } - else - { - _logger.Error("The set command expects exactly two arguments"); - _logger.Info("E.g. set myKey myValue"); - } - } - - void setKeyValue(string key, string value) - { - if (_preferences.HasKey(key)) - { - _preferences.AddValue( - value, - new string[0], - values => _preferences[key] = values.ToCSV()); - } - else - { - _preferences.AskAddKey("Key doesn't exist. Do you want to add", key, value); - } - } - } -} diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/DesperateDevs.Serialization.CLI.Utils.csproj b/src/DesperateDevs.Serialization.CLI.Utils/src/DesperateDevs.Serialization.CLI.Utils.csproj deleted file mode 100644 index d329db86..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/DesperateDevs.Serialization.CLI.Utils.csproj +++ /dev/null @@ -1,12 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - - diff --git a/src/DesperateDevs.Serialization.CLI.Utils/src/PreferencesExtension.cs b/src/DesperateDevs.Serialization.CLI.Utils/src/PreferencesExtension.cs deleted file mode 100644 index 115818d0..00000000 --- a/src/DesperateDevs.Serialization.CLI.Utils/src/PreferencesExtension.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Linq; -using DesperateDevs.Logging; - -namespace DesperateDevs.Serialization.CLI.Utils -{ - public static class PreferencesExtension - { - static readonly Logger _logger = fabl.GetLogger(typeof(PreferencesExtension)); - - public static string[] GetUnusedKeys(this Preferences preferences, string[] requiredKeys) - { - return preferences.keys - .Where(key => !requiredKeys.Contains(key)) - .ToArray(); - } - - public static string[] GetMissingKeys(this Preferences preferences, string[] requiredKeys) - { - return requiredKeys - .Where(key => !preferences.HasKey(key)) - .ToArray(); - } - - public static void NotifyForceAddKey(this Preferences preferences, string message, string key, string value) - { - Console.WriteLine("ℹ️ " + message + ": '" + key + "' (press any key)"); - Console.ReadKey(true); - AddKey(preferences, key, value); - } - - public static void AskAddKey(this Preferences preferences, string question, string key, string value) - { - Console.WriteLine("βœ… " + question + ": '" + key + "' ? (y / n)"); - if (GetUserDecision()) - { - AddKey(preferences, key, value); - } - } - - public static void AddKey(this Preferences preferences, string key, string value) - { - preferences[key] = value; - preferences.Save(); - _logger.Info("Added: " + key); - } - - public static void AskAddValue(this Preferences preferences, string question, string value, string[] values, Action updateAction) - { - Console.WriteLine("βœ… " + question + ": '" + value + "' ? (y / n)"); - if (GetUserDecision()) - { - AddValue(preferences, value, values, updateAction); - } - } - - public static void AddValue(this Preferences preferences, string value, string[] values, Action updateAction) - { - var valueList = values.ToList(); - valueList.Add(value); - updateAction(valueList.ToArray()); - preferences.Save(); - _logger.Info("Added: " + value); - } - - public static void AskRemoveKey(this Preferences preferences, string question, string key) - { - Console.WriteLine("❌ " + question + ": '" + key + "' ? (y / n)"); - if (GetUserDecision()) - { - RemoveKey(preferences, key); - } - } - - public static void RemoveKey(this Preferences preferences, string key) - { - preferences.properties.RemoveProperty(key); - preferences.Save(); - _logger.Warn("Removed: " + key); - } - - public static void AskRemoveValue(this Preferences preferences, string question, string value, string[] values, Action updateAction) - { - Console.WriteLine("❌ " + question + ": '" + value + "' ? (y / n)"); - if (GetUserDecision()) - { - RemoveValue(preferences, value, values, updateAction); - } - } - - public static void RemoveValue(this Preferences preferences, string value, string[] values, Action updateAction) - { - var valueList = values.ToList(); - if (valueList.Remove(value)) - { - updateAction(valueList.ToArray()); - preferences.Save(); - _logger.Warn("Removed: " + value); - } - else - { - _logger.Warn("Value does not exist: " + value); - } - } - - public static bool GetUserDecision(char accept = 'y', char cancel = 'n') - { - char keyChar; - do - { - keyChar = Console.ReadKey(true).KeyChar; - } while (keyChar != accept && keyChar != cancel); - - return keyChar == accept; - } - - public static char GetGenericUserDecision(char[] chars) - { - char keyChar; - do - { - keyChar = Console.ReadKey(true).KeyChar; - } while (!chars.Contains(keyChar)); - - return keyChar; - } - } -} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/AbstractPreferencesCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/AbstractPreferencesCommand.cs new file mode 100644 index 00000000..66d6337f --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/AbstractPreferencesCommand.cs @@ -0,0 +1,46 @@ +using System; +using System.IO; +using DesperateDevs.Cli.Utils; +using Sherlog; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public abstract class AbstractPreferencesCommand : AbstractCommand + { + public static string DefaultPropertiesPath; + + protected readonly Logger _logger; + protected Preferences _preferences; + + protected AbstractPreferencesCommand(string loggerName) + { + _logger = Logger.GetLogger(loggerName); + } + + public override void Run(CliProgram program, string[] args) + { + try + { + var propertiesPath = args.GetPropertiesPath() ?? DefaultPropertiesPath; + if (!File.Exists(propertiesPath)) + throw new Exception($"The file {propertiesPath} does not exist."); + + var userPropertiesPath = args.GetUserPropertiesPath(); + if (userPropertiesPath != null && !File.Exists(userPropertiesPath)) + throw new Exception($"The file {userPropertiesPath} does not exist."); + + _preferences = new Preferences(propertiesPath, userPropertiesPath); + + if (this is IConfigurable configurable) + configurable.Configure(_preferences); + } + catch (Exception exception) + { + _logger.Error(exception.Message); + return; + } + + base.Run(program, args); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/AddKeyValueCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/AddKeyValueCommand.cs new file mode 100644 index 00000000..579637e9 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/AddKeyValueCommand.cs @@ -0,0 +1,42 @@ +ο»Ώusing System; +using System.Linq; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Extensions; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class AddKeyValueCommand : AbstractPreferencesCommand + { + public override string Trigger => "add"; + public override string Description => "Add a value to a key"; + public override string Group => CommandGroups.Properties; + public override string Example => "add [key] [value]"; + + public AddKeyValueCommand() : base(typeof(AddKeyValueCommand).FullName) { } + + protected override void Run() + { + if (_args.Length == 2) + AddKeyValue(_args[0], _args[1]); + else + throw new Exception("The add command expects exactly two arguments, e.g. 'add myKey myValue'"); + } + + void AddKeyValue(string key, string value) + { + _preferences.TryGetValue(key, out var existingValues); + if (existingValues != null || _rawArgs.IsYes()) + { + _preferences.AddValue( + value, + existingValues?.FromCSV(true) ?? Enumerable.Empty(), + values => _preferences[key] = values.ToCSV(false, true) + ); + } + else if (!_rawArgs.IsNo()) + { + _preferences.AskAddKey("Key doesn't exist. Do you want to add", key, value); + } + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/ArgsExtension.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/ArgsExtension.cs new file mode 100644 index 00000000..05af2bbf --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/ArgsExtension.cs @@ -0,0 +1,14 @@ +ο»Ώusing System; +using System.Linq; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public static class ArgsExtension + { + public static string GetPropertiesPath(this string[] args) => + args.SingleOrDefault(arg => arg.EndsWith(".properties", StringComparison.OrdinalIgnoreCase)); + + public static string GetUserPropertiesPath(this string[] args) => + args.SingleOrDefault(arg => arg.EndsWith(".userproperties", StringComparison.OrdinalIgnoreCase)); + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/CommandGroups.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/CommandGroups.cs new file mode 100644 index 00000000..7cf3d749 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/CommandGroups.cs @@ -0,0 +1,7 @@ +ο»Ώnamespace DesperateDevs.Serialization.Cli.Utils +{ + public static class CommandGroups + { + public const string Properties = "Properties"; + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/DesperateDevs.Serialization.Cli.Utils.csproj b/src/DesperateDevs.Serialization.Cli.Utils/src/DesperateDevs.Serialization.Cli.Utils.csproj new file mode 100644 index 00000000..9adeedc5 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/DesperateDevs.Serialization.Cli.Utils.csproj @@ -0,0 +1,13 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/DumpCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/DumpCommand.cs new file mode 100644 index 00000000..0aeaed35 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/DumpCommand.cs @@ -0,0 +1,48 @@ +ο»Ώusing System.Linq; +using System.Text; +using DesperateDevs.Extensions; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class DumpCommand : AbstractPreferencesCommand + { + public override string Trigger => "dump"; + public override string Description => "List all config keys and values"; + public override string Group => CommandGroups.Properties; + public override string Example => "dump"; + + public DumpCommand() : base(typeof(DumpCommand).FullName) { } + + protected override void Run() + { + _logger.Debug(_preferences.ToString()); + + const string delimiter = ":"; + const string space = " "; + const string indent = "\n- "; + + var sb = new StringBuilder(); + foreach (var key in _preferences.Keys) + { + sb.Append(key); + sb.Append(delimiter); + var values = _preferences[key].FromCSV(true).ToArray(); + if (values.Length > 1) + { + sb.AppendLine(indent + string.Join(indent, values)); + } + else if (values.Length == 1) + { + sb.Append(space); + sb.AppendLine(values[0]); + } + else + { + sb.AppendLine(); + } + } + + _logger.Info(sb.ToString()); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/EditConfigCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/EditConfigCommand.cs new file mode 100644 index 00000000..a21b4772 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/EditConfigCommand.cs @@ -0,0 +1,25 @@ +using System.Threading; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class EditConfigCommand : AbstractPreferencesCommand + { + public override string Trigger => "edit"; + public override string Description => "Open config files with default editor"; + public override string Group => CommandGroups.Properties; + public override string Example => "edit"; + + public EditConfigCommand() : base(typeof(EditConfigCommand).FullName) { } + + protected override void Run() + { + _logger.Debug($"Opening {_preferences.UserPropertiesPath}"); + System.Diagnostics.Process.Start(_preferences.UserPropertiesPath); + + Thread.Sleep(100); + + _logger.Debug($"Opening {_preferences.PropertiesPath}"); + System.Diagnostics.Process.Start(_preferences.PropertiesPath); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/FormatCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/FormatCommand.cs new file mode 100644 index 00000000..33ec5717 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/FormatCommand.cs @@ -0,0 +1,19 @@ +ο»Ώusing DesperateDevs.Cli.Utils; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class FormatCommand : AbstractPreferencesCommand + { + public override string Trigger => "format"; + public override string Description => "Format the config files"; + public override string Group => CommandGroups.Properties; + public override string Example => "format [-mini]"; + + public FormatCommand() : base(typeof(FormatCommand).FullName) { } + + protected override void Run() + { + _preferences.Save(_args.HasParameter("-mini")); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/NewPreferencesCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/NewPreferencesCommand.cs new file mode 100644 index 00000000..e51a2b8b --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/NewPreferencesCommand.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Extensions; +using DesperateDevs.Reflection; +using Sherlog; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class NewPreferencesCommand : AbstractCommand + { + public override string Trigger => "new"; + public override string Description => "Create new properties file(s) with default values"; + public override string Group => CommandGroups.Properties; + public override string Example => "new [file] [userFile] [-f]"; + + readonly Logger _logger = Logger.GetLogger(typeof(NewPreferencesCommand)); + + protected override void Run() + { + var properties = _args.GetPropertiesPath(); + var userProperties = _args.GetUserPropertiesPath(); + + if (!_rawArgs.IsForce() && (Exists(properties) || Exists(userProperties))) + return; + + var preferences = new Preferences(properties, userProperties); + preferences.Clear(true); + var defaultProperties = new Dictionary().Merge( + AppDomain.CurrentDomain + .GetInstancesOf() + .Select(instance => instance.DefaultProperties)); + + preferences.Properties.AddProperties(defaultProperties, true); + preferences.Save(); + + _logger.Info($"Created {preferences.PropertiesPath}"); + _logger.Info($"Created {preferences.UserPropertiesPath}"); + _logger.Debug(preferences.ToString()); + + if (!_rawArgs.IsSilent()) + new EditConfigCommand().Run(_program, _args); + } + + bool Exists(string path) + { + if (File.Exists(path)) + { + _logger.Warn($"{path} already exists!"); + _logger.Info("Use 'new -f' to overwrite the exiting file."); + _logger.Info("Use 'edit' to open the exiting file."); + + return true; + } + else + { + return false; + } + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/PreferencesExtension.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/PreferencesExtension.cs new file mode 100644 index 00000000..f109bf31 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/PreferencesExtension.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Sherlog; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public static class PreferencesExtension + { + static readonly Logger Logger = Logger.GetLogger(typeof(PreferencesExtension)); + + public static IEnumerable GetUnusedKeys(this Preferences preferences, IEnumerable requiredKeys) => + preferences.Keys.Where(key => !requiredKeys.Contains(key)); + + public static IEnumerable GetMissingKeys(this Preferences preferences, IEnumerable requiredKeys) => + requiredKeys.Where(key => !preferences.HasKey(key)); + + public static void NotifyForceAddKey(this Preferences preferences, string message, string key, string value) + { + Console.WriteLine($"ℹ️ {message}: '{key}' (press any key)"); + Console.ReadKey(true); + AddKey(preferences, key, value); + } + + public static void AskAddKey(this Preferences preferences, string question, string key, string value) + { + Console.WriteLine($"βœ… {question}: '{key}' ? (y / n)"); + if (GetUserDecision()) + AddKey(preferences, key, value); + } + + public static void AddKey(this Preferences preferences, string key, string value) + { + preferences[key] = value; + preferences.Save(); + Logger.Info($"Added: {key}"); + } + + public static void AskAddValue(this Preferences preferences, string question, string value, IEnumerable values, Action> updateAction) + { + Console.WriteLine($"βœ… {question}: '{value}' ? (y / n)"); + if (GetUserDecision()) + AddValue(preferences, value, values, updateAction); + } + + public static void AddValue(this Preferences preferences, string value, IEnumerable values, Action> updateAction) + { + var list = values.ToList(); + list.Add(value); + updateAction(list); + preferences.Save(); + Logger.Info($"Added: {value}"); + } + + public static void AskRemoveKey(this Preferences preferences, string question, string key) + { + Console.WriteLine($"❌ {question}: '{key}' ? (y / n)"); + if (GetUserDecision()) + RemoveKey(preferences, key); + } + + public static void RemoveKey(this Preferences preferences, string key) + { + preferences.Properties.RemoveProperty(key); + preferences.Save(); + Logger.Warn($"Removed: {key}"); + } + + public static void AskRemoveValue(this Preferences preferences, string question, string value, IEnumerable values, Action> updateAction) + { + Console.WriteLine($"❌ {question}: '{value}' ? (y / n)"); + if (GetUserDecision()) + RemoveValue(preferences, value, values, updateAction); + } + + public static void RemoveValue(this Preferences preferences, string value, IEnumerable values, Action> updateAction) + { + var list = values.ToList(); + if (list.Remove(value)) + { + updateAction(list); + preferences.Save(); + Logger.Warn($"Removed: {value}"); + } + else + { + Logger.Warn($"Value does not exist: {value}"); + } + } + + public static bool GetUserDecision(char accept = 'y', char cancel = 'n') + { + char keyChar; + do + { + keyChar = Console.ReadKey(true).KeyChar; + } while (keyChar != accept && keyChar != cancel); + + return keyChar == accept; + } + + public static char GetGenericUserDecision(char[] chars) + { + char keyChar; + do + { + keyChar = Console.ReadKey(true).KeyChar; + } while (!chars.Contains(keyChar)); + + return keyChar; + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/src/RemoveKeyValueCommand.cs b/src/DesperateDevs.Serialization.Cli.Utils/src/RemoveKeyValueCommand.cs new file mode 100644 index 00000000..afd5896d --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/src/RemoveKeyValueCommand.cs @@ -0,0 +1,57 @@ +ο»Ώusing System; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Extensions; + +namespace DesperateDevs.Serialization.Cli.Utils +{ + public class RemoveKeyValueCommand : AbstractPreferencesCommand + { + public override string Trigger => "remove"; + public override string Description => "Remove a key or a value from a key"; + public override string Group => CommandGroups.Properties; + public override string Example => "remove [key] [value]"; + + public RemoveKeyValueCommand() : base(typeof(RemoveKeyValueCommand).FullName) { } + + protected override void Run() + { + if (_args.Length == 2) + RemoveValue(_args[0], _args[1]); + else if (_args.Length == 1) + RemoveKey(_args[0]); + else + throw new Exception("The remove command expects one or two arguments, e.g. 'remove myKey myValue'"); + } + + void RemoveValue(string key, string value) + { + if (_preferences.HasKey(key)) + { + _preferences.RemoveValue( + value, + _preferences[key].FromCSV(true), + values => _preferences[key] = values.ToCSV(false, true) + ); + } + else + { + _logger.Warn($"Key doesn't exist: {key}"); + } + } + + void RemoveKey(string key) + { + if (_preferences.HasKey(key)) + { + if (_rawArgs.IsYes()) + _preferences.RemoveKey(key); + else + _preferences.AskRemoveKey("Do you want to remove", key); + } + else + { + _logger.Warn($"Key doesn't exist: {key}"); + } + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/AddKeyValueCommandTests.cs b/src/DesperateDevs.Serialization.Cli.Utils/tests/AddKeyValueCommandTests.cs new file mode 100644 index 00000000..0b170dbf --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/AddKeyValueCommandTests.cs @@ -0,0 +1,71 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Serialization.Cli.Utils.Tests +{ + [Collection("DesperateDevs.Serialization.Cli.Utils.Tests")] + public class AddKeyValueCommandTests : IDisposable + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "DesperateDevs.Serialization.Cli.Utils", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp", nameof(AddKeyValueCommandTests)); + + readonly AddKeyValueCommand _command; + + Preferences Preferences => new Preferences(AbstractPreferencesCommand.DefaultPropertiesPath, null); + + public AddKeyValueCommandTests() + { + WriteTestPreferences(); + _command = new AddKeyValueCommand(); + } + + [Fact] + public void FailsWhenNotCorrectNumberOfArgs() + { + FluentActions.Invoking(() => Run()).Should().Throw(); + FluentActions.Invoking(() => Run("testKey")).Should().Throw(); + } + + [Fact] + public void AddsValueToNewKey() + { + Run("-y", "testKey", "test value"); + Preferences["testKey"].Should().Be("test value"); + } + + [Fact] + public void AddsValueToExistingKey() + { + Run("-y", "key", "test value"); + Preferences["key"].Should().Be("value, test value"); + } + + [Fact] + public void DoesNotAddValueToNewKeyWhenNo() + { + Run("-n", "testKey", "test value"); + Preferences.HasKey("testKey").Should().BeFalse(); + } + + void Run(params string[] args) + { + var list = args.ToList(); + list.Insert(0, _command.Trigger); + _command.Run(null, list.ToArray()); + } + + void WriteTestPreferences() + { + Directory.CreateDirectory(TempPath); + AbstractPreferencesCommand.DefaultPropertiesPath = Path.Combine(TempPath, "TestPreferences.properties"); + File.WriteAllText(AbstractPreferencesCommand.DefaultPropertiesPath, "key = value"); + } + + public void Dispose() => Directory.Delete(TempPath, true); + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/ArgsExtensionTests.cs b/src/DesperateDevs.Serialization.Cli.Utils/tests/ArgsExtensionTests.cs new file mode 100644 index 00000000..93590300 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/ArgsExtensionTests.cs @@ -0,0 +1,34 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace DesperateDevs.Serialization.Cli.Utils.Tests +{ + public class ArgsExtensionTests + { + [Fact] + public void DoesNotGetPropertiesPath() + { + new[] {""}.GetPropertiesPath().Should().BeNull(); + } + + [Fact] + public void GetsPropertiesPath() + { + const string properties = "test.properties"; + new[] {properties}.GetPropertiesPath().Should().Be(properties); + } + + [Fact] + public void DoesNotGetUserPropertiesPath() + { + new[] {""}.GetUserPropertiesPath().Should().BeNull(); + } + + [Fact] + public void GetsUserPropertiesPath() + { + const string properties = "test.userproperties"; + new[] {properties}.GetUserPropertiesPath().Should().Be(properties); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/DesperateDevs.Serialization.Cli.Utils.Tests.csproj b/src/DesperateDevs.Serialization.Cli.Utils/tests/DesperateDevs.Serialization.Cli.Utils.Tests.csproj new file mode 100644 index 00000000..bea9f5f6 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/DesperateDevs.Serialization.Cli.Utils.Tests.csproj @@ -0,0 +1,23 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/DumpCommandTests.cs b/src/DesperateDevs.Serialization.Cli.Utils/tests/DumpCommandTests.cs new file mode 100644 index 00000000..fe6ad800 --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/DumpCommandTests.cs @@ -0,0 +1,127 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Tests; +using FluentAssertions; +using Sherlog; +using Sherlog.Formatters; +using Xunit; +using Xunit.Abstractions; + +namespace DesperateDevs.Serialization.Cli.Utils.Tests +{ + [Collection("DesperateDevs.Serialization.Cli.Utils.Tests")] + public class DumpCommandTests : IDisposable + { + static readonly LogMessageFormatter Formatter = new LogMessageFormatter("{2}"); + + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "DesperateDevs.Serialization.Cli.Utils", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp", nameof(DumpCommandTests)); + + readonly ITestOutputHelper _output; + readonly List<(LogLevel LogLevel, string Message)> _logs; + readonly DumpCommand _command; + + public DumpCommandTests(ITestOutputHelper output) + { + _output = output; + _logs = new List<(LogLevel, string)>(); + Logger.AddAppender((logger, level, message) => _output.WriteLine(Formatter.FormatMessage(logger, level, message))); + Logger.AddAppender((_, level, message) => + { + if (level != LogLevel.Debug) _logs.Add((level, message)); + }); + _command = new DumpCommand(); + } + + [Fact] + public void DumpsEmptyPreferences() + { + WriteTestPreferences(string.Empty); + Run(); + _logs[0].Message.Should().Be(string.Empty); + } + + [Fact] + public void DumpsValue() + { + WriteTestPreferences("key = value"); + Run(); + _logs[0].Message.Should().Be(@"key: value +"); + } + + [Fact] + public void DumpsMultipleValues() + { + WriteTestPreferences("key1 = value1\nkey2 = value2"); + Run(); + _logs[0].Message.Should().Be(@"key1: value1 +key2: value2 +"); + } + + [Fact] + public void DumpsEmptyValue() + { + WriteTestPreferences("key1 =\nkey2 = value2"); + Run(); + _logs[0].Message.Should().Be(@"key1: +key2: value2 +"); + } + + [Fact] + public void DumpsMultiValueKey() + { + WriteTestPreferences("key = value1, value2, value3"); + Run(); + _logs[0].Message.Should().Be(@"key: +- value1 +- value2 +- value3 +"); + } + + [Fact] + public void DumpsMultipleMultiValueKeys() + { + WriteTestPreferences("key1 = value1, value2, value3\nkey2 = value4, value5, value6"); + Run(); + _logs[0].Message.Should().Be(@"key1: +- value1 +- value2 +- value3 +key2: +- value4 +- value5 +- value6 +"); + } + + void Run(params string[] args) + { + var list = args.ToList(); + list.Insert(0, _command.Trigger); + _command.Run(null, list.ToArray()); + } + + void WriteTestPreferences(string properties) + { + Directory.CreateDirectory(TempPath); + AbstractPreferencesCommand.DefaultPropertiesPath = Path.Combine(TempPath, "TestPreferences.properties"); + File.WriteAllText(AbstractPreferencesCommand.DefaultPropertiesPath, properties); + } + + public void Dispose() + { + Directory.Delete(TempPath, true); + _output.WriteLine("Dispose"); + Logger.GlobalLogLevel = LogLevel.On; + Logger.ClearAppenders(); + Logger.ClearLoggers(); + } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/NewPreferencesCommandTests.cs b/src/DesperateDevs.Serialization.Cli.Utils/tests/NewPreferencesCommandTests.cs new file mode 100644 index 00000000..eedbd45f --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/NewPreferencesCommandTests.cs @@ -0,0 +1,105 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Serialization.Cli.Utils.Tests +{ + [Collection("DesperateDevs.Serialization.Cli.Utils.Tests")] + public class NewPreferencesCommandTests : IDisposable + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "DesperateDevs.Serialization.Cli.Utils", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp", nameof(NewPreferencesCommandTests)); + + readonly NewPreferencesCommand _command; + + public NewPreferencesCommandTests() + { + Directory.CreateDirectory(TempPath); + _command = new NewPreferencesCommand(); + } + + [Fact] + public void ThrowsWhenInvalidProperty() + { + FluentActions.Invoking(() => Run()).Should().Throw(); + } + + [Fact] + public void CreatesNewPreferencesWithDefaultValues() + { + var propertiesPath = Path.Combine(TempPath, "New.properties"); + Run("-s", propertiesPath); + File.Exists(propertiesPath).Should().BeTrue(); + File.ReadAllText(propertiesPath).Should().Be("TestKey1 = TestValue1\nTestKey2 = TestValue2\n"); + } + + [Fact] + public void CreatesNewPreferencesWithUserProperties() + { + var propertiesPath = Path.Combine(TempPath, "New.properties"); + var userPropertiesPath = Path.Combine(TempPath, "New.userproperties"); + Run("-s", propertiesPath, userPropertiesPath); + File.Exists(propertiesPath).Should().BeTrue(); + File.Exists(userPropertiesPath).Should().BeTrue(); + } + + [Fact] + public void DoesNotCreateNewPreferencesIfPropertiesExists() + { + var propertiesPath = Path.Combine(TempPath, "New.properties"); + File.WriteAllText(propertiesPath, "test = value"); + Run("-s", propertiesPath); + File.ReadAllText(propertiesPath).Should().Be("test = value"); + } + + [Fact] + public void DoesNotCreateNewPreferencesIfUserPropertiesExists() + { + var propertiesPath = Path.Combine(TempPath, "New.properties"); + var userPropertiesPath = Path.Combine(TempPath, "New.userproperties"); + File.WriteAllText(userPropertiesPath, "test = value"); + + Run("-s", propertiesPath, userPropertiesPath); + File.ReadAllText(userPropertiesPath).Should().Be("test = value"); + File.Exists(propertiesPath).Should().BeFalse(); + } + + [Fact] + public void ForceOverwritesExistingPreferences() + { + var propertiesPath = Path.Combine(TempPath, "New.properties"); + var userPropertiesPath = Path.Combine(TempPath, "New.userproperties"); + File.WriteAllText(propertiesPath, "test = value"); + File.WriteAllText(userPropertiesPath, "test = value"); + + Run("-s", "-f", propertiesPath, userPropertiesPath); + File.ReadAllText(propertiesPath).Should().Be("TestKey1 = TestValue1\nTestKey2 = TestValue2\n"); + File.ReadAllText(userPropertiesPath).Should().Be(string.Empty); + } + + void Run(params string[] args) + { + var list = args.ToList(); + list.Insert(0, _command.Trigger); + _command.Run(null, list.ToArray()); + } + + public void Dispose() => Directory.Delete(TempPath, true); + } + + class TestConfig : IConfigurable + { + public Dictionary DefaultProperties => new Dictionary + { + {"TestKey1", "TestValue1"}, + {"TestKey2", "TestValue2"} + }; + + public void Configure(Preferences preferences) { } + } +} diff --git a/src/DesperateDevs.Serialization.Cli.Utils/tests/RemoveKeyValueCommandTests.cs b/src/DesperateDevs.Serialization.Cli.Utils/tests/RemoveKeyValueCommandTests.cs new file mode 100644 index 00000000..0767753b --- /dev/null +++ b/src/DesperateDevs.Serialization.Cli.Utils/tests/RemoveKeyValueCommandTests.cs @@ -0,0 +1,88 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace DesperateDevs.Serialization.Cli.Utils.Tests +{ + [Collection("DesperateDevs.Serialization.Cli.Utils.Tests")] + public class RemoveKeyValueCommandTests : IDisposable + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "DesperateDevs.Serialization.Cli.Utils", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp", nameof(RemoveKeyValueCommandTests)); + + readonly RemoveKeyValueCommand _command; + + Preferences Preferences => new Preferences(AbstractPreferencesCommand.DefaultPropertiesPath, null); + + public RemoveKeyValueCommandTests() + { + _command = new RemoveKeyValueCommand(); + } + + [Fact] + public void FailsWhenNotCorrectNumberOfArgs() + { + WriteTestPreferences("key = value"); + FluentActions.Invoking(() => Run()).Should().Throw(); + } + + [Fact] + public void RemovesKey() + { + WriteTestPreferences("key = value"); + Run("-y", "key"); + Preferences.HasKey("key").Should().BeFalse(); + } + + [Fact] + public void DoesNotRemoveKeyThatDoesNotExist() + { + WriteTestPreferences("key = value"); + Run("-y", "unknown"); + } + + [Fact] + public void RemovesValueFromKey() + { + WriteTestPreferences("key = value1, value2, value3"); + Run("-y", "key", "value2"); + Preferences["key"].Should().Be("value1, value3"); + } + + [Fact] + public void DoesNotRemoveValueThatDoesNotExist() + { + WriteTestPreferences("key = value1, value2, value3"); + Run("-y", "key", "unknown"); + Preferences["key"].Should().Be("value1, value2, value3"); + } + + [Fact] + public void DoesNotRemoveValueFromKeyThatDoesNotExist() + { + WriteTestPreferences("key = value1, value2, value3"); + Run("-y", "unknown", "value2"); + Preferences["key"].Should().Be("value1, value2, value3"); + } + + void Run(params string[] args) + { + var list = args.ToList(); + list.Insert(0, _command.Trigger); + _command.Run(null, list.ToArray()); + } + + void WriteTestPreferences(string properties) + { + Directory.CreateDirectory(TempPath); + AbstractPreferencesCommand.DefaultPropertiesPath = Path.Combine(TempPath, "TestPreferences.properties"); + File.WriteAllText(AbstractPreferencesCommand.DefaultPropertiesPath, properties); + } + + public void Dispose() => Directory.Delete(TempPath, true); + } +} diff --git a/src/DesperateDevs.Serialization/benchmarks/DesperateDevs.Serialization.Benchmarks.csproj b/src/DesperateDevs.Serialization/benchmarks/DesperateDevs.Serialization.Benchmarks.csproj new file mode 100644 index 00000000..f257daa9 --- /dev/null +++ b/src/DesperateDevs.Serialization/benchmarks/DesperateDevs.Serialization.Benchmarks.csproj @@ -0,0 +1,18 @@ + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + + + + + diff --git a/src/DesperateDevs.Serialization/benchmarks/Program.cs b/src/DesperateDevs.Serialization/benchmarks/Program.cs new file mode 100644 index 00000000..a40d256c --- /dev/null +++ b/src/DesperateDevs.Serialization/benchmarks/Program.cs @@ -0,0 +1,12 @@ +ο»Ώusing BenchmarkDotNet.Running; + +namespace DesperateDevs.Serialization.Benchmarks +{ + static class Program + { + public static void Main(string[] args) + { + BenchmarkRunner.Run(typeof(PropertiesBenchmarks)); + } + } +} diff --git a/src/DesperateDevs.Serialization/benchmarks/PropertiesBenchmarks.cs b/src/DesperateDevs.Serialization/benchmarks/PropertiesBenchmarks.cs new file mode 100644 index 00000000..c167f8ca --- /dev/null +++ b/src/DesperateDevs.Serialization/benchmarks/PropertiesBenchmarks.cs @@ -0,0 +1,62 @@ +using System.Text; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace DesperateDevs.Serialization.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class PropertiesBenchmarks + { + [Params(100, 10000)] + public int Lines { get; set; } + + string _input; + + [GlobalSetup] + public void GlobalSetup() + { + var sb = new StringBuilder(); + for (var i = 0; i < Lines; i++) + { + var value = i.ToString(); + sb.Append("key"); + sb.Append(value); + sb.Append(" = value"); + sb.AppendLine(value); + } + + _input = sb.ToString(); + } + + [Benchmark] + public Properties CreateProperties() => new Properties(_input); + + [Benchmark] + public Properties AddProperties() + { + var properties = new Properties(); + for (var i = 0; i < Lines; i++) + properties["key" + i] = "value" + i; + + return properties; + } + + [Benchmark] + public void GetProperties() + { + var properties = new Properties(_input); + for (var i = 0; i < Lines; i++) + { + var unused = properties["key" + i]; + } + } + + [Benchmark] + public string PropertiesToString() => new Properties(_input).ToString(); + + [Benchmark] + public string PropertiesToMinifiedString() => new Properties(_input).ToMinifiedString(); + } +} diff --git a/src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs b/src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs index 399f7dd8..88183422 100644 --- a/src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs +++ b/src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs @@ -1,28 +1,25 @@ ο»Ώusing System.Collections.Generic; -namespace DesperateDevs.Serialization { - - public static class ConfigurableConfigExtension { - - public static T CreateAndConfigure(this Preferences preferences) where T : IConfigurable, new() { +namespace DesperateDevs.Serialization +{ + public static class ConfigurableConfigExtension + { + public static T CreateAndConfigure(this Preferences preferences) where T : IConfigurable, new() + { var config = new T(); config.Configure(preferences); return config; } } - public abstract class AbstractConfigurableConfig : IConfigurable { - - public abstract Dictionary defaultProperties { get; } + public abstract class AbstractConfigurableConfig : IConfigurable + { + public abstract Dictionary DefaultProperties { get; } protected Preferences _preferences; - public virtual void Configure(Preferences preferences) { - _preferences = preferences; - } + public virtual void Configure(Preferences preferences) => _preferences = preferences; - public override string ToString() { - return _preferences.ToString(); - } + public override string ToString() => _preferences.ToString(); } } diff --git a/src/DesperateDevs.Serialization/src/DesperateDevs.Serialization.csproj b/src/DesperateDevs.Serialization/src/DesperateDevs.Serialization.csproj index 86c566cc..fba1b92c 100644 --- a/src/DesperateDevs.Serialization/src/DesperateDevs.Serialization.csproj +++ b/src/DesperateDevs.Serialization/src/DesperateDevs.Serialization.csproj @@ -2,10 +2,11 @@ $(DefaultTargetFramework) + 1.0.0 - + diff --git a/src/DesperateDevs.Serialization/src/IConfigurable.cs b/src/DesperateDevs.Serialization/src/IConfigurable.cs index 1841b618..71b7c98b 100644 --- a/src/DesperateDevs.Serialization/src/IConfigurable.cs +++ b/src/DesperateDevs.Serialization/src/IConfigurable.cs @@ -1,10 +1,10 @@ ο»Ώusing System.Collections.Generic; -namespace DesperateDevs.Serialization { - - public interface IConfigurable { - - Dictionary defaultProperties { get; } +namespace DesperateDevs.Serialization +{ + public interface IConfigurable + { + Dictionary DefaultProperties { get; } void Configure(Preferences preferences); } diff --git a/src/DesperateDevs.Serialization/src/Preferences.cs b/src/DesperateDevs.Serialization/src/Preferences.cs index ecd3f940..f9acf1a6 100644 --- a/src/DesperateDevs.Serialization/src/Preferences.cs +++ b/src/DesperateDevs.Serialization/src/Preferences.cs @@ -1,100 +1,90 @@ ο»Ώusing System; +using System.Collections.Generic; using System.IO; -namespace DesperateDevs.Serialization { +namespace DesperateDevs.Serialization +{ + public class Preferences + { + public static string DefaultUserPropertiesPath => Environment.UserName + ".userproperties"; - public class Preferences { + public readonly string PropertiesPath; + public readonly string UserPropertiesPath; - public static string defaultUserPropertiesPath { get { return Environment.UserName + ".userproperties"; } } + public IEnumerable Keys => _mergedProperties.Keys; - public string propertiesPath { get { return _propertiesPath; } } - public string userPropertiesPath { get { return _userPropertiesPath; } } + public Properties Properties { get; private set; } + public Properties UserProperties { get; private set; } - public string[] keys { get { return getMergedProperties().keys; } } + readonly bool _doubleQuotedValues; - public Properties properties { get { return _properties; } } - public Properties userProperties { get { return _userProperties; } } + Properties _mergedProperties; - public bool doubleQuoteMode { - get { return _isDoubleQuoteMode; } - set { - _isDoubleQuoteMode = value; - _properties.doubleQuoteMode = value; - _userProperties.doubleQuoteMode = value; - } + public Preferences(string propertiesPath, string userPropertiesPath, bool doubleQuotedValues = false) : this(doubleQuotedValues) + { + PropertiesPath = propertiesPath; + UserPropertiesPath = userPropertiesPath ?? DefaultUserPropertiesPath; + Reload(); } - public bool minified { - get { return _isMinified; } - set { _isMinified = value; } + protected Preferences(Properties properties, Properties userProperties, bool doubleQuotedValues = false) : this(doubleQuotedValues) + { + Properties = properties; + UserProperties = userProperties; + CreateMergedProperties(); } - readonly string _propertiesPath; - readonly string _userPropertiesPath; - - Properties _properties; - Properties _userProperties; - - bool _isDoubleQuoteMode; - bool _isMinified; + Preferences(bool doubleQuotedValues) => _doubleQuotedValues = doubleQuotedValues; - public Preferences(string propertiesPath, string userPropertiesPath) { - _propertiesPath = propertiesPath; - _userPropertiesPath = userPropertiesPath ?? defaultUserPropertiesPath; - Reload(); + public string this[string key] + { + get => _mergedProperties[key]; + set + { + Properties[key] = value; + _mergedProperties[key] = value; + } } - protected Preferences(Properties properties, Properties userProperties) { - _properties = properties; - _userProperties = userProperties; - } + public bool TryGetValue(string key, out string value) => _mergedProperties.TryGetValue(key, out value); - public void Reload() { - _properties = loadProperties(_propertiesPath); - _userProperties = loadProperties(_userPropertiesPath); + public void Reload() + { + Properties = LoadProperties(PropertiesPath); + UserProperties = LoadProperties(UserPropertiesPath); + CreateMergedProperties(); } - public void Save() { - File.WriteAllText(_propertiesPath, _isMinified ? _properties.ToMinifiedString() : _properties.ToString()); - File.WriteAllText(_userPropertiesPath, _isMinified ? _userProperties.ToMinifiedString() : _userProperties.ToString()); + void CreateMergedProperties() + { + _mergedProperties = new Properties(_doubleQuotedValues); + _mergedProperties.AddProperties(Properties.ToDictionary(), true); + _mergedProperties.AddProperties(UserProperties.ToDictionary(), true); } - public string this[string key] { - get { return getMergedProperties()[key]; } - set { - if (!_properties.HasKey(key) || value != this[key]) { - _properties[key] = value; - } - } + public void Save(bool minified = false) + { + File.WriteAllText(PropertiesPath, minified ? Properties.ToMinifiedString() : Properties.ToString()); + File.WriteAllText(UserPropertiesPath, minified ? UserProperties.ToMinifiedString() : UserProperties.ToString()); } - public bool HasKey(string key) { - return _properties.HasKey(key) || _userProperties.HasKey(key); - } + public bool HasKey(string key) => _mergedProperties.HasKey(key); - public void Reset(bool resetUser = false) { - _properties = new Properties(); - if (resetUser) { - _userProperties = new Properties(); - } + public void Clear(bool resetUser = false) + { + Properties = new Properties(_doubleQuotedValues); + if (resetUser) + UserProperties = new Properties(_doubleQuotedValues); + CreateMergedProperties(); } - public override string ToString() { - return getMergedProperties().ToString(); - } + public string ToMinifiedString() => _mergedProperties.ToMinifiedString(); + public override string ToString() => _mergedProperties.ToString(); - static Properties loadProperties(string path) { - return new Properties(File.Exists(path) + Properties LoadProperties(string path) => new Properties( + File.Exists(path) ? File.ReadAllText(path) - : string.Empty - ); - } - - Properties getMergedProperties() { - var mergedProperties = new Properties(_properties.ToDictionary()); - mergedProperties.doubleQuoteMode = _isDoubleQuoteMode; - mergedProperties.AddProperties(_userProperties.ToDictionary(), true); - return mergedProperties; - } + : string.Empty, + _doubleQuotedValues); } } diff --git a/src/DesperateDevs.Serialization/src/Properties.cs b/src/DesperateDevs.Serialization/src/Properties.cs index b60f95da..77c75216 100644 --- a/src/DesperateDevs.Serialization/src/Properties.cs +++ b/src/DesperateDevs.Serialization/src/Properties.cs @@ -1,195 +1,160 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Text.RegularExpressions; -using DesperateDevs.Utils; +using DesperateDevs.Extensions; -namespace DesperateDevs.Serialization { +namespace DesperateDevs.Serialization +{ + // Properties File Format + // https://docs.oracle.com/cd/E23095_01/Platform.93/ATGProgGuide/html/s0204propertiesfileformat01.html + public class Properties + { + const string VariablePattern = @"\${(.+?)}"; - public class Properties { + public IEnumerable Keys => _dict.Keys; + public IEnumerable Values => _dict.Values; + public int Count => _dict.Count; - public string[] keys { get { return _dict.Keys.ToArray(); } } - public string[] values { get { return _dict.Values.ToArray(); } } + readonly Dictionary _dict; + readonly bool _doubleQuotedValues; - public int count { get { return _dict.Count; } } + public Properties(bool doubleQuotedValues = false) : this(string.Empty, doubleQuotedValues) { } - const string placeholderPattern = @"\${(.+?)}"; + public Properties(string properties, bool doubleQuotedValues = false) + { + properties = properties.ToUnixLineEndings(); + _doubleQuotedValues = doubleQuotedValues; + _dict = new Dictionary(); + var lines = GetLinesWithProperties(properties); + AddProperties(MergeMultilineValues(lines)); + } - public bool doubleQuoteMode { - get { return _isDoubleQuoteMode; } - set { - _isDoubleQuoteMode = value; - foreach (var key in _dict.Keys.ToArray()) { - this[key] = this[key]; - } - } + public string this[string key] + { + get => ReplacePlaceholder(_dict[key]); + set => _dict[key] = UnescapedSpecialCharacters(value); } - bool _isDoubleQuoteMode; - - public string this[string key] { - get { - var value = Regex.Replace( - _dict[key], - placeholderPattern, - match => { - var matchValue = match.Groups[1].Value; - return _dict.ContainsKey(matchValue) - ? _dict[matchValue] - : "${" + matchValue + "}"; - }); - - return _isDoubleQuoteMode - ? removeDoubleQuotes(value) - : value; + string ReplacePlaceholder(string value) => Regex.Replace(value, VariablePattern, + match => _dict.TryGetValue(match.Groups[1].Value, out var reference) + ? reference + : match.Value); + + public bool TryGetValue(string key, out string value) + { + if (_dict.TryGetValue(key, out value)) + { + ReplacePlaceholder(value); + return true; } - set { - var unescaped = unescapedSpecialCharacters(value.Trim()); - _dict[key.Trim()] = _isDoubleQuoteMode - ? addDoubleQuotes(unescaped) - : unescaped; + else + { + return false; } } - readonly Dictionary _dict; + void AddProperties(IEnumerable lines) + { + var delimiter = new[] {'='}; + foreach (var line in lines) + { + var property = line.Split(delimiter, 2); + if (property.Length != 2) + throw new InvalidPropertyException(property[0]); - public Properties() : this(string.Empty) { + var value = property[1].Trim(); + this[property[0].TrimEnd()] = _doubleQuotedValues + ? value.Substring(1, value.Length - 2) + : value; + } } - public Properties(string properties) { - properties = properties.ToUnixLineEndings(); - _dict = new Dictionary(); - var lines = getLinesWithProperties(properties); - addProperties(mergeMultilineValues(lines)); + public void AddProperties(Dictionary properties, bool overwriteExisting) + { + foreach (var kvp in properties) + if (overwriteExisting || !HasKey(kvp.Key)) + this[kvp.Key] = kvp.Value; } - public Properties(Dictionary properties) { - _dict = new Dictionary(properties); - } + public void RemoveProperty(string key) => _dict.Remove(key); + public bool HasKey(string key) => _dict.ContainsKey(key); - public bool HasKey(string key) { - return _dict.ContainsKey(key); - } + public Dictionary ToDictionary() => new Dictionary(_dict); - public void AddProperties(Dictionary properties, bool overwriteExisting) { - foreach (var kv in properties) { - if (overwriteExisting || !HasKey(kv.Key)) { - this[kv.Key] = kv.Value; - } + public string ToMinifiedString() + { + var sb = new StringBuilder(); + foreach (var kvp in _dict) + { + var value = EscapedSpecialCharacters(kvp.Value); + sb.AppendLine(kvp.Key + "=" + (_doubleQuotedValues ? $"\"{value}\"" : value)); } - } - public void RemoveProperty(string key) { - _dict.Remove(key); + return sb.ToString(); } - public Dictionary ToDictionary() { - return new Dictionary(_dict); - } + public override string ToString() + { + var sb = new StringBuilder(); + foreach (var kvp in _dict) + { + var values = EscapedSpecialCharacters(kvp.Value) + .FromCSV(false) + .Select(entry => entry.PadLeft(kvp.Key.Length + 3 + entry.Length)); - void addProperties(string[] lines) { - var keyValueDelimiter = new[] { '=' }; - var properties = lines.Select( - line => line.Split(keyValueDelimiter, 2) - ); - foreach (var property in properties) { - if (property.Length != 2) { - throw new InvalidKeyPropertiesException(property[0]); - } - - this[property[0]] = property[1]; + var value = string.Join(", \\\n", values).TrimStart(); + sb.AppendLine(kvp.Key + " = " + (_doubleQuotedValues ? $"\"{value}\"" : value)); } - } - static string[] getLinesWithProperties(string properties) { - var delimiter = new[] { '\n' }; - return properties - .Split(delimiter, StringSplitOptions.RemoveEmptyEntries) - .Select(line => line.TrimStart(' ')) - .Where(line => !line.StartsWith("#", StringComparison.Ordinal)) - .ToArray(); + return sb.ToString(); } - static string[] mergeMultilineValues(string[] lines) { + static IEnumerable GetLinesWithProperties(string properties) => properties + .Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries) + .Select(line => line.TrimStart(' ')) + .Where(line => !line.StartsWith("#", StringComparison.Ordinal)); + + static IEnumerable MergeMultilineValues(IEnumerable lines) + { var currentProperty = string.Empty; - return lines.Aggregate(new List(), (acc, line) => { + var values = new List(); + foreach (var line in lines) + { currentProperty += line; - if (currentProperty.EndsWith("\\", StringComparison.Ordinal)) { + if (currentProperty.EndsWith("\\", StringComparison.Ordinal)) + { currentProperty = currentProperty.Substring( 0, currentProperty.Length - 1 ); - } else { - acc.Add(currentProperty); + } + else + { + values.Add(currentProperty); currentProperty = string.Empty; } - - return acc; - }).ToArray(); - } - - static string escapedSpecialCharacters(string str) { - return str - .Replace("\n", "\\n") - .Replace("\t", "\\t"); - } - - static string unescapedSpecialCharacters(string str) { - return str - .Replace("\\n", "\n") - .Replace("\\t", "\t"); - } - - static string addDoubleQuotes(string str) { - return isInDoubleQuotes(str) - ? str - : "\"" + str + "\""; - } - - static string removeDoubleQuotes(string str) { - return isInDoubleQuotes(str) - ? str.Substring(1, str.Length - 2) - : str; - } - - static bool isInDoubleQuotes(string str) { - return str.StartsWith("\"") && str.EndsWith("\""); - } - - static string propertyPair(string key, string value, bool minified) { - if (minified) { - return key + "=" + value; } - return key + " = " + value; + return values; } - public override string ToString() { - return _dict.Aggregate(string.Empty, (properties, kv) => { - var contentValues = escapedSpecialCharacters(kv.Value) - .ArrayFromCSV() - .Select(value => value.PadLeft(kv.Key.Length + 3 + value.Length)) - .ToArray(); + static string EscapedSpecialCharacters(string str) => str + .Replace("\n", "\\n") + .Replace("\t", "\\t"); - var content = string.Join(", \\\n", contentValues).TrimStart(); - - return properties + propertyPair(kv.Key, content, false) + (contentValues.Length > 1 ? "\n\n" : "\n"); - }); - } - - public string ToMinifiedString() { - return _dict.Aggregate(string.Empty, (properties, kv) => { - var content = escapedSpecialCharacters(kv.Value); - return properties + propertyPair(kv.Key, content, true) + "\n"; - }); - } + static string UnescapedSpecialCharacters(string str) => str + .Replace("\\n", "\n") + .Replace("\\t", "\t"); } - public class InvalidKeyPropertiesException : Exception { - - public readonly string key; + public class InvalidPropertyException : Exception + { + public readonly string Key; - public InvalidKeyPropertiesException(string key) : base("Invalid key: " + key) { - this.key = key; + public InvalidPropertyException(string key) : base("Invalid property: " + key) + { + Key = key; } } } diff --git a/src/DesperateDevs.Serialization/tests/DesperateDevs.Serialization.Tests.csproj b/src/DesperateDevs.Serialization/tests/DesperateDevs.Serialization.Tests.csproj index be000755..c7f8d3a4 100644 --- a/src/DesperateDevs.Serialization/tests/DesperateDevs.Serialization.Tests.csproj +++ b/src/DesperateDevs.Serialization/tests/DesperateDevs.Serialization.Tests.csproj @@ -3,18 +3,21 @@ $(DefaultTestTargetFramework) false + false - - + + + - + - + + diff --git a/src/DesperateDevs.Serialization/tests/Fixtures/TestPreferences.cs b/src/DesperateDevs.Serialization/tests/Fixtures/TestPreferences.cs deleted file mode 100644 index 5f670527..00000000 --- a/src/DesperateDevs.Serialization/tests/Fixtures/TestPreferences.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace DesperateDevs.Serialization.Tests.Fixtures -{ - public class TestPreferences : Preferences - { - public TestPreferences(string properties, string userProperties = null) - : base(new Properties(properties), new Properties(userProperties ?? string.Empty)) { } - } -} diff --git a/src/DesperateDevs.Serialization/tests/PreferencesTests.cs b/src/DesperateDevs.Serialization/tests/PreferencesTests.cs index bbbed015..cfd0d5ea 100644 --- a/src/DesperateDevs.Serialization/tests/PreferencesTests.cs +++ b/src/DesperateDevs.Serialization/tests/PreferencesTests.cs @@ -1,5 +1,8 @@ ο»Ώusing System.Collections.Generic; +using System.IO; +using System.Linq; using DesperateDevs.Serialization.Tests.Fixtures; +using DesperateDevs.Tests; using FluentAssertions; using Xunit; @@ -7,16 +10,26 @@ namespace DesperateDevs.Serialization.Tests { public class PreferencesTests { - TestPreferences Preferences => _preferences ??= new TestPreferences("key = value"); - TestPreferences UserPreferences => _preferences ??= new TestPreferences("key = ${userName}", "userName = Max"); + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "DesperateDevs.Serialization", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp"); + static readonly string TestPropertiesPath = Path.Combine(TempPath, "TestProperties.properties"); + static readonly string TestUserPropertiesPath = Path.Combine(TempPath, "TestUserProperties.properties"); + + TestPreferences Preferences => _preferences ?? (_preferences = new TestPreferences("key = value")); + TestPreferences UserPreferences => _preferences ?? (_preferences = new TestPreferences("key = ${userName}", "userName = Max")); + TestPreferences DoubleQuotedPreferences => _preferences ?? (_preferences = new TestPreferences("key = \"value\"", null, true)); TestPreferences _preferences; + string _properties; + string _userProperties; + [Fact] public void SetsProperties() { - Preferences.properties.count.Should().Be(1); - Preferences.properties.HasKey("key").Should().BeTrue(); - Preferences.userProperties.count.Should().Be(0); + Preferences.Properties.Count.Should().Be(1); + Preferences.Properties.HasKey("key").Should().BeTrue(); + Preferences.UserProperties.Count.Should().Be(0); } [Fact] @@ -28,7 +41,7 @@ public void GetsValueForKey() [Fact] public void ThrowsWhenGettingMissingKey() { - Preferences.Invoking(p => p["unknown"]) + FluentActions.Invoking(() => Preferences["unknown"]) .Should().Throw(); } @@ -38,6 +51,20 @@ public void HasKey() Preferences.HasKey("key").Should().BeTrue(); } + [Fact] + public void TryGetsValueForKey() + { + Preferences.TryGetValue("key", out var value).Should().BeTrue(); + value.Should().Be("value"); + } + + [Fact] + public void DoesNotTryGetValueForUnknownKey() + { + Preferences.TryGetValue("unknown", out var value).Should().BeFalse(); + value.Should().BeNull(); + } + [Fact] public void SetsKey() { @@ -52,18 +79,20 @@ public void CanToString() Preferences.ToString().Should().Be("key = value\n"); } - [Fact(Skip = "TODO")] - public void SupportsDoubleQuoteMode() + [Fact] + public void CanToMinifiedString() { - Preferences.doubleQuoteMode = true; - Preferences["key2"] = "value2"; - Preferences["key2"].Should().Be("\"value2\""); + Preferences.ToMinifiedString().Should().Be("key=value\n"); } [Fact] public void HasUserKey() { UserPreferences.HasKey("userName").Should().BeTrue(); + var keys = UserPreferences.Keys.ToArray(); + keys.Should().HaveCount(2); + keys.Should().Contain("key"); + keys.Should().Contain("userName"); } [Fact] @@ -73,42 +102,43 @@ public void ResolvesPlaceholderFromUserProperties() } [Fact] - public void DoesNotOverwriteValueWhenNotDifferent() + public void OverwritesValueWhenNotDifferent() { UserPreferences["key"] = "Max"; - UserPreferences.properties.ToString().Contains("Max").Should().BeFalse(); + UserPreferences.Properties.Values.Should().Contain("Max"); } [Fact] public void OverwritesValueWhenDifferent() { UserPreferences["key"] = "Jack"; - UserPreferences.properties.ToString().Contains("Jack").Should().BeTrue(); + UserPreferences.Properties.Values.Should().Contain("Jack"); + UserPreferences.UserProperties.Values.Should().NotContain("Jack"); } [Fact] public void UserPropertiesOverwriteDefaultProperties() { - var p = new TestPreferences( + new TestPreferences( "key = ${userName}", - "key = Overwrite"); - p["key"].Should().Be("Overwrite"); + "key = Overwrite" + )["key"].Should().Be("Overwrite"); } [Fact] public void ResetsDefaultProperties() { UserPreferences["newKey"] = "newValue"; - UserPreferences.Reset(); + UserPreferences.Clear(); UserPreferences.HasKey("newKey").Should().BeFalse(); UserPreferences.HasKey("userName").Should().BeTrue(); } [Fact] - public void ResetsAllProperties() + public void ClearsAllProperties() { UserPreferences["newKey"] = "newValue"; - UserPreferences.Reset(true); + UserPreferences.Clear(true); UserPreferences.HasKey("newKey").Should().BeFalse(); UserPreferences.HasKey("userName").Should().BeFalse(); } @@ -118,5 +148,92 @@ public void CanToStringWithUserProperties() { UserPreferences.ToString().Should().Be("key = ${userName}\nuserName = Max\n"); } + + [Fact] + public void ReadsValuesFromDoubleQuotedValues() + { + DoubleQuotedPreferences["key"].Should().Be("value"); + DoubleQuotedPreferences.ToString().Should().Be("key = \"value\"\n"); + } + + [Fact] + public void ResetsDoubleQuotedProperties() + { + DoubleQuotedPreferences.Clear(true); + DoubleQuotedPreferences["key2"] = "value2"; + DoubleQuotedPreferences["key2"].Should().Be("value2"); + DoubleQuotedPreferences.ToString().Should().Be("key2 = \"value2\"\n"); + } + + [Fact] + public void LoadsPreferencesFromDisk() + { + WriteTestPreferences(); + var preferences = new TestPreferences(_properties, null); + preferences["key"].Should().Be("value"); + } + + [Fact] + public void LoadsUserPreferencesFromDisk() + { + WriteTestPreferences(); + var preferences = new Preferences(TestPropertiesPath, TestUserPropertiesPath); + preferences["key"].Should().Be("Max"); + } + + [Fact] + public void ReloadsUserPreferences() + { + WriteTestPreferences(); + var preferences = new Preferences(TestPropertiesPath, TestUserPropertiesPath); + preferences["key"] = "test"; + preferences.Reload(); + preferences["key"].Should().Be("Max"); + } + + [Fact] + public void LoadsDoubleQuotedPreferencesFromDisk() + { + WriteTestPreferences("key=\"value\""); + var preferences = new Preferences(TestPropertiesPath, null, true); + preferences["key"].Should().Be("value"); + } + + [Fact] + public void SavesPreferencesToDisk() + { + AddKeyAndSave(false); + _properties.Should().Be("key = test\n"); + _userProperties.Should().Be("key = ${userName}\nuserName = Max\n"); + } + + [Fact] + public void SavesMinifiedPreferencesToDisk() + { + AddKeyAndSave(true); + _properties.Should().Be("key=test\n"); + _userProperties.Should().Be("key=${userName}\nuserName=Max\n"); + } + + void WriteTestPreferences(string properties = "key = value", string userProperties = "key = ${userName}\nuserName = Max") + { + if (!Directory.Exists(TempPath)) Directory.CreateDirectory(TempPath); + File.WriteAllText(TestPropertiesPath, properties); + File.WriteAllText(TestUserPropertiesPath, userProperties); + _properties = properties; + _userProperties = userProperties; + } + + void AddKeyAndSave(bool minified, string properties = "key = value", string userProperties = "key = ${userName}\nuserName = Max") + { + WriteTestPreferences(properties, userProperties); + + var preferences = new Preferences(TestPropertiesPath, TestUserPropertiesPath); + preferences["key"] = "test"; + preferences.Save(minified); + + _properties = File.ReadAllText(TestPropertiesPath); + _userProperties = File.ReadAllText(TestUserPropertiesPath); + } } } diff --git a/src/DesperateDevs.Serialization/tests/PropertiesTests.cs b/src/DesperateDevs.Serialization/tests/PropertiesTests.cs index c13e0133..81382fb9 100644 --- a/src/DesperateDevs.Serialization/tests/PropertiesTests.cs +++ b/src/DesperateDevs.Serialization/tests/PropertiesTests.cs @@ -1,4 +1,5 @@ ο»Ώusing System.Collections.Generic; +using System.Linq; using FluentAssertions; using Xunit; @@ -15,218 +16,225 @@ public void IsEmpty() [Fact] public void CreatesPropertiesFromSingleLineInputString() { - const string input = "some.key=some value"; - const string expectedOutput = "some.key = some value\n"; - var expectedProperties = new Dictionary - { - {"some.key", "some value"} - }; + AssertProperties( + "some.key = some value", + "some.key = some value\n", new Dictionary + { + {"some.key", "some value"} + } + ); + } + + [Fact] + public void TryGetsValueForKey() + { + var properties = new Properties("some.key = some value\n"); + properties.TryGetValue("some.key", out var value).Should().BeTrue(); + value.Should().Be("some value"); + } - AssertProperties(input, expectedOutput, expectedProperties); + [Fact] + public void DoesNotTryGetValueForUnknownKey() + { + var properties = new Properties("some.key = some value\n"); + properties.TryGetValue("unknown", out var value).Should().BeFalse(); + value.Should().BeNull(); } [Fact] - public void IgnoresWhitespaceBetweenKeyAndValue() + public void CreatesPropertiesFromMinifiedSingleLineInputString() { - const string input = "some.key = some value"; - const string expectedOutput = "some.key = some value\n"; - var expectedProperties = new Dictionary - { - {"some.key", "some value"} - }; + AssertProperties( + "some.key=some value", + "some.key = some value\n", new Dictionary + { + {"some.key", "some value"} + } + ); + } - AssertProperties(input, expectedOutput, expectedProperties); + [Fact] + public void IgnoresWhitespaceBetweenKeyAndValue() + { + AssertProperties( + "some.key = some value", + "some.key = some value\n", new Dictionary + { + {"some.key", "some value"} + } + ); } [Fact] public void IgnoresWhitespaceBeforeKey() { - const string input = " some.key = some value"; - const string expectedOutput = "some.key = some value\n"; - var expectedProperties = new Dictionary - { - {"some.key", "some value"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + AssertProperties( + " some.key = some value", + "some.key = some value\n", + new Dictionary + { + {"some.key", "some value"} + } + ); } [Fact] public void RemovesTrailingWhitespace() { - const string input = "some.key = some value "; - const string expectedOutput = "some.key = some value\n"; - var expectedProperties = new Dictionary - { - {"some.key", "some value"} - }; + AssertProperties( + "some.key = some value ", + "some.key = some value\n", + new Dictionary + { + {"some.key", "some value"} + } + ); + } - AssertProperties(input, expectedOutput, expectedProperties); + [Fact] + public void ToStringFormatsCommaSeparatedValues() + { + AssertProperties( + "some.key = one, two, three,four ", + "some.key = one, \\\n" + + " two, \\\n" + + " three, \\\n" + + " four\n", + new Dictionary + { + {"some.key", "one, two, three,four"} + } + ); } [Fact] public void CreatesPropertiesFromMultilineInputString() { - var input = - "some.key.1=some value 1" + "\n" + - " some.key.2 = some value 2" + "\n" + - "some.key.3=some value 3" + "\n"; - - const string expectedOutput = + AssertProperties( "some.key.1 = some value 1\n" + "some.key.2 = some value 2\n" + - "some.key.3 = some value 3\n"; - - var expectedProperties = new Dictionary - { - {"some.key.1", "some value 1"}, - {"some.key.2", "some value 2"}, - {"some.key.3", "some value 3"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "some.key.3 = some value 3\n", + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\n" + + "some.key.3 = some value 3\n", + new Dictionary + { + {"some.key.1", "some value 1"}, + {"some.key.2", "some value 2"}, + {"some.key.3", "some value 3"} + } + ); } [Fact] public void CreatesPropertiesFromMultilineInputStringWhereValuesContainsEquals() { - var input = - "some.key.1=some=value 1" + "\n" + - "some.key.2 ==some value 2" + "\n" + - "some.key.3=some value=" + "\n"; - - const string expectedOutput = + AssertProperties( "some.key.1 = some=value 1\n" + "some.key.2 = =some value 2\n" + - "some.key.3 = some value=\n"; - - var expectedProperties = new Dictionary - { - {"some.key.1", "some=value 1"}, - {"some.key.2", "=some value 2"}, - {"some.key.3", "some value="} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "some.key.3 = some value=\n", + "some.key.1 = some=value 1\n" + + "some.key.2 = =some value 2\n" + + "some.key.3 = some value=\n", + new Dictionary + { + {"some.key.1", "some=value 1"}, + {"some.key.2", "=some value 2"}, + {"some.key.3", "some value="} + } + ); } [Fact] - public void ThrowsWhenInvalidKey() + public void ThrowsWhenInvalidProperty() { - var input = - "some.key.1 = some value 1" + "\n" + - "some.key.2" + "\n" + - "some.key.3 = some value 3" + "\n"; - - InvalidKeyPropertiesException exception = null; - try - { - new Properties(input); - } - catch (InvalidKeyPropertiesException ex) - { - exception = ex; - } - - exception.Should().NotBeNull(); - exception.key.Should().Be("some.key.2"); + FluentActions.Invoking(() => + new Properties("some.key.1 = some value 1\n" + + "some.key.2\n" + + "some.key.3 = some value 3\n") + ).Should().Throw() + .Which.Key.Should().Be("some.key.2"); } [Fact] public void IgnoresBlankLines() { - var input = + AssertProperties( "\n" + - "some.key.1=some value 1" + "\n" + + "some.key.1 = some value 1\n" + "\n" + - " some.key.2 = some value 2" + "\n" + + " some.key.2 = some value 2\n" + "\n" + - "some.key.3=some value 3" + "\n"; - - const string expectedOutput = + "some.key.3 = some value 3\n", "some.key.1 = some value 1\n" + "some.key.2 = some value 2\n" + - "some.key.3 = some value 3\n"; - - var expectedProperties = new Dictionary - { - {"some.key.1", "some value 1"}, - {"some.key.2", "some value 2"}, - {"some.key.3", "some value 3"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "some.key.3 = some value 3\n", + new Dictionary + { + {"some.key.1", "some value 1"}, + {"some.key.2", "some value 2"}, + {"some.key.3", "some value 3"} + } + ); } [Fact] public void IgnoresComments() { - var input = - "#some.key.1=some value 1" + "\n" + - " #some.key.2 = some value 2 " + "\n" + - "some.key.3=some value 3" + "\n"; - - const string expectedOutput = - "some.key.3 = some value 3\n"; - - var expectedProperties = new Dictionary - { - {"some.key.3", "some value 3"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + AssertProperties( + "#some.key.1 = some value 1\n" + + " #some.key.2 = some value 2\n" + + "some.key.3 = some value #3\n", + "some.key.3 = some value #3\n", + new Dictionary + { + {"some.key.3", "some value #3"} + } + ); } [Fact] public void SupportsMultilineValues() { - var input = - "some.key=some val\\" + "\n" + "ue" + "\n" + - "some.other.key=other val\\" + "\n" + "ue" + "\n"; - - const string expectedOutput = + AssertProperties( + "some.key = some val\\\nue\n" + + "some.other.key = other val\\\nue\n", "some.key = some value\n" + - "some.other.key = other value\n"; - - var expectedProperties = new Dictionary - { - {"some.key", "some value"}, - {"some.other.key", "other value"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "some.other.key = other value\n", + new Dictionary + { + {"some.key", "some value"}, + {"some.other.key", "other value"} + } + ); } [Fact] public void TrimsLeadingWhitespaceOfMultilineValues() { - var input = - "some.key=some val\\" + "\n" + " ue" + "\n" + - "some.other.key=other val\\" + "\n" + " ue" + "\n"; - - const string expectedOutput = + AssertProperties( + "some.key = some val\\\n ue\n" + + "some.other.key = other val\\\n ue\n", "some.key = some value\n" + - "some.other.key = other value\n"; - - var expectedProperties = new Dictionary - { - {"some.key", "some value"}, - {"some.other.key", "other value"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "some.other.key = other value\n", + new Dictionary + { + {"some.key", "some value"}, + {"some.other.key", "other value"} + } + ); } [Fact] public void HasAllKeys() { - var input = - "some.key.1=some value 1" + "\n" + - " some.key.2 = some value 2 " + "\n" + - "some.key.3=some value 3" + "\n"; + var keys = new Properties( + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\n" + + "some.key.3 = some value 3\n" + ).Keys.ToArray(); - var keys = new Properties(input).keys; - keys.Length.Should().Be(3); + keys.Should().HaveCount(3); keys.Should().Contain("some.key.1"); keys.Should().Contain("some.key.2"); keys.Should().Contain("some.key.3"); @@ -235,13 +243,13 @@ public void HasAllKeys() [Fact] public void HasAllValues() { - var input = - "some.key.1=some value 1" + "\n" + - " some.key.2 = some value 2 " + "\n" + - "some.key.3=some value 3" + "\n"; + var values = new Properties( + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\n" + + "some.key.3 = some value 3\n" + ).Values.ToArray(); - var values = new Properties(input).values; - values.Length.Should().Be(3); + values.Should().HaveCount(3); values.Should().Contain("some value 1"); values.Should().Contain("some value 2"); values.Should().Contain("some value 3"); @@ -250,14 +258,13 @@ public void HasAllValues() [Fact] public void GetsDictionary() { - var input = - "some.key.1=some value 1" + "\n" + - " some.key.2 = some value 2 " + "\n" + - "some.key.3=some value 3" + "\n"; - - var properties = new Properties(input); + var properties = new Properties( + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\n" + + "some.key.3 = some value 3\n" + ); var dict = properties.ToDictionary(); - dict.Count.Should().Be(3); + dict.Should().HaveCount(3); dict.ContainsKey("some.key.1").Should().BeTrue(); dict.ContainsKey("some.key.2").Should().BeTrue(); dict.ContainsKey("some.key.3").Should().BeTrue(); @@ -268,233 +275,200 @@ public void GetsDictionary() [Fact] public void ReplacesNewline() { - var input = - @"some.key=some\nvalue" + "\n" + - @"some.other.key=other\nvalue" + "\n"; - - const string expectedOutput = + AssertProperties( @"some.key = some\nvalue" + "\n" + - @"some.other.key = other\nvalue" + "\n"; - - var expectedProperties = new Dictionary - { - {"some.key", "some\nvalue"}, - {"some.other.key", "other\nvalue"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + @"some.other.key = other\nvalue" + "\n", + @"some.key = some\nvalue" + "\n" + + @"some.other.key = other\nvalue" + "\n", + new Dictionary + { + {"some.key", "some\nvalue"}, + {"some.other.key", "other\nvalue"} + } + ); } [Fact] public void ReplacesTabs() { - var input = - @"some.key=some\tvalue" + "\n" + - @"some.other.key=other\tvalue" + "\n"; - - const string expectedOutput = + AssertProperties( @"some.key = some\tvalue" + "\n" + - @"some.other.key = other\tvalue" + "\n"; - - var expectedProperties = new Dictionary - { - {"some.key", "some\tvalue"}, - {"some.other.key", "other\tvalue"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + @"some.other.key = other\tvalue" + "\n", + @"some.key = some\tvalue" + "\n" + + @"some.other.key = other\tvalue" + "\n", + new Dictionary + { + {"some.key", "some\tvalue"}, + {"some.other.key", "other\tvalue"} + } + ); } [Fact] public void SetsNewProperty() { - var p = new Properties(); - p["key"] = "value"; - p["key"].Should().Be("value"); - } - - [Fact] - public void TrimsKey() - { - var p = new Properties(); - p[" key "] = "value"; - p["key"].Should().Be("value"); + var properties = new Properties(); + properties["key"] = "value"; + properties["key"].Should().Be("value"); } [Fact] - public void TrimsStartOfValue() + public void DoesNotTrimKey() { - var p = new Properties(); - p["key"] = " value"; - p["key"].Should().Be("value"); + var properties = new Properties(); + properties[" key "] = "value"; + properties[" key "].Should().Be("value"); } [Fact] - public void RemovesTrailingWhiteSpace() + public void DoesNotTrimValue() { - var p = new Properties(); - p["key"] = "value"; - p["key"].Should().Be("value"); + var properties = new Properties(); + properties["key"] = " value "; + properties["key"].Should().Be(" value "); } [Fact] public void AddsPropertiesFromDictionary() { - var p = new Properties(); + var properties = new Properties(); var dict = new Dictionary { {"key1", "value1"}, {"key2", "value2"} }; - p.AddProperties(dict, true); + properties.AddProperties(dict, true); - p.count.Should().Be(dict.Count); - p["key1"].Should().Be("value1"); - p["key2"].Should().Be("value2"); + properties.Count.Should().Be(dict.Count); + properties["key1"].Should().Be("value1"); + properties["key2"].Should().Be("value2"); } [Fact] public void OverwritesExistingPropertiesFromDictionary() { - var p = new Properties(); + var properties = new Properties(); var dict = new Dictionary { {"key1", "value1"}, {"key2", "value2"} }; - p["key1"] = "existingKey"; - p.AddProperties(dict, true); + properties["key1"] = "existingKey"; + properties.AddProperties(dict, true); - p.count.Should().Be(dict.Count); - p["key1"].Should().Be("value1"); - p["key2"].Should().Be("value2"); + properties.Count.Should().Be(dict.Count); + properties["key1"].Should().Be("value1"); + properties["key2"].Should().Be("value2"); } [Fact] public void OnlyAddsMissingKeysFromDictionary() { - var p = new Properties(); + var properties = new Properties(); var dict = new Dictionary { {"key1", "value1"}, {"key2", "value2"} }; - p["key1"] = "existingKey"; - p.AddProperties(dict, false); + properties["key1"] = "existingKey"; + properties.AddProperties(dict, false); - p.count.Should().Be(dict.Count); - p["key1"].Should().Be("existingKey"); - p["key2"].Should().Be("value2"); + properties.Count.Should().Be(dict.Count); + properties["key1"].Should().Be("existingKey"); + properties["key2"].Should().Be("value2"); } [Fact] public void RemovesKey() { - var p = new Properties(); - p["key"] = "value"; - p.RemoveProperty("key"); - p.HasKey("key").Should().BeFalse(); + var properties = new Properties(); + properties["key"] = "value"; + properties.RemoveProperty("key"); + properties.HasKey("key").Should().BeFalse(); } [Fact] public void ReplacesPlaceholder() { - var input = - "project.name = Project" + "\n" + - "project.domain = com.desperatedevs" + "\n" + - "project.bundleId = ${project.domain}.${project.name}" + "\n"; - - const string expectedOutput = + AssertProperties( "project.name = Project\n" + "project.domain = com.desperatedevs\n" + - "project.bundleId = ${project.domain}.${project.name}\n"; - - var expectedProperties = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "com.desperatedevs.Project"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "project.bundleId = ${project.domain}.${project.name}\n", + "project.name = Project\n" + + "project.domain = com.desperatedevs\n" + + "project.bundleId = ${project.domain}.${project.name}\n", + new Dictionary + { + {"project.name", "Project"}, + {"project.domain", "com.desperatedevs"}, + {"project.bundleId", "com.desperatedevs.Project"} + } + ); } [Fact] public void ReplacesPlaceholderWhenAddingNewProperty() { - var input = - "project.name = Project" + "\n" + - "project.domain = com.desperatedevs" + "\n"; - - const string expectedOutput = + AssertProperties( + new Properties("project.name = Project\nproject.domain = com.desperatedevs\n") + { + ["project.bundleId"] = "${project.domain}.${project.name}" + }, "project.name = Project\n" + "project.domain = com.desperatedevs\n" + - "project.bundleId = ${project.domain}.${project.name}\n"; - - var expectedProperties = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "com.desperatedevs.Project"} - }; - - var p = new Properties(input); - p["project.bundleId"] = "${project.domain}.${project.name}"; - - AssertProperties(input, expectedOutput, expectedProperties, p); + "project.bundleId = ${project.domain}.${project.name}\n", + new Dictionary + { + {"project.name", "Project"}, + {"project.domain", "com.desperatedevs"}, + {"project.bundleId", "com.desperatedevs.Project"} + } + ); } [Fact] public void DoesNotReplacePlaceholderWhenNotResolvable() { - var input = - "project.name = Project" + "\n" + - "project.domain = com.desperatedevs" + "\n" + - "project.bundleId = ${Xproject.domain}.${Xproject.name}" + "\n"; - - const string expectedOutput = + AssertProperties( "project.name = Project\n" + "project.domain = com.desperatedevs\n" + - "project.bundleId = ${Xproject.domain}.${Xproject.name}\n"; - - var expectedProperties = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "${Xproject.domain}.${Xproject.name}"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + "project.bundleId = ${unknown.domain}.${unknown.name}\n", + "project.name = Project\n" + + "project.domain = com.desperatedevs\n" + + "project.bundleId = ${unknown.domain}.${unknown.name}\n", + new Dictionary + { + {"project.name", "Project"}, + {"project.domain", "com.desperatedevs"}, + {"project.bundleId", "${unknown.domain}.${unknown.name}"} + } + ); } [Fact] public void ConvertsLineEndings() { - var input = - "project.name = Project" + "\n" + - "project.domain = com.desperatedevs" + "\r" + - "project.bundleId = ${project.domain}.${project.name}" + "\r\n"; - - const string expectedOutput = - "project.name = Project\n" + - "project.domain = com.desperatedevs\n" + - "project.bundleId = ${project.domain}.${project.name}\n"; - - var expectedProperties = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "com.desperatedevs.Project"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + AssertProperties( + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\r" + + "some.key.3 = some value 3\r\n", + "some.key.1 = some value 1\n" + + "some.key.2 = some value 2\n" + + "some.key.3 = some value 3\n", + new Dictionary + { + {"some.key.1", "some value 1"}, + {"some.key.2", "some value 2"}, + {"some.key.3", "some value 3"} + } + ); } [Fact] - public void RemovesWhitespace() + public void ToMinifiedString() { var properties = new Properties( @"key = value1, value2, value3 @@ -506,151 +480,70 @@ public void RemovesWhitespace() "); } - [Fact(Skip = "TODO")] - public void SurroundsAddedValuesWithDoubleQuotes() - { - var properties = new Properties(string.Empty); - properties.doubleQuoteMode = true; - properties["key"] = "value"; - properties["key"].Should().Be("\"value\""); - } - - [Fact(Skip = "TODO")] - public void DoesNotSurroundAddedValuesWithDoubleQuotesWhenAlreadyDoubleQuoted() - { - var properties = new Properties(string.Empty); - properties.doubleQuoteMode = true; - properties["key"] = "\"value\""; - properties["key"].Should().Be("\"value\""); - } - - [Fact(Skip = "TODO")] - public void SurroundsExistingValuesWithDoubleQuotes() - { - var properties = new Properties(string.Empty); - properties["key"] = "value"; - properties.doubleQuoteMode = true; - properties["key"].Should().Be("\"value\""); - } - - [Fact(Skip = "TODO")] - public void SurroundsOtherPropertiesValuesWithDoubleQuotes() - { - var properties = new Properties(new Dictionary - { - {"key", "value"} - }); - properties.doubleQuoteMode = true; - properties["key"].Should().Be("\"value\""); - } - [Fact] - public void RemovesDoubleQuotesWhenReadingValues() + public void ToDoubleQuotedValueMinifiedString() { - var properties = new Properties(string.Empty); - properties["key"] = "\"value\""; - properties["key"].Should().Be("\"value\""); - properties.doubleQuoteMode = true; - properties["key"].Should().Be("value"); - } + var properties = new Properties( + @"key = ""value1, value2, value3"" +key2 = ""value4""", true); - [Fact] - public void DisablesDoubleQuotesMode() - { - var properties = new Properties(string.Empty); - properties["key"] = "\"value\""; - properties["key"].Should().Be("\"value\""); - properties.doubleQuoteMode = true; - properties.doubleQuoteMode = false; - properties["key"].Should().Be("\"value\""); + properties.ToMinifiedString().Should().Be( + @"key=""value1, value2, value3"" +key2=""value4"" +"); } [Fact] - public void CreatesPropertiesFromDictionary() + public void CreatesPropertiesFromDoubleQuotedValueInputString() { - var input = new Dictionary - { - {"key1", "value1"}, - {"key2", "value2"} - }; - AssertProperties( - input, - "key1 = value1" + "\n" + - "key2 = value2" + "\n", - input + new Properties("some.key.1 = \"some value 1\"\nsome.key.2 = \"some value 2\"\n", true), + "some.key.1 = \"some value 1\"\n" + + "some.key.2 = \"some value 2\"\n", + new Dictionary + { + {"some.key.1", "some value 1"}, + {"some.key.2", "some value 2"} + } ); } [Fact] - public void UsesCopyOfOriginalDictionary() - { - var input = new Dictionary - { - {"key1", "value1"}, - {"key2", "value2"} - }; - - var p = new Properties(input); - p["key1"] = "newValue1"; - - input["key1"].Should().Be("value1"); - p["key1"].Should().Be("newValue1"); - } - - [Fact] - public void ReplacesPlaceholderFromDict() + public void DoubleQuotedValuesFromAddedValues() { - var input = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "${project.domain}.${project.name}"} - }; - - const string expectedOutput = - "project.name = Project\n" + - "project.domain = com.desperatedevs\n" + - "project.bundleId = ${project.domain}.${project.name}\n"; - - var expectedProperties = new Dictionary - { - {"project.name", "Project"}, - {"project.domain", "com.desperatedevs"}, - {"project.bundleId", "com.desperatedevs.Project"} - }; - - AssertProperties(input, expectedOutput, expectedProperties); + AssertProperties( + new Properties("some.key.1 = \"some value 1\"\nsome.key.2 = \"some value 2\"\n", true) + { + ["some.key.3"] = "some value 3" + }, + "some.key.1 = \"some value 1\"\n" + + "some.key.2 = \"some value 2\"\n" + + "some.key.3 = \"some value 3\"\n", + new Dictionary + { + {"some.key.1", "some value 1"}, + {"some.key.2", "some value 2"}, + {"some.key.3", "some value 3"} + } + ); } - void AssertProperties(string input, string expectedOutput, Dictionary expectedProperties, Properties properties = null) + void AssertProperties(string input, string expectedOutput, Dictionary expectedProperties) { - var p = properties ?? new Properties(input); - var expectedCount = expectedProperties?.Count ?? 0; - p.count.Should().Be(expectedCount); - p.ToString().Should().Be(expectedOutput); - if (expectedProperties != null) - { - foreach (var kvp in expectedProperties) - { - p.HasKey(kvp.Key).Should().BeTrue(); - p[kvp.Key].Should().Be(kvp.Value); - } - } + AssertProperties(new Properties(input), expectedOutput, expectedProperties); } - void AssertProperties(Dictionary input, string expectedOutput, Dictionary expectedProperties) + void AssertProperties(Properties properties, string expectedOutput, Dictionary expectedProperties) { - var p = new Properties(input); var expectedCount = expectedProperties?.Count ?? 0; - p.count.Should().Be(expectedCount); - p.ToString().Should().Be(expectedOutput); + properties.Count.Should().Be(expectedCount); + properties.ToString().Should().Be(expectedOutput); if (expectedProperties != null) { foreach (var kvp in expectedProperties) { - p.HasKey(kvp.Key).Should().BeTrue(); - p[kvp.Key].Should().Be(kvp.Value); + properties.HasKey(kvp.Key).Should().BeTrue(); + properties[kvp.Key].Should().Be(kvp.Value); } } } diff --git a/src/DesperateDevs.Serialization/tests/fixtures/TestPreferences.cs b/src/DesperateDevs.Serialization/tests/fixtures/TestPreferences.cs new file mode 100644 index 00000000..aa13291d --- /dev/null +++ b/src/DesperateDevs.Serialization/tests/fixtures/TestPreferences.cs @@ -0,0 +1,12 @@ +namespace DesperateDevs.Serialization.Tests.Fixtures +{ + public class TestPreferences : Preferences + { + public TestPreferences(string properties, string userProperties = null, bool doubleQuotedValues = false) + : base( + new Properties(properties, doubleQuotedValues), + new Properties(userProperties ?? string.Empty, doubleQuotedValues), + doubleQuotedValues + ) { } + } +} diff --git a/src/DesperateDevs.Tests/tests/DesperateDevs.Tests.csproj b/src/DesperateDevs.Tests/tests/DesperateDevs.Tests.csproj index 7075199b..f16bc577 100644 --- a/src/DesperateDevs.Tests/tests/DesperateDevs.Tests.csproj +++ b/src/DesperateDevs.Tests/tests/DesperateDevs.Tests.csproj @@ -3,18 +3,22 @@ $(DefaultTestTargetFramework) false + false - - - - - + + + - + + + + + + diff --git a/src/DesperateDevs.Tests/tests/NamespaceTests.cs b/src/DesperateDevs.Tests/tests/NamespaceTests.cs index a4e5fbf1..f5eba282 100644 --- a/src/DesperateDevs.Tests/tests/NamespaceTests.cs +++ b/src/DesperateDevs.Tests/tests/NamespaceTests.cs @@ -4,7 +4,6 @@ using System.Text.RegularExpressions; using FluentAssertions; using Xunit; -using Xunit.Abstractions; namespace DesperateDevs.Tests { @@ -13,10 +12,6 @@ public class NamespaceTests static readonly string ProjectRoot = TestHelper.GetProjectRoot(); static readonly Dictionary SourceFiles = ReadSourceFiles(ProjectRoot); - readonly ITestOutputHelper _output; - - public NamespaceTests(ITestOutputHelper output) => _output = output; - [Fact] public void RoughlyProcessesTheCorrectNumberOfFiles() { @@ -30,16 +25,19 @@ public void FileHasCorrectNamespace(FileNamespace ns) var shortPath = RemoveProjectRoot(ns.Path, ProjectRoot); var isTest = shortPath.Contains(Path.DirectorySeparatorChar + "tests" + Path.DirectorySeparatorChar) && !shortPath.Contains("DesperateDevs.Tests"); - - var isFixture = shortPath.Contains(Path.DirectorySeparatorChar + "Fixtures" + Path.DirectorySeparatorChar); + var isBenchmark = shortPath.Contains(Path.DirectorySeparatorChar + "benchmarks" + Path.DirectorySeparatorChar) && + !shortPath.Contains("DesperateDevs.Benchmarks"); + var isFixture = shortPath.Contains(Path.DirectorySeparatorChar + "fixtures" + Path.DirectorySeparatorChar); if (isTest) ns.Expected += ".Tests"; + if (isBenchmark) + ns.Expected += ".Benchmarks"; + if (isFixture) ns.Expected += ".Fixtures"; - _output.WriteLine($"{ns.Expected} is the namespace of {shortPath}"); ns.Found.Should().Be(ns.Expected, $"see {ns.Path}"); } @@ -73,7 +71,14 @@ public static IEnumerable Namespaces static Dictionary ReadSourceFiles(string projectRoot) => Directory .GetFiles(projectRoot, "*.cs", SearchOption.AllDirectories) - .Where(p => RemoveProjectRoot(p, projectRoot).StartsWith("DesperateDevs")) + .Where(p => + { + var root = RemoveProjectRoot(p, projectRoot); + return root.StartsWith("DesperateDevs") || + root.StartsWith("Jenny") || + root.StartsWith("Sherlog") || + root.StartsWith("TCPeasy"); + }) .Where(p => new[] {"obj", "fixtures", Path.Combine("tests", "bin"), Path.Combine("DesperateDevs.Tests", "unity")} .All(ignore => !p.Contains(Path.DirectorySeparatorChar + ignore + Path.DirectorySeparatorChar))) .ToDictionary(p => p, File.ReadAllText); @@ -87,5 +92,7 @@ public struct FileNamespace public string Path; public string Expected; public string Found; + + public override string ToString() => $"{Expected} - {Found}.{System.IO.Path.GetFileNameWithoutExtension(Path)}"; } } diff --git a/src/DesperateDevs.Tests/tests/SolutionTests.cs b/src/DesperateDevs.Tests/tests/SolutionTests.cs new file mode 100644 index 00000000..f9f3958e --- /dev/null +++ b/src/DesperateDevs.Tests/tests/SolutionTests.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using FluentAssertions; +using Microsoft.Build.Locator; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.MSBuild; +using Xunit; + +namespace DesperateDevs.Tests +{ + public class SolutionTests + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string SolutionPath = Path.Combine(ProjectRoot, "..", "DesperateDevs.sln"); + + public static IEnumerable Projects => OpenSolutionAsync().Result + .Projects + .Select(project => { return new object[] {project}; }); + + [Fact] + public void HasUnixProjectPaths() + { + File.ReadAllText(SolutionPath).Should().NotContain("\\"); + } + + [Theory, MemberData(nameof(Projects))] + public void ProjectsHaveUnixProjectReferencePaths(Project project) + { + File.ReadAllText(project.FilePath).Should().NotContain("\\"); + } + + [Theory, MemberData(nameof(Projects))] + public void OnlyHasUsedProjectReferences(Project project) + { + foreach (var reference in project.AllProjectReferences) + { + var projectNamespace = Path.GetFileNameWithoutExtension(reference.ProjectId.ToString()); + var files = Directory.EnumerateFiles(Path.GetDirectoryName(project.FilePath), "*.cs", SearchOption.TopDirectoryOnly); + var filesWithUsage = files + .Select(file => File.ReadAllText(file)) + .Where(code => code.Contains(projectNamespace)); + + filesWithUsage.Count().Should().BeGreaterThan(0, projectNamespace); + } + } + + static Task OpenSolutionAsync() + { + if (!MSBuildLocator.IsRegistered) MSBuildLocator.RegisterDefaults(); + using var workspace = MSBuildWorkspace.Create(); + workspace.LoadMetadataForReferencedProjects = true; + return workspace.OpenSolutionAsync(SolutionPath); + } + } +} diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs.meta deleted file mode 100644 index 9facc84b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8415a63f1339a4ee18bdc894abeb3be9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta deleted file mode 100644 index 9eeab292..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d0b73c36815814dc4a7d82607d76f33d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs deleted file mode 120000 index 30ebf5b4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta deleted file mode 100644 index ac10efce..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b91fc1189cf654dd89dae2384397d280 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs deleted file mode 120000 index 52c81d8c..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta deleted file mode 100644 index d7a58b44..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ffedbc47a4a234bf1b2b2edc579d9934 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs deleted file mode 120000 index da81cf0c..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Tracker.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta deleted file mode 100644 index 13d2f326..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e88611963e1a9459bb0afd61ed8481bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs deleted file mode 120000 index 83c873bb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta deleted file mode 100644 index 5f0395fd..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c4dbd192873f443298531d3dde58c9ce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs deleted file mode 120000 index 1957d036..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingDataException.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta deleted file mode 100644 index f94b2ad9..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5f3cb196afd944ffdbcc8be95e2e2da8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs deleted file mode 120000 index a750db87..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta deleted file mode 100644 index 267ed119..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 40566967b36924d5e893fa5a9923bed7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta deleted file mode 100644 index d03586e6..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 682773983f57e4065ac1b5e5d3337a1b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs deleted file mode 120000 index e2263e78..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta deleted file mode 100644 index f8831c83..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 56c0030f03097481f8ab77214c37a288 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs deleted file mode 120000 index 20d5d632..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta deleted file mode 100644 index 7658d3e4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 48b8198a4c75f4d0bb969703bf87a028 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs deleted file mode 120000 index fa1a77b8..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta deleted file mode 100644 index 4b1493ff..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8b55d6e5eba7c49eebe81de9a6443b7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs deleted file mode 120000 index 226d31c0..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta deleted file mode 100644 index b25b6fa4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1b04bcd2f5d4141d18090a73451c361d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta deleted file mode 100644 index dbbd4922..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 44f50160803134857855f651ad5b72ca -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images deleted file mode 120000 index 21d0b5b5..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta deleted file mode 100644 index 73d54603..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c9c396c1a989546609facb5422d9a8aa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta deleted file mode 100644 index b2a343f3..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 839e9bf0b527c4c679fc59d2f51053d3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs deleted file mode 120000 index 97ad0829..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta deleted file mode 100644 index 50950281..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 23bcf3a4b365c43d3b41b196030869e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs deleted file mode 120000 index 3e18166b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta deleted file mode 100644 index 92b5b118..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f971ac20df815411dbcb073222376a07 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs deleted file mode 120000 index 1633c82a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta deleted file mode 100644 index 70b91199..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d69f7f5ecbcae484eb6d007e00bc6d1c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs deleted file mode 120000 index 4f90bc91..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta deleted file mode 100644 index fbe77309..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 30eb06c704a7d49b4aa5732ecfba8fb3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta deleted file mode 100644 index 1fce1663..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9e967dc50b80047aa86bbd752702c830 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs deleted file mode 120000 index 063352fa..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta deleted file mode 100644 index 5c9fa8a8..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: baacc6552f64844a2af20b1f070d6d66 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs deleted file mode 120000 index 6571a8c0..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta deleted file mode 100644 index 7072cb55..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7ce377bfae3704bf0a36be0abac9f719 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs deleted file mode 120000 index 79ded1d6..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta deleted file mode 100644 index a18ceceb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 923de9a605f9f4e2482ee011e90523b1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs deleted file mode 120000 index 7df20e3e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta deleted file mode 100644 index f1452f7c..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fc63e9982ece24aee9178dc366b4c551 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs deleted file mode 120000 index 7afd8821..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta deleted file mode 100644 index 2d4bd888..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5da107e9c360d4f78a71751b7493e267 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs deleted file mode 120000 index a4ce8877..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta deleted file mode 100644 index 8739c150..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 496a6803703d84a57b618dd69b3a1824 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs deleted file mode 120000 index ba6e2433..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta deleted file mode 100644 index 88c3387e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f181583f9a76a492e876c3c6bb891efa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs deleted file mode 120000 index 5576c464..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta deleted file mode 100644 index c227bf52..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b9e1bb61d3f51491d8a027d411f9e43f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs deleted file mode 120000 index 7df9e786..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta deleted file mode 100644 index f136baf6..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f240113b734e04373ac2edb46898c335 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs deleted file mode 120000 index 66509389..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta deleted file mode 100644 index 27e6b6eb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f92922a43f6d5499b97e9e0a2c386ffd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs deleted file mode 120000 index f00d1c81..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta deleted file mode 100644 index c5ea6484..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 673194f812ea8478c8c96d69d500fd72 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta deleted file mode 100644 index c6d5862f..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d631d66063b544274ae2c768043ab8f3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs deleted file mode 120000 index a69a7c2c..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta deleted file mode 100644 index 3972e29b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0a75c12ab7705439797d904970fa782f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs deleted file mode 120000 index 6bfa8a5a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta deleted file mode 100644 index 36cb0794..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fbe288b8438c444e86423de7152aa29 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs deleted file mode 120000 index aebd42e0..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta deleted file mode 100644 index 5bb1f094..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2bc07a960c413494abbe8bd68acb3906 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs deleted file mode 120000 index 3df1f086..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta deleted file mode 100644 index 8968c97d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 166387abc021d43e3a26a314eb44e4fd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta deleted file mode 100644 index 7053c190..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 053385e1f45964dc686d41538234b103 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs deleted file mode 120000 index 1925f6e7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta deleted file mode 100644 index 5410597e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 78a259ccaa86546e790fe31b4df68b2f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs deleted file mode 120000 index b081a443..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta deleted file mode 100644 index 7c276d88..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7d11e999b78e14dfdae3ddb7077d56e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs deleted file mode 120000 index 33bdb22a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Diagnosis.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta deleted file mode 100644 index 1fc94ae7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d774b36059f214cc191e3d394e28ebc4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs deleted file mode 120000 index 1b80a051..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta deleted file mode 100644 index c5cbd4a1..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8cefa71db223a473e86bf0c944580435 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs deleted file mode 120000 index 9888a3fc..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta deleted file mode 100644 index b1046e6e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5464c3f65f1e34519a85893fbb206ad1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs deleted file mode 120000 index 29e3cf15..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta deleted file mode 100644 index ad07d545..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd1f6be8bd5a34c3bbef089e1bbfc672 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs deleted file mode 120000 index bc4dedcb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta deleted file mode 100644 index a2c7ba3d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 20c82934b8bf04136b1f30034f567e37 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs deleted file mode 120000 index 1db724e1..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta deleted file mode 100644 index b0e37e9a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80248c67cc2604a7b8d3e706f9025620 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs deleted file mode 120000 index acd9fe98..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta deleted file mode 100644 index 95c2ce39..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e8f55fb19b7224a4a83ed5820628fd87 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs deleted file mode 120000 index 84c072a7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta deleted file mode 100644 index 6e2c10bc..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4d12db364e1e34848b2f861bfc975345 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging.meta deleted file mode 100644 index a7fd3a45..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f4ca677a1b51c4341aec963cd9a6d348 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs deleted file mode 120000 index 561c19ac..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/LogLevel.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta deleted file mode 100644 index d96d5f71..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 074c0bb38fa654b2f9d6e0f21ac531c1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs deleted file mode 120000 index 00ed4df8..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/Logger.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta deleted file mode 100644 index b497ef80..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cc19b71b13b57484d953ba16458b3044 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs deleted file mode 120000 index d3bb88a7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/fabl.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta deleted file mode 100644 index 8babb087..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1123cac34e2c34fbe8d98996bb514537 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking.meta deleted file mode 100644 index c4071dce..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 31ca5fb5d4def47769a189ac2ed9e6cf -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs deleted file mode 120000 index aece12f2..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/AbstractTcpSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta deleted file mode 100644 index ee636b8b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 16118cc5a1dee4bae92be20758b5af72 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs deleted file mode 120000 index 2ce4b3dd..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/IPAddressStringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta deleted file mode 100644 index de352ef7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a313c222530145b8b7eccd22ae7e4c7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs deleted file mode 120000 index 5bd2f0ef..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpClientSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta deleted file mode 100644 index f0c85e4b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89c6f5993f69c4d868f972c2565834a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs deleted file mode 120000 index e81ef09d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpMessageParser.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta deleted file mode 100644 index 5308d143..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 65995e315bb5d40359395de4ccf9ed04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs deleted file mode 120000 index 03d8607d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpServerSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta deleted file mode 100644 index af126953..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a378c0be94d1c4404984a561b9e0822d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta deleted file mode 100644 index de5d15cd..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2aac10c5f797e44b39e2e7018fbf3cc2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs deleted file mode 120000 index 38970703..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta deleted file mode 100644 index 1ecd5336..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2d9868eeb32784418845eb4c05045187 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs deleted file mode 120000 index 3abc95dc..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/IConfigurable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta deleted file mode 100644 index 0128a497..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7adc32ce4a50340c88f2f3605b97cefc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs deleted file mode 120000 index 9b056559..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Preferences.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta deleted file mode 100644 index d1fd626e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88ea8f945a5004539b2d7e2c0a31e2d3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs deleted file mode 120000 index f0d0dafb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Properties.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta deleted file mode 100644 index f0b64ec7..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d507da41462414da68714e26ffa06eda -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta deleted file mode 100644 index ca760329..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 93c5990ad2dd049a5b670fc2d68f1e7f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs deleted file mode 120000 index d465e306..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta deleted file mode 100644 index 426e83be..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bebdccd01d3784b71a72772a65b8617b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs deleted file mode 120000 index 51c8727f..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta deleted file mode 100644 index 6805db14..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9f94a798ae4954d7683d81f7ad313067 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs deleted file mode 120000 index 8a3af584..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta deleted file mode 100644 index 9d922b00..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cc63f60b6a5734a0f9060375c18877e1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs deleted file mode 120000 index 6d3eef89..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/Graph.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta deleted file mode 100644 index 7364c38d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e6701d57396cf4caa857879aa5e2b92c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs deleted file mode 120000 index 8fc2767a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta deleted file mode 100644 index 18a842c0..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c16fb6525a4964185a1e486351d50083 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs deleted file mode 120000 index 94b16fdf..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta deleted file mode 100644 index f4ac84f4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b8dc091af0ca14a718e260bab177f1ae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs deleted file mode 120000 index e88a7a6b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta deleted file mode 100644 index c22e0469..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d1b61415332f64626bab64ba77d92f2d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs deleted file mode 120000 index fcac849f..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta deleted file mode 100644 index 7c0d3cf4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3e5cb471b0a7a49a89c6e9fa124dd6a0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs deleted file mode 120000 index f8569278..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta deleted file mode 100644 index 1954eab9..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 251d6fe3ace1143048b5f27388b3bba2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils.meta deleted file mode 100644 index 36f33868..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d9b2a49d2fe524703bc12c518cdf78ad -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs deleted file mode 120000 index 6351f1eb..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta deleted file mode 100644 index 7d292575..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fef6906f65044c3b9965ce296f14894 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs deleted file mode 120000 index edf1389b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta deleted file mode 100644 index 39a33b7a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58ee5e266a7864988859c239398116a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs deleted file mode 120000 index 3cdd4d8b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta deleted file mode 100644 index c6277941..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 41c562e578d014dc098282a2cf863c8c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs deleted file mode 120000 index 8c905f5b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta deleted file mode 100644 index 98d764e5..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 71c579533ea304646935a23c72df5c69 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs deleted file mode 120000 index 235af2a9..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/ConsoleColors.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta deleted file mode 100644 index f5647cd1..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 975d22f9c1243420aa4d5ab8003e33b7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs deleted file mode 120000 index ed215b19..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta deleted file mode 100644 index 357604f9..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7186878e978a34898b9b9179d895042d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs deleted file mode 120000 index a782424e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta deleted file mode 100644 index cb6f1d93..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8b2459120ac274dae888f50e9c555e37 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs deleted file mode 120000 index 6f488255..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectCache.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta deleted file mode 100644 index c5377a49..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 755c4156f00a24191bab7e1691c676ba -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs deleted file mode 120000 index 5fd702e3..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectPool.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta deleted file mode 100644 index bccbf53a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58c29747dc1384e909361b7fe025824c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs deleted file mode 120000 index d4ca19a9..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta deleted file mode 100644 index 922845a6..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dc5395d31c49645a9a73f0668b17dd43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs deleted file mode 120000 index e5df5880..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta deleted file mode 100644 index a41d2c64..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88d6f0a19b28f4895a7d32986b6d26d2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs deleted file mode 120000 index b7290b7c..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta deleted file mode 100644 index 2a5f4ff5..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d4c93a9d38c4340d9a28214973f23fa4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs deleted file mode 120000 index 7025610b..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/StringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta deleted file mode 100644 index a9f1d47a..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dd94ad316bcfb4a3386f32bc78f9739e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources.meta deleted file mode 100644 index 976a4972..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b8fc353ff948b452f8285729641c1a3c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated.meta deleted file mode 100644 index 0a26325e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: de31a5e05270c42a7ab2ea25d377fb8b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs deleted file mode 100644 index e3e78751..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File1 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs.meta deleted file mode 100644 index f4e32836..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File1.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d9a90512b8a7643ca823728d35dce9a7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs deleted file mode 100644 index 09acf142..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File2 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs.meta deleted file mode 100644 index 06eb4a95..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/Sources/Generated/File2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 738312b848354426fbeb3d28aac3c0cf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/src.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/src.meta deleted file mode 100644 index 58ce6781..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3f2951276ad9a4b10af2c1e76c25c5b5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs deleted file mode 120000 index 3dfedcea..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs.meta deleted file mode 100644 index 94604b86..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ed4453b2132d1429fa3aa5d7f73cca73 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs b/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs deleted file mode 120000 index 225f5f96..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs.meta deleted file mode 100644 index 69e194de..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Assets/src/ExampleGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 650cc71da7b45454db4c67d4549493d8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2018_4/Jenny.properties b/src/DesperateDevs.Tests/unity/2018_4/Jenny.properties deleted file mode 120000 index 645889dc..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Jenny.properties +++ /dev/null @@ -1 +0,0 @@ -../src/Jenny.properties \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2018_4/Packages/manifest.json b/src/DesperateDevs.Tests/unity/2018_4/Packages/manifest.json deleted file mode 100644 index 349d3187..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/Packages/manifest.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "dependencies": { - "com.unity.ads": "2.0.8", - "com.unity.analytics": "3.2.3", - "com.unity.collab-proxy": "1.2.15", - "com.unity.package-manager-ui": "2.0.13", - "com.unity.purchasing": "2.2.1", - "com.unity.textmeshpro": "1.4.1", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } -} diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/AudioManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/AudioManager.asset deleted file mode 100644 index 4f31e744..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/AudioManager.asset +++ /dev/null @@ -1,17 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!11 &1 -AudioManager: - m_ObjectHideFlags: 0 - m_Volume: 1 - Rolloff Scale: 1 - Doppler Factor: 1 - Default Speaker Mode: 2 - m_SampleRate: 0 - m_DSPBufferSize: 1024 - m_VirtualVoiceCount: 512 - m_RealVoiceCount: 32 - m_SpatializerPlugin: - m_AmbisonicDecoderPlugin: - m_DisableAudio: 0 - m_VirtualizeEffects: 1 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ClusterInputManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ClusterInputManager.asset deleted file mode 100644 index e7886b26..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ClusterInputManager.asset +++ /dev/null @@ -1,6 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!236 &1 -ClusterInputManager: - m_ObjectHideFlags: 0 - m_Inputs: [] diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/DynamicsManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/DynamicsManager.asset deleted file mode 100644 index b3c263d3..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/DynamicsManager.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!55 &1 -PhysicsManager: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Gravity: {x: 0, y: -9.81, z: 0} - m_DefaultMaterial: {fileID: 0} - m_BounceThreshold: 2 - m_SleepThreshold: 0.005 - m_DefaultContactOffset: 0.01 - m_DefaultSolverIterations: 6 - m_DefaultSolverVelocityIterations: 1 - m_QueriesHitBackfaces: 0 - m_QueriesHitTriggers: 1 - m_EnableAdaptiveForce: 0 - m_ClothInterCollisionDistance: 0 - m_ClothInterCollisionStiffness: 0 - m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - m_AutoSimulation: 1 - m_AutoSyncTransforms: 0 - m_ReuseCollisionCallbacks: 1 - m_ClothInterCollisionSettingsToggle: 0 - m_ContactPairsMode: 0 - m_BroadphaseType: 0 - m_WorldBounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 250, y: 250, z: 250} - m_WorldSubdivisions: 8 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorBuildSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorBuildSettings.asset deleted file mode 100644 index 0147887e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorBuildSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1045 &1 -EditorBuildSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Scenes: [] - m_configObjects: {} diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorSettings.asset deleted file mode 100644 index 29dea529..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/EditorSettings.asset +++ /dev/null @@ -1,21 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!159 &1 -EditorSettings: - m_ObjectHideFlags: 0 - serializedVersion: 7 - m_ExternalVersionControlSupport: Visible Meta Files - m_SerializationMode: 2 - m_LineEndingsForNewScripts: 2 - m_DefaultBehaviorMode: 0 - m_SpritePackerMode: 0 - m_SpritePackerPaddingPower: 1 - m_EtcTextureCompressorBehavior: 1 - m_EtcTextureFastCompressor: 1 - m_EtcTextureNormalCompressor: 2 - m_EtcTextureBestCompressor: 4 - m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd - m_ProjectGenerationRootNamespace: - m_UserGeneratedProjectSuffix: - m_CollabEditorSettings: - inProgressEnabled: 1 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/GraphicsSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/GraphicsSettings.asset deleted file mode 100644 index cd1c3d65..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/GraphicsSettings.asset +++ /dev/null @@ -1,62 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!30 &1 -GraphicsSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_Deferred: - m_Mode: 1 - m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} - m_DeferredReflections: - m_Mode: 1 - m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} - m_ScreenSpaceShadows: - m_Mode: 1 - m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} - m_DepthNormals: - m_Mode: 1 - m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} - m_MotionVectors: - m_Mode: 1 - m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} - m_LightHalo: - m_Mode: 1 - m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} - m_LensFlare: - m_Mode: 1 - m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} - m_AlwaysIncludedShaders: - - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} - m_PreloadedShaders: [] - m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, - type: 0} - m_CustomRenderPipeline: {fileID: 0} - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 0, z: 1} - m_DefaultRenderingPath: 1 - m_DefaultMobileRenderingPath: 1 - m_TierSettings: [] - m_LightmapStripping: 0 - m_FogStripping: 0 - m_InstancingStripping: 0 - m_LightmapKeepPlain: 1 - m_LightmapKeepDirCombined: 1 - m_LightmapKeepDynamicPlain: 1 - m_LightmapKeepDynamicDirCombined: 1 - m_LightmapKeepShadowMask: 1 - m_LightmapKeepSubtractive: 1 - m_FogKeepLinear: 1 - m_FogKeepExp: 1 - m_FogKeepExp2: 1 - m_AlbedoSwatchInfos: [] - m_LightsUseLinearIntensity: 0 - m_LightsUseColorTemperature: 0 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/InputManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/InputManager.asset deleted file mode 100644 index 17c8f538..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/InputManager.asset +++ /dev/null @@ -1,295 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!13 &1 -InputManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Axes: - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: left - positiveButton: right - altNegativeButton: a - altPositiveButton: d - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: down - positiveButton: up - altNegativeButton: s - altPositiveButton: w - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left ctrl - altNegativeButton: - altPositiveButton: mouse 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left alt - altNegativeButton: - altPositiveButton: mouse 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left shift - altNegativeButton: - altPositiveButton: mouse 2 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: space - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse X - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse Y - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse ScrollWheel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 2 - joyNum: 0 - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 0 - type: 2 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 1 - type: 2 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 0 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 1 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 2 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 3 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: return - altNegativeButton: - altPositiveButton: joystick button 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: enter - altNegativeButton: - altPositiveButton: space - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Cancel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: escape - altNegativeButton: - altPositiveButton: joystick button 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NavMeshAreas.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NavMeshAreas.asset deleted file mode 100644 index 3b0b7c3d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NavMeshAreas.asset +++ /dev/null @@ -1,91 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!126 &1 -NavMeshProjectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - areas: - - name: Walkable - cost: 1 - - name: Not Walkable - cost: 1 - - name: Jump - cost: 2 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - m_LastAgentTypeID: -887442657 - m_Settings: - - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.75 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_SettingNames: - - Humanoid diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NetworkManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NetworkManager.asset deleted file mode 100644 index 5dc6a831..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/NetworkManager.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!149 &1 -NetworkManager: - m_ObjectHideFlags: 0 - m_DebugLevel: 0 - m_Sendrate: 15 - m_AssetToPrefab: {} diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/Physics2DSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/Physics2DSettings.asset deleted file mode 100644 index 57760e2e..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/Physics2DSettings.asset +++ /dev/null @@ -1,38 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!19 &1 -Physics2DSettings: - m_ObjectHideFlags: 0 - serializedVersion: 4 - m_Gravity: {x: 0, y: -9.81} - m_DefaultMaterial: {fileID: 0} - m_VelocityIterations: 8 - m_PositionIterations: 3 - m_VelocityThreshold: 1 - m_MaxLinearCorrection: 0.2 - m_MaxAngularCorrection: 8 - m_MaxTranslationSpeed: 100 - m_MaxRotationSpeed: 360 - m_BaumgarteScale: 0.2 - m_BaumgarteTimeOfImpactScale: 0.75 - m_TimeToSleep: 0.5 - m_LinearSleepTolerance: 0.01 - m_AngularSleepTolerance: 2 - m_DefaultContactOffset: 0.01 - m_AutoSimulation: 1 - m_QueriesHitTriggers: 1 - m_QueriesStartInColliders: 1 - m_ChangeStopsCallbacks: 0 - m_CallbacksOnDisable: 1 - m_ReuseCollisionCallbacks: 1 - m_AutoSyncTransforms: 0 - m_AlwaysShowColliders: 0 - m_ShowColliderSleep: 1 - m_ShowColliderContacts: 0 - m_ShowColliderAABB: 0 - m_ContactArrowScale: 0.2 - m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} - m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} - m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} - m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/PresetManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/PresetManager.asset deleted file mode 100644 index 820e662d..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/PresetManager.asset +++ /dev/null @@ -1,27 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1386491679 &1 -PresetManager: - m_ObjectHideFlags: 0 - m_DefaultList: - - type: - m_NativeTypeID: 108 - m_ManagedTypePPtr: {fileID: 0} - m_ManagedTypeFallback: - defaultPresets: - - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea, - type: 2} - - type: - m_NativeTypeID: 1020 - m_ManagedTypePPtr: {fileID: 0} - m_ManagedTypeFallback: - defaultPresets: - - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6, - type: 2} - - type: - m_NativeTypeID: 1006 - m_ManagedTypePPtr: {fileID: 0} - m_ManagedTypeFallback: - defaultPresets: - - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9, - type: 2} diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectSettings.asset deleted file mode 100644 index 42cf9257..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectSettings.asset +++ /dev/null @@ -1,645 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!129 &1 -PlayerSettings: - m_ObjectHideFlags: 0 - serializedVersion: 18 - productGUID: 2948b42da3a424900b55bf5fc141ab62 - AndroidProfiler: 0 - AndroidFilterTouchesWhenObscured: 0 - AndroidEnableSustainedPerformanceMode: 0 - defaultScreenOrientation: 4 - targetDevice: 2 - useOnDemandResources: 0 - accelerometerFrequency: 60 - companyName: DefaultCompany - productName: 2018_4 - defaultCursor: {fileID: 0} - cursorHotspot: {x: 0, y: 0} - m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 - m_SplashScreenOverlayOpacity: 1 - m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 - m_SplashScreenDrawMode: 0 - m_SplashScreenBackgroundAnimationZoom: 1 - m_SplashScreenLogoAnimationZoom: 1 - m_SplashScreenBackgroundLandscapeAspect: 1 - m_SplashScreenBackgroundPortraitAspect: 1 - m_SplashScreenBackgroundLandscapeUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenBackgroundPortraitUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenLogos: [] - m_VirtualRealitySplashScreen: {fileID: 0} - m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1024 - defaultScreenHeight: 768 - defaultScreenWidthWeb: 960 - defaultScreenHeightWeb: 600 - m_StereoRenderingPath: 0 - m_ActiveColorSpace: 0 - m_MTRendering: 1 - m_StackTraceTypes: 010000000100000001000000010000000100000001000000 - iosShowActivityIndicatorOnLoading: -1 - androidShowActivityIndicatorOnLoading: -1 - displayResolutionDialog: 1 - iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 - allowedAutorotateToPortrait: 1 - allowedAutorotateToPortraitUpsideDown: 1 - allowedAutorotateToLandscapeRight: 1 - allowedAutorotateToLandscapeLeft: 1 - useOSAutorotation: 1 - use32BitDisplayBuffer: 1 - preserveFramebufferAlpha: 0 - disableDepthAndStencilBuffers: 0 - androidStartInFullscreen: 1 - androidRenderOutsideSafeArea: 0 - androidBlitType: 0 - defaultIsNativeResolution: 1 - macRetinaSupport: 1 - runInBackground: 1 - captureSingleScreen: 0 - muteOtherAudioSources: 0 - Prepare IOS For Recording: 0 - Force IOS Speakers When Recording: 0 - deferSystemGesturesMode: 0 - hideHomeButton: 0 - submitAnalytics: 1 - usePlayerLog: 1 - bakeCollisionMeshes: 0 - forceSingleInstance: 0 - resizableWindow: 0 - useMacAppStoreValidation: 0 - macAppStoreCategory: public.app-category.games - gpuSkinning: 1 - graphicsJobs: 0 - xboxPIXTextureCapture: 0 - xboxEnableAvatar: 0 - xboxEnableKinect: 0 - xboxEnableKinectAutoTracking: 0 - xboxEnableFitness: 0 - visibleInBackground: 1 - allowFullscreenSwitch: 1 - graphicsJobMode: 0 - fullscreenMode: 1 - xboxSpeechDB: 0 - xboxEnableHeadOrientation: 0 - xboxEnableGuest: 0 - xboxEnablePIXSampling: 0 - metalFramebufferOnly: 0 - xboxOneResolution: 0 - xboxOneSResolution: 0 - xboxOneXResolution: 3 - xboxOneMonoLoggingLevel: 0 - xboxOneLoggingLevel: 1 - xboxOneDisableEsram: 0 - xboxOneEnableTypeOptimization: 0 - xboxOnePresentImmediateThreshold: 0 - switchQueueCommandMemory: 0 - switchQueueControlMemory: 16384 - switchQueueComputeMemory: 262144 - switchNVNShaderPoolsGranularity: 33554432 - switchNVNDefaultPoolsGranularity: 16777216 - switchNVNOtherPoolsGranularity: 16777216 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 - vulkanEnableSetSRGBWrite: 0 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 - bundleVersion: 0.1 - preloadedAssets: [] - metroInputSource: 0 - wsaTransparentSwapchain: 0 - m_HolographicPauseOnTrackingLoss: 1 - xboxOneDisableKinectGpuReservation: 1 - xboxOneEnable7thCore: 1 - isWsaHolographicRemotingEnabled: 0 - vrSettings: - cardboard: - depthFormat: 0 - enableTransitionView: 0 - daydream: - depthFormat: 0 - useSustainedPerformanceMode: 0 - enableVideoLayer: 0 - useProtectedVideoMemory: 0 - minimumSupportedHeadTracking: 0 - maximumSupportedHeadTracking: 1 - hololens: - depthFormat: 1 - depthBufferSharingEnabled: 1 - oculus: - sharedDepthBuffer: 1 - dashSupport: 1 - lowOverheadMode: 0 - protectedContext: 0 - v2Signing: 0 - enable360StereoCapture: 0 - protectGraphicsMemory: 0 - enableFrameTimingStats: 0 - useHDRDisplay: 0 - m_ColorGamuts: 00000000 - targetPixelDensity: 30 - resolutionScalingMode: 0 - androidSupportedAspectRatio: 1 - androidMaxAspectRatio: 2.1 - applicationIdentifier: {} - buildNumber: {} - AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 16 - AndroidTargetSdkVersion: 0 - AndroidPreferredInstallLocation: 1 - aotOptions: - stripEngineCode: 1 - iPhoneStrippingLevel: 0 - iPhoneScriptCallOptimization: 0 - ForceInternetPermission: 0 - ForceSDCardPermission: 0 - CreateWallpaper: 0 - APKExpansionFiles: 0 - keepLoadedShadersAlive: 0 - StripUnusedMeshComponents: 1 - VertexChannelCompressionMask: 4054 - iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 9.0 - tvOSSdkVersion: 0 - tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 9.0 - uIPrerenderedIcon: 0 - uIRequiresPersistentWiFi: 0 - uIRequiresFullScreen: 1 - uIStatusBarHidden: 1 - uIExitOnSuspend: 0 - uIStatusBarStyle: 0 - iPhoneSplashScreen: {fileID: 0} - iPhoneHighResSplashScreen: {fileID: 0} - iPhoneTallHighResSplashScreen: {fileID: 0} - iPhone47inSplashScreen: {fileID: 0} - iPhone55inPortraitSplashScreen: {fileID: 0} - iPhone55inLandscapeSplashScreen: {fileID: 0} - iPhone58inPortraitSplashScreen: {fileID: 0} - iPhone58inLandscapeSplashScreen: {fileID: 0} - iPadPortraitSplashScreen: {fileID: 0} - iPadHighResPortraitSplashScreen: {fileID: 0} - iPadLandscapeSplashScreen: {fileID: 0} - iPadHighResLandscapeSplashScreen: {fileID: 0} - appleTVSplashScreen: {fileID: 0} - appleTVSplashScreen2x: {fileID: 0} - tvOSSmallIconLayers: [] - tvOSSmallIconLayers2x: [] - tvOSLargeIconLayers: [] - tvOSLargeIconLayers2x: [] - tvOSTopShelfImageLayers: [] - tvOSTopShelfImageLayers2x: [] - tvOSTopShelfImageWideLayers: [] - tvOSTopShelfImageWideLayers2x: [] - iOSLaunchScreenType: 0 - iOSLaunchScreenPortrait: {fileID: 0} - iOSLaunchScreenLandscape: {fileID: 0} - iOSLaunchScreenBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreenFillPct: 100 - iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: - iOSLaunchScreeniPadType: 0 - iOSLaunchScreeniPadImage: {fileID: 0} - iOSLaunchScreeniPadBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreeniPadFillPct: 100 - iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: - iOSUseLaunchScreenStoryboard: 0 - iOSLaunchScreenCustomStoryboardPath: - iOSDeviceRequirements: [] - iOSURLSchemes: [] - iOSBackgroundModes: 0 - iOSMetalForceHardShadows: 0 - metalEditorSupport: 1 - metalAPIValidation: 1 - iOSRenderExtraFrameOnPause: 0 - iosCopyPluginsCodeInsteadOfSymlink: 0 - appleDeveloperTeamID: - iOSManualSigningProvisioningProfileID: - tvOSManualSigningProvisioningProfileID: - iOSManualSigningProvisioningProfileType: 0 - tvOSManualSigningProvisioningProfileType: 0 - appleEnableAutomaticSigning: 0 - iOSRequireARKit: 0 - iOSAutomaticallyDetectAndAddCapabilities: 1 - appleEnableProMotion: 0 - clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea - templatePackageId: com.unity.template.3d@1.3.0 - templateDefaultScene: Assets/Scenes/SampleScene.unity - AndroidTargetArchitectures: 5 - AndroidSplashScreenScale: 0 - androidSplashScreen: {fileID: 0} - AndroidKeystoreName: - AndroidKeyaliasName: - AndroidBuildApkPerCpuArchitecture: 0 - AndroidTVCompatibility: 1 - AndroidIsGame: 1 - AndroidEnableTango: 0 - androidEnableBanner: 1 - androidUseLowAccuracyLocation: 0 - m_AndroidBanners: - - width: 320 - height: 180 - banner: {fileID: 0} - androidGamepadSupportLevel: 0 - resolutionDialogBanner: {fileID: 0} - m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: - - m_BuildTarget: Standalone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: tvOS - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: Android - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: iPhone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: WebGL - m_StaticBatching: 0 - m_DynamicBatching: 0 - m_BuildTargetGraphicsAPIs: - - m_BuildTarget: AndroidPlayer - m_APIs: 0b00000008000000 - m_Automatic: 1 - - m_BuildTarget: iOSSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: AppleTVSupport - m_APIs: 10000000 - m_Automatic: 0 - - m_BuildTarget: WebGLSupport - m_APIs: 0b000000 - m_Automatic: 1 - m_BuildTargetVRSettings: - - m_BuildTarget: Standalone - m_Enabled: 0 - m_Devices: - - Oculus - - OpenVR - m_BuildTargetEnableVuforiaSettings: [] - openGLRequireES31: 0 - openGLRequireES31AEP: 0 - m_TemplateCustomTags: {} - mobileMTRendering: - Android: 1 - iPhone: 1 - tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: [] - m_BuildTargetGroupLightmapSettings: [] - playModeTestRunnerEnabled: 0 - runPlayModeTestAsEditModeTest: 0 - actionOnDotNetUnhandledException: 1 - enableInternalProfiler: 0 - logObjCUncaughtExceptions: 1 - enableCrashReportAPI: 0 - cameraUsageDescription: - locationUsageDescription: - microphoneUsageDescription: - switchNetLibKey: - switchSocketMemoryPoolSize: 6144 - switchSocketAllocatorPoolSize: 128 - switchSocketConcurrencyLimit: 14 - switchScreenResolutionBehavior: 2 - switchUseCPUProfiler: 0 - switchApplicationID: 0x01004b9000490000 - switchNSODependencies: - switchTitleNames_0: - switchTitleNames_1: - switchTitleNames_2: - switchTitleNames_3: - switchTitleNames_4: - switchTitleNames_5: - switchTitleNames_6: - switchTitleNames_7: - switchTitleNames_8: - switchTitleNames_9: - switchTitleNames_10: - switchTitleNames_11: - switchTitleNames_12: - switchTitleNames_13: - switchTitleNames_14: - switchTitleNames_15: - switchPublisherNames_0: - switchPublisherNames_1: - switchPublisherNames_2: - switchPublisherNames_3: - switchPublisherNames_4: - switchPublisherNames_5: - switchPublisherNames_6: - switchPublisherNames_7: - switchPublisherNames_8: - switchPublisherNames_9: - switchPublisherNames_10: - switchPublisherNames_11: - switchPublisherNames_12: - switchPublisherNames_13: - switchPublisherNames_14: - switchPublisherNames_15: - switchIcons_0: {fileID: 0} - switchIcons_1: {fileID: 0} - switchIcons_2: {fileID: 0} - switchIcons_3: {fileID: 0} - switchIcons_4: {fileID: 0} - switchIcons_5: {fileID: 0} - switchIcons_6: {fileID: 0} - switchIcons_7: {fileID: 0} - switchIcons_8: {fileID: 0} - switchIcons_9: {fileID: 0} - switchIcons_10: {fileID: 0} - switchIcons_11: {fileID: 0} - switchIcons_12: {fileID: 0} - switchIcons_13: {fileID: 0} - switchIcons_14: {fileID: 0} - switchIcons_15: {fileID: 0} - switchSmallIcons_0: {fileID: 0} - switchSmallIcons_1: {fileID: 0} - switchSmallIcons_2: {fileID: 0} - switchSmallIcons_3: {fileID: 0} - switchSmallIcons_4: {fileID: 0} - switchSmallIcons_5: {fileID: 0} - switchSmallIcons_6: {fileID: 0} - switchSmallIcons_7: {fileID: 0} - switchSmallIcons_8: {fileID: 0} - switchSmallIcons_9: {fileID: 0} - switchSmallIcons_10: {fileID: 0} - switchSmallIcons_11: {fileID: 0} - switchSmallIcons_12: {fileID: 0} - switchSmallIcons_13: {fileID: 0} - switchSmallIcons_14: {fileID: 0} - switchSmallIcons_15: {fileID: 0} - switchManualHTML: - switchAccessibleURLs: - switchLegalInformation: - switchMainThreadStackSize: 1048576 - switchPresenceGroupId: - switchLogoHandling: 0 - switchReleaseVersion: 0 - switchDisplayVersion: 1.0.0 - switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 - switchSupportedLanguagesMask: 0 - switchLogoType: 0 - switchApplicationErrorCodeCategory: - switchUserAccountSaveDataSize: 0 - switchUserAccountSaveDataJournalSize: 0 - switchApplicationAttribute: 0 - switchCardSpecSize: -1 - switchCardSpecClock: -1 - switchRatingsMask: 0 - switchRatingsInt_0: 0 - switchRatingsInt_1: 0 - switchRatingsInt_2: 0 - switchRatingsInt_3: 0 - switchRatingsInt_4: 0 - switchRatingsInt_5: 0 - switchRatingsInt_6: 0 - switchRatingsInt_7: 0 - switchRatingsInt_8: 0 - switchRatingsInt_9: 0 - switchRatingsInt_10: 0 - switchRatingsInt_11: 0 - switchRatingsInt_12: 0 - switchLocalCommunicationIds_0: - switchLocalCommunicationIds_1: - switchLocalCommunicationIds_2: - switchLocalCommunicationIds_3: - switchLocalCommunicationIds_4: - switchLocalCommunicationIds_5: - switchLocalCommunicationIds_6: - switchLocalCommunicationIds_7: - switchParentalControl: 0 - switchAllowsScreenshot: 1 - switchAllowsVideoCapturing: 1 - switchAllowsRuntimeAddOnContentInstall: 0 - switchDataLossConfirmation: 0 - switchUserAccountLockEnabled: 0 - switchSystemResourceMemory: 16777216 - switchSupportedNpadStyles: 3 - switchNativeFsCacheSize: 32 - switchIsHoldTypeHorizontal: 0 - switchSupportedNpadCount: 8 - switchSocketConfigEnabled: 0 - switchTcpInitialSendBufferSize: 32 - switchTcpInitialReceiveBufferSize: 64 - switchTcpAutoSendBufferSizeMax: 256 - switchTcpAutoReceiveBufferSizeMax: 256 - switchUdpSendBufferSize: 9 - switchUdpReceiveBufferSize: 42 - switchSocketBufferEfficiency: 4 - switchSocketInitializeEnabled: 1 - switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 - ps4NPAgeRating: 12 - ps4NPTitleSecret: - ps4NPTrophyPackPath: - ps4ParentalLevel: 11 - ps4ContentID: ED1633-NPXX51362_00-0000000000000000 - ps4Category: 0 - ps4MasterVersion: 01.00 - ps4AppVersion: 01.00 - ps4AppType: 0 - ps4ParamSfxPath: - ps4VideoOutPixelFormat: 0 - ps4VideoOutInitialWidth: 1920 - ps4VideoOutBaseModeInitialWidth: 1920 - ps4VideoOutReprojectionRate: 60 - ps4PronunciationXMLPath: - ps4PronunciationSIGPath: - ps4BackgroundImagePath: - ps4StartupImagePath: - ps4StartupImagesFolder: - ps4IconImagesFolder: - ps4SaveDataImagePath: - ps4SdkOverride: - ps4BGMPath: - ps4ShareFilePath: - ps4ShareOverlayImagePath: - ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: - ps4NPtitleDatPath: - ps4RemotePlayKeyAssignment: -1 - ps4RemotePlayKeyMappingDir: - ps4PlayTogetherPlayerCount: 0 - ps4EnterButtonAssignment: 1 - ps4ApplicationParam1: 0 - ps4ApplicationParam2: 0 - ps4ApplicationParam3: 0 - ps4ApplicationParam4: 0 - ps4DownloadDataSize: 0 - ps4GarlicHeapSize: 2048 - ps4ProGarlicHeapSize: 2560 - ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ - ps4pnSessions: 1 - ps4pnPresence: 1 - ps4pnFriends: 1 - ps4pnGameCustomData: 1 - playerPrefsSupport: 0 - enableApplicationExit: 0 - resetTempFolder: 1 - restrictedAudioUsageRights: 0 - ps4UseResolutionFallback: 0 - ps4ReprojectionSupport: 0 - ps4UseAudio3dBackend: 0 - ps4SocialScreenEnabled: 0 - ps4ScriptOptimizationLevel: 0 - ps4Audio3dVirtualSpeakerCount: 14 - ps4attribCpuUsage: 0 - ps4PatchPkgPath: - ps4PatchLatestPkgPath: - ps4PatchChangeinfoPath: - ps4PatchDayOne: 0 - ps4attribUserManagement: 0 - ps4attribMoveSupport: 0 - ps4attrib3DSupport: 0 - ps4attribShareSupport: 0 - ps4attribExclusiveVR: 0 - ps4disableAutoHideSplash: 0 - ps4videoRecordingFeaturesUsed: 0 - ps4contentSearchFeaturesUsed: 0 - ps4CompatibilityPS5: 0 - ps4AllowPS5Detection: 0 - ps4GPU800MHz: 1 - ps4attribEyeToEyeDistanceSettingVR: 0 - ps4IncludedModules: [] - monoEnv: - splashScreenBackgroundSourceLandscape: {fileID: 0} - splashScreenBackgroundSourcePortrait: {fileID: 0} - spritePackerPolicy: - webGLMemorySize: 256 - webGLExceptionSupport: 1 - webGLNameFilesAsHashes: 0 - webGLDataCaching: 1 - webGLDebugSymbols: 0 - webGLEmscriptenArgs: - webGLModulesDirectory: - webGLTemplate: APPLICATION:Default - webGLAnalyzeBuildSize: 0 - webGLUseEmbeddedResources: 0 - webGLCompressionFormat: 1 - webGLLinkerTarget: 1 - webGLThreadsSupport: 0 - scriptingDefineSymbols: {} - platformArchitecture: {} - scriptingBackend: {} - il2cppCompilerConfiguration: {} - managedStrippingLevel: {} - incrementalIl2cppBuild: {} - allowUnsafeCode: 0 - additionalIl2CppArgs: - scriptingRuntimeVersion: 1 - apiCompatibilityLevelPerPlatform: - Standalone: 3 - m_RenderingPath: 1 - m_MobileRenderingPath: 1 - metroPackageName: Template_3D - metroPackageVersion: - metroCertificatePath: - metroCertificatePassword: - metroCertificateSubject: - metroCertificateIssuer: - metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_3D - wsaImages: {} - metroTileShortName: - metroTileShowName: 0 - metroMediumTileShowName: 0 - metroLargeTileShowName: 0 - metroWideTileShowName: 0 - metroSupportStreamingInstall: 0 - metroLastRequiredScene: 0 - metroDefaultTileSize: 1 - metroTileForegroundText: 2 - metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, - a: 1} - metroSplashScreenUseBackgroundColor: 0 - platformCapabilities: {} - metroTargetDeviceFamilies: {} - metroFTAName: - metroFTAFileTypes: [] - metroProtocolName: - metroCompilationOverrides: 1 - XboxOneProductId: - XboxOneUpdateKey: - XboxOneSandboxId: - XboxOneContentId: - XboxOneTitleId: - XboxOneSCId: - XboxOneGameOsOverridePath: - XboxOnePackagingOverridePath: - XboxOneAppManifestOverridePath: - XboxOneVersion: 1.0.0.0 - XboxOnePackageEncryption: 0 - XboxOnePackageUpdateGranularity: 2 - XboxOneDescription: - XboxOneLanguage: - - enus - XboxOneCapability: [] - XboxOneGameRating: {} - XboxOneIsContentPackage: 0 - XboxOneEnableGPUVariability: 1 - XboxOneSockets: {} - XboxOneSplashScreen: {fileID: 0} - XboxOneAllowedProductIds: [] - XboxOnePersistentLocalStorageSize: 0 - XboxOneXTitleMemory: 8 - xboxOneScriptCompiler: 1 - XboxOneOverrideIdentityName: - vrEditorSettings: - daydream: - daydreamIconForeground: {fileID: 0} - daydreamIconBackground: {fileID: 0} - cloudServicesEnabled: - UNet: 1 - luminIcon: - m_Name: - m_ModelFolderPath: - m_PortalFolderPath: - luminCert: - m_CertPath: - m_PrivateKeyPath: - luminIsChannelApp: 0 - luminVersion: - m_VersionCode: 1 - m_VersionName: - facebookSdkVersion: 7.9.4 - facebookAppId: - facebookCookies: 1 - facebookLogging: 1 - facebookStatus: 1 - facebookXfbml: 0 - facebookFrictionlessRequests: 1 - apiCompatibilityLevel: 6 - cloudProjectId: - framebufferDepthMemorylessMode: 0 - projectName: - organizationId: - cloudEnabled: 0 - enableNativePlatformBackendsForNewInputSystem: 0 - disableOldInputManagerSupport: 0 - legacyClampBlendShapeWeights: 0 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectVersion.txt b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index ff8802c3..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1 +0,0 @@ -m_EditorVersion: 2018.4.36f1 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/QualitySettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/QualitySettings.asset deleted file mode 100644 index 0621bef1..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/QualitySettings.asset +++ /dev/null @@ -1,190 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!47 &1 -QualitySettings: - m_ObjectHideFlags: 0 - serializedVersion: 5 - m_CurrentQuality: 4 - m_QualitySettings: - - serializedVersion: 2 - name: Very Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 15 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 1 - textureQuality: 1 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.3 - maximumLODLevel: 0 - particleRaycastBudget: 4 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.4 - maximumLODLevel: 0 - particleRaycastBudget: 16 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Medium - pixelLightCount: 1 - shadows: 1 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 1 - lodBias: 0.7 - maximumLODLevel: 0 - particleRaycastBudget: 64 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: High - pixelLightCount: 2 - shadows: 2 - shadowResolution: 1 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 2 - softParticles: 0 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1 - maximumLODLevel: 0 - particleRaycastBudget: 256 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Very High - pixelLightCount: 3 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 4 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1.5 - maximumLODLevel: 0 - particleRaycastBudget: 1024 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Ultra - pixelLightCount: 4 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 4 - shadowDistance: 150 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 4 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 2 - maximumLODLevel: 0 - particleRaycastBudget: 4096 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSP2: 2 - Standalone: 5 - Tizen: 2 - WebGL: 3 - WiiU: 5 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TagManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TagManager.asset deleted file mode 100644 index 17cb8036..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TagManager.asset +++ /dev/null @@ -1,43 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!78 &1 -TagManager: - serializedVersion: 2 - tags: [] - layers: - - Default - - TransparentFX - - Ignore Raycast - - - - Water - - UI - - - - - - PostProcessing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m_SortingLayers: - - name: Default - uniqueID: 0 - locked: 0 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TimeManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TimeManager.asset deleted file mode 100644 index 06bcc6d2..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/TimeManager.asset +++ /dev/null @@ -1,9 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!5 &1 -TimeManager: - m_ObjectHideFlags: 0 - Fixed Timestep: 0.02 - Maximum Allowed Timestep: 0.1 - m_TimeScale: 1 - Maximum Particle Timestep: 0.03 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/UnityConnectSettings.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/UnityConnectSettings.asset deleted file mode 100644 index fa0b1465..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/UnityConnectSettings.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!310 &1 -UnityConnectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 1 - m_Enabled: 0 - m_TestMode: 0 - m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events - m_EventUrl: https://cdp.cloud.unity3d.com/v1/events - m_ConfigUrl: https://config.uca.cloud.unity3d.com - m_TestInitMode: 0 - CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com - m_Enabled: 0 - m_LogBufferSize: 10 - m_CaptureEditorExceptions: 1 - UnityPurchasingSettings: - m_Enabled: 0 - m_TestMode: 0 - UnityAnalyticsSettings: - m_Enabled: 0 - m_TestMode: 0 - m_InitializeOnStartup: 1 - UnityAdsSettings: - m_Enabled: 0 - m_InitializeOnStartup: 1 - m_TestMode: 0 - m_IosGameId: - m_AndroidGameId: - m_GameIds: {} - m_GameId: - PerformanceReportingSettings: - m_Enabled: 0 diff --git a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/VFXManager.asset b/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/VFXManager.asset deleted file mode 100644 index 6e0eaca4..00000000 --- a/src/DesperateDevs.Tests/unity/2018_4/ProjectSettings/VFXManager.asset +++ /dev/null @@ -1,11 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!937362698 &1 -VFXManager: - m_ObjectHideFlags: 0 - m_IndirectShader: {fileID: 0} - m_CopyBufferShader: {fileID: 0} - m_SortShader: {fileID: 0} - m_RenderPipeSettingsPath: - m_FixedTimeStep: 0.016666668 - m_MaxDeltaTime: 0.05 diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs.meta deleted file mode 100644 index 4e02ad46..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c60242a2e648246bc9f1205fa37d00c2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta deleted file mode 100644 index 18ba582f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 40af987e21d6b4ec98fe67b5b6be45a8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs deleted file mode 120000 index 30ebf5b4..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta deleted file mode 100644 index e1f690c4..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9f56b25adf34b47bc9e4c1ac44a9e9e6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs deleted file mode 120000 index 52c81d8c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta deleted file mode 100644 index d556c1f7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9b7464d0c662b41ceb2b1dbd1f6c8944 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs deleted file mode 120000 index da81cf0c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Tracker.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta deleted file mode 100644 index 417fd2f9..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7862201a0e7974939a179b459025e659 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs deleted file mode 120000 index 83c873bb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta deleted file mode 100644 index e9b586df..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dfc9f6377e75e4e05bebac0e16a1eec0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs deleted file mode 120000 index 1957d036..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingDataException.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta deleted file mode 100644 index 9e16158b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ae923c82b078a497b8571871bf6429f7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs deleted file mode 120000 index a750db87..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta deleted file mode 100644 index 3cd82743..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eebf77680052d414f8b04eb3fe99c2a0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta deleted file mode 100644 index 74694cf0..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 13e963ba998cb4b52a270f30cdf23bd9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs deleted file mode 120000 index e2263e78..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta deleted file mode 100644 index fd75b220..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7808544e4cdc04a149d7785b24f678e1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs deleted file mode 120000 index 20d5d632..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta deleted file mode 100644 index 04817998..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e6fbc918c988d4de29d0d82ee4fd4824 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs deleted file mode 120000 index fa1a77b8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta deleted file mode 100644 index ca8931cf..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df559414f494b4dacb9d3179df1e9fcc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs deleted file mode 120000 index 226d31c0..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta deleted file mode 100644 index efef7521..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 68d51536f3c1a41cfb34ec3653e036b4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta deleted file mode 100644 index fe7bdf15..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 41067da48cb194c85b34b8a3fe266b8f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images deleted file mode 120000 index 21d0b5b5..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta deleted file mode 100644 index 6525dab0..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6c1094dba391f42298d22f8a28fdb323 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta deleted file mode 100644 index b6c86a6b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5da9dff43e67348cdabf4f0a7fa39526 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs deleted file mode 120000 index 97ad0829..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta deleted file mode 100644 index 903ca6fc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58be89f7ebfe24857ae19725be896b79 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs deleted file mode 120000 index 3e18166b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta deleted file mode 100644 index 1881e6ad..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9c58bb8ced3af45acabeeecd233b9374 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs deleted file mode 120000 index 1633c82a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta deleted file mode 100644 index 53babdb7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ad3c8a8d60ea44fc6b9e130878924a80 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs deleted file mode 120000 index 4f90bc91..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta deleted file mode 100644 index 9568c324..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89b56d9e380d5454d907d6d283466424 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta deleted file mode 100644 index 468f4fce..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fb1af9af5f81043bfa93a28113075c5a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs deleted file mode 120000 index 063352fa..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta deleted file mode 100644 index 217264b5..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ddc3b2385407b4abd985605e662ff19e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs deleted file mode 120000 index 6571a8c0..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta deleted file mode 100644 index d98564f4..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df2039b0dc391498780428202136cd84 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs deleted file mode 120000 index 79ded1d6..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta deleted file mode 100644 index b860b01b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f0d90cfa736b44cbc808ba180d9e7cf3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs deleted file mode 120000 index 7df20e3e..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta deleted file mode 100644 index 035166ab..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e2e7be892cbb0484fa2840d717fbe509 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs deleted file mode 120000 index 7afd8821..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta deleted file mode 100644 index bb8ad915..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ddf8e5f7dfa6443d286c1ca50b92e05e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs deleted file mode 120000 index a4ce8877..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta deleted file mode 100644 index 83d2f233..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c10186353b2b64855a49b4fd9ec57a67 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs deleted file mode 120000 index ba6e2433..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta deleted file mode 100644 index 1410a9ba..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 83cf22201f8de4452b52cb94c57267a6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs deleted file mode 120000 index 5576c464..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta deleted file mode 100644 index 32995176..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d46ae129cea5946acbba6e7f905a2580 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs deleted file mode 120000 index 7df9e786..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta deleted file mode 100644 index 5b328a21..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3db3f9e51a52042939f41dd25af3c66a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs deleted file mode 120000 index 66509389..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta deleted file mode 100644 index 182639c7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4db58f09637ba4369a53176901bdafac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs deleted file mode 120000 index f00d1c81..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta deleted file mode 100644 index 80486039..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d225bfa3fcd294fbca8fc33f29159dc8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta deleted file mode 100644 index 6cd961b8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 399d6abc6eb9e4469b5e1d3324eb0409 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs deleted file mode 120000 index a69a7c2c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta deleted file mode 100644 index de46181c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c2602cc05baab4733822fe39e0d515d2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs deleted file mode 120000 index 6bfa8a5a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta deleted file mode 100644 index cc5d1c4c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c7e9795c783fd4c93936be68c664ac58 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs deleted file mode 120000 index aebd42e0..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta deleted file mode 100644 index 9eb43f3c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 82ac0b6e3cfeb4170be63218471f8b9e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs deleted file mode 120000 index 3df1f086..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta deleted file mode 100644 index c57f6d26..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dea8ea9edf7ae48cd844f26d61989a25 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta deleted file mode 100644 index 9c98b22f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cc56ca871bb484de8bb17b85a42a34c6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs deleted file mode 120000 index 1925f6e7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta deleted file mode 100644 index d2fa4e71..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6097c968bbf454c84991533579d4b16a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs deleted file mode 120000 index b081a443..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta deleted file mode 100644 index f07d8bf6..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d1c567ec690e640b2a9992f0b08f01a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs deleted file mode 120000 index 33bdb22a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Diagnosis.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta deleted file mode 100644 index d4219328..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 17f57aa0eba834ba38d292999e005454 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs deleted file mode 120000 index 1b80a051..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta deleted file mode 100644 index a86174f2..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9c2dbac9363be445f9221ed18519cb2d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs deleted file mode 120000 index 9888a3fc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta deleted file mode 100644 index 7bcd87d7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 64b74d28f96e34b3eb2844103e6f69c8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs deleted file mode 120000 index 29e3cf15..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta deleted file mode 100644 index 7518b998..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e344599931291483db25c28a3b1f81bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs deleted file mode 120000 index bc4dedcb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta deleted file mode 100644 index 6c8dd00a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18bc0180108ba48a184db12eccb70020 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs deleted file mode 120000 index 1db724e1..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta deleted file mode 100644 index a65953bb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0b31d4fd93c334c869a64b789865e07b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs deleted file mode 120000 index acd9fe98..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta deleted file mode 100644 index 31ba1a20..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0ea29f54a77904aae94b0b3d5487d9d6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs deleted file mode 120000 index 84c072a7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta deleted file mode 100644 index ee531f47..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d81bbd2ca8af94f3f98540b60fc5a57b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging.meta deleted file mode 100644 index 455b3a9d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d20543bf22fba4ad0a0c4f7b0ede394f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs deleted file mode 120000 index 561c19ac..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/LogLevel.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta deleted file mode 100644 index 16ec3b3a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b258a60b3d5bc42a28b37028e820c0b1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs deleted file mode 120000 index 00ed4df8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/Logger.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta deleted file mode 100644 index e069af20..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f36e40119af2484e89a654354e1f519 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs deleted file mode 120000 index d3bb88a7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/fabl.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta deleted file mode 100644 index ca11358c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 26068524b93df40c6b1ed58f6b831745 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking.meta deleted file mode 100644 index d5c5c173..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 864ee64e92e6c4b049e7dc29180a045b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs deleted file mode 120000 index aece12f2..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/AbstractTcpSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta deleted file mode 100644 index 301ba74a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 485066d800cfb49dbac0aa8057d1f007 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs deleted file mode 120000 index 2ce4b3dd..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/IPAddressStringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta deleted file mode 100644 index e1120ccc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 692e315044ec44d0eaafd1a56a59dfa7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs deleted file mode 120000 index 5bd2f0ef..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpClientSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta deleted file mode 100644 index 335993e9..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 713e134877bf442e08baf06ce3761361 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs deleted file mode 120000 index e81ef09d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpMessageParser.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta deleted file mode 100644 index 48c814f3..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 901ef67e45ebe42aeb2a6b4c109129cf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs deleted file mode 120000 index 03d8607d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpServerSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta deleted file mode 100644 index 8376595c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a19ccdb80fb9436c926ab74a9f57cb7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta deleted file mode 100644 index 99c0ff60..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: db3103000a9314c11a66f4d6526a20c9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs deleted file mode 120000 index 38970703..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta deleted file mode 100644 index 0e9f6715..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 614b28b0996a5493c976f53d2788f4f9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs deleted file mode 120000 index 3abc95dc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/IConfigurable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta deleted file mode 100644 index 586d87bf..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b440ddccea4d74b998dfc489bc7ca666 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs deleted file mode 120000 index 9b056559..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Preferences.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta deleted file mode 100644 index a76d3f0f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f1ac9f2e9ed4b44a5b651e4ec9c8bf56 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs deleted file mode 120000 index f0d0dafb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Properties.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta deleted file mode 100644 index 00e8e312..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 17dd3f0973f2b4609be645cbbae6f833 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta deleted file mode 100644 index dd497fe8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cd6aef079e04c4b1d906dde06a9932ee -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs deleted file mode 120000 index d465e306..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta deleted file mode 100644 index 1c47f675..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2a601222b44b94f198c41e757e25add7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs deleted file mode 120000 index 51c8727f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta deleted file mode 100644 index 8dd0ad11..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd54d81d8b9d84ce0a89b9533ac44bbd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs deleted file mode 120000 index 8a3af584..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta deleted file mode 100644 index cdfc18db..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8edd06522aa42453cbfb41e03f0575d2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs deleted file mode 120000 index 6d3eef89..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/Graph.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta deleted file mode 100644 index fb91a572..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ddc10c4f29eb34e698fbbac8ad5e0807 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs deleted file mode 120000 index 8fc2767a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta deleted file mode 100644 index f167ef80..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aef19c3fa886a4966951268b4dd9c58e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs deleted file mode 120000 index 94b16fdf..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta deleted file mode 100644 index 52981586..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 99bb1386e3e0b460193975b8dd00acd8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs deleted file mode 120000 index e88a7a6b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta deleted file mode 100644 index cdf1e1f1..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f257ebe743d8d46c3a5d48fcac114950 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs deleted file mode 120000 index fcac849f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta deleted file mode 100644 index bf4a5514..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b0a97c17adf4342ac876468193fb556d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs deleted file mode 120000 index f8569278..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta deleted file mode 100644 index bb577c6d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 930ebd06023534c58832a0c488b0ed1e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils.meta deleted file mode 100644 index 5908954a..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 654f0cdab6f8a46529519274a8e42668 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs deleted file mode 120000 index 6351f1eb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta deleted file mode 100644 index 0699626f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7738e257e3f5249539902929aaa9a9e6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs deleted file mode 120000 index edf1389b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta deleted file mode 100644 index 9f50cadd..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0a3404abfdcfa454a9c20bf9d39869fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs deleted file mode 120000 index 3cdd4d8b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta deleted file mode 100644 index 8876f7b7..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fee2c47233c0d47bdb19e6ccbdf6731d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs deleted file mode 120000 index 8c905f5b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta deleted file mode 100644 index d51c6b21..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bafa9da463cf44fa1ad493123c54b9b4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs deleted file mode 120000 index 235af2a9..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/ConsoleColors.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta deleted file mode 100644 index 451f3c17..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88265092fcd664c2281e813be991f6bf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs deleted file mode 120000 index ed215b19..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta deleted file mode 100644 index d97c1beb..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0fce24f55ea114d5a883b759f90faec0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs deleted file mode 120000 index a782424e..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta deleted file mode 100644 index 5e5f67e9..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0a59cadd00e234743967cf86f6917f68 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs deleted file mode 120000 index 6f488255..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectCache.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta deleted file mode 100644 index e6921bb4..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 13b12f43fff8a424280a49aa7c1bc644 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs deleted file mode 120000 index 5fd702e3..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectPool.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta deleted file mode 100644 index 3e9da66f..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 352d6433fe3334572aad4543f13f62fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs deleted file mode 120000 index d4ca19a9..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta deleted file mode 100644 index 242f1f4d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4e74e7e56b65d4982a02ddd1e8e10431 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs deleted file mode 120000 index e5df5880..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta deleted file mode 100644 index b1b4fb39..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6d687bebb78cc419d834839ff7c4ef00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs deleted file mode 120000 index b7290b7c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta deleted file mode 100644 index 96e51d04..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a001b7ad97d974d4a9cf262ebfbe7523 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs deleted file mode 120000 index 7025610b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/StringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta deleted file mode 100644 index f106a4c8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 217ddd32ac044470a9861240c1af7342 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources.meta deleted file mode 100644 index 17bec5ab..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6ca51595007534918a56da9658f7e43a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated.meta deleted file mode 100644 index 4bfb20c8..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a3465128ba4ca4f45b95166c6df515a9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs deleted file mode 100644 index e3e78751..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File1 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs.meta deleted file mode 100644 index 2b191213..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File1.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 87af37ba56a334af99a3b00f7557091d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs deleted file mode 100644 index 09acf142..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File2 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs.meta deleted file mode 100644 index 0f73e8fc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/Sources/Generated/File2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 07697964122ac46c8ac4bea2aae0cd15 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/src.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/src.meta deleted file mode 100644 index 1365d135..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ec755a182b4124811b3ac0ded332380f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs deleted file mode 120000 index 3dfedcea..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs.meta deleted file mode 100644 index a7c96305..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1cc5863167ffb40f6ac3f082119e7c0b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs b/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs deleted file mode 120000 index 225f5f96..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs.meta deleted file mode 100644 index 0417da54..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Assets/src/ExampleGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a9749d289f0784f2aad620aeaa64019f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2019_4/Jenny.properties b/src/DesperateDevs.Tests/unity/2019_4/Jenny.properties deleted file mode 120000 index 645889dc..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Jenny.properties +++ /dev/null @@ -1 +0,0 @@ -../src/Jenny.properties \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2019_4/Packages/manifest.json b/src/DesperateDevs.Tests/unity/2019_4/Packages/manifest.json deleted file mode 100644 index 2bd7db26..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Packages/manifest.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": "1.8.0", - "com.unity.ide.rider": "1.2.1", - "com.unity.ide.visualstudio": "2.0.11", - "com.unity.ide.vscode": "1.2.3", - "com.unity.test-framework": "1.1.27", - "com.unity.textmeshpro": "2.1.6", - "com.unity.timeline": "1.2.18", - "com.unity.ugui": "1.0.0", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } -} diff --git a/src/DesperateDevs.Tests/unity/2019_4/Packages/packages-lock.json b/src/DesperateDevs.Tests/unity/2019_4/Packages/packages-lock.json deleted file mode 100644 index 1be4fcb3..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/Packages/packages-lock.json +++ /dev/null @@ -1,326 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": { - "version": "1.8.0", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.ext.nunit": { - "version": "1.0.6", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.ide.rider": { - "version": "1.2.1", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.visualstudio": { - "version": "2.0.11", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.9" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.vscode": { - "version": "1.2.3", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.test-framework": { - "version": "1.1.27", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ext.nunit": "1.0.6", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.textmeshpro": { - "version": "2.1.6", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.timeline": { - "version": "1.2.18", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.modules.director": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ugui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0" - } - }, - "com.unity.modules.ai": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.androidjni": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.animation": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.assetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.audio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.cloth": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.director": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.animation": "1.0.0" - } - }, - "com.unity.modules.imageconversion": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.imgui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.jsonserialize": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.particlesystem": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics2d": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.screencapture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.subsystems": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.terrain": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.terrainphysics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.terrain": "1.0.0" - } - }, - "com.unity.modules.tilemap": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics2d": "1.0.0" - } - }, - "com.unity.modules.ui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.uielements": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.umbra": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unityanalytics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.unitywebrequest": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unitywebrequestassetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestaudio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.audio": "1.0.0" - } - }, - "com.unity.modules.unitywebrequesttexture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestwww": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.vehicles": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.video": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.vr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } - }, - "com.unity.modules.wind": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.xr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.subsystems": "1.0.0" - } - } - } -} diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/AudioManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/AudioManager.asset deleted file mode 100644 index 07ebfb05..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/AudioManager.asset +++ /dev/null @@ -1,19 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!11 &1 -AudioManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Volume: 1 - Rolloff Scale: 1 - Doppler Factor: 1 - Default Speaker Mode: 2 - m_SampleRate: 0 - m_DSPBufferSize: 1024 - m_VirtualVoiceCount: 512 - m_RealVoiceCount: 32 - m_SpatializerPlugin: - m_AmbisonicDecoderPlugin: - m_DisableAudio: 0 - m_VirtualizeEffects: 1 - m_RequestedDSPBufferSize: 1024 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ClusterInputManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ClusterInputManager.asset deleted file mode 100644 index e7886b26..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ClusterInputManager.asset +++ /dev/null @@ -1,6 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!236 &1 -ClusterInputManager: - m_ObjectHideFlags: 0 - m_Inputs: [] diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/DynamicsManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/DynamicsManager.asset deleted file mode 100644 index cdc1f3ea..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/DynamicsManager.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!55 &1 -PhysicsManager: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_Gravity: {x: 0, y: -9.81, z: 0} - m_DefaultMaterial: {fileID: 0} - m_BounceThreshold: 2 - m_SleepThreshold: 0.005 - m_DefaultContactOffset: 0.01 - m_DefaultSolverIterations: 6 - m_DefaultSolverVelocityIterations: 1 - m_QueriesHitBackfaces: 0 - m_QueriesHitTriggers: 1 - m_EnableAdaptiveForce: 0 - m_ClothInterCollisionDistance: 0 - m_ClothInterCollisionStiffness: 0 - m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - m_AutoSimulation: 1 - m_AutoSyncTransforms: 0 - m_ReuseCollisionCallbacks: 1 - m_ClothInterCollisionSettingsToggle: 0 - m_ContactPairsMode: 0 - m_BroadphaseType: 0 - m_WorldBounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 250, y: 250, z: 250} - m_WorldSubdivisions: 8 - m_FrictionType: 0 - m_EnableEnhancedDeterminism: 0 - m_EnableUnifiedHeightmaps: 1 - m_DefaultMaxAngluarSpeed: 7 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorBuildSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorBuildSettings.asset deleted file mode 100644 index 0147887e..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorBuildSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1045 &1 -EditorBuildSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Scenes: [] - m_configObjects: {} diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorSettings.asset deleted file mode 100644 index f9205447..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/EditorSettings.asset +++ /dev/null @@ -1,35 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!159 &1 -EditorSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_ExternalVersionControlSupport: Visible Meta Files - m_SerializationMode: 2 - m_LineEndingsForNewScripts: 0 - m_DefaultBehaviorMode: 0 - m_PrefabRegularEnvironment: {fileID: 0} - m_PrefabUIEnvironment: {fileID: 0} - m_SpritePackerMode: 0 - m_SpritePackerPaddingPower: 1 - m_EtcTextureCompressorBehavior: 1 - m_EtcTextureFastCompressor: 1 - m_EtcTextureNormalCompressor: 2 - m_EtcTextureBestCompressor: 4 - m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref - m_ProjectGenerationRootNamespace: - m_CollabEditorSettings: - inProgressEnabled: 1 - m_EnableTextureStreamingInEditMode: 1 - m_EnableTextureStreamingInPlayMode: 1 - m_AsyncShaderCompilation: 1 - m_EnterPlayModeOptionsEnabled: 0 - m_EnterPlayModeOptions: 3 - m_ShowLightmapResolutionOverlay: 1 - m_UseLegacyProbeSampleCount: 0 - m_AssetPipelineMode: 1 - m_CacheServerMode: 0 - m_CacheServerEndpoint: - m_CacheServerNamespacePrefix: default - m_CacheServerEnableDownload: 1 - m_CacheServerEnableUpload: 1 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/GraphicsSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/GraphicsSettings.asset deleted file mode 100644 index 43369e3c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/GraphicsSettings.asset +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!30 &1 -GraphicsSettings: - m_ObjectHideFlags: 0 - serializedVersion: 13 - m_Deferred: - m_Mode: 1 - m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} - m_DeferredReflections: - m_Mode: 1 - m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} - m_ScreenSpaceShadows: - m_Mode: 1 - m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} - m_DepthNormals: - m_Mode: 1 - m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} - m_MotionVectors: - m_Mode: 1 - m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} - m_LightHalo: - m_Mode: 1 - m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} - m_LensFlare: - m_Mode: 1 - m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} - m_AlwaysIncludedShaders: - - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - m_PreloadedShaders: [] - m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, - type: 0} - m_CustomRenderPipeline: {fileID: 0} - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 0, z: 1} - m_DefaultRenderingPath: 1 - m_DefaultMobileRenderingPath: 1 - m_TierSettings: [] - m_LightmapStripping: 0 - m_FogStripping: 0 - m_InstancingStripping: 0 - m_LightmapKeepPlain: 1 - m_LightmapKeepDirCombined: 1 - m_LightmapKeepDynamicPlain: 1 - m_LightmapKeepDynamicDirCombined: 1 - m_LightmapKeepShadowMask: 1 - m_LightmapKeepSubtractive: 1 - m_FogKeepLinear: 1 - m_FogKeepExp: 1 - m_FogKeepExp2: 1 - m_AlbedoSwatchInfos: [] - m_LightsUseLinearIntensity: 0 - m_LightsUseColorTemperature: 0 - m_LogWhenShaderIsCompiled: 0 - m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/InputManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/InputManager.asset deleted file mode 100644 index 17c8f538..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/InputManager.asset +++ /dev/null @@ -1,295 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!13 &1 -InputManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Axes: - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: left - positiveButton: right - altNegativeButton: a - altPositiveButton: d - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: down - positiveButton: up - altNegativeButton: s - altPositiveButton: w - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left ctrl - altNegativeButton: - altPositiveButton: mouse 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left alt - altNegativeButton: - altPositiveButton: mouse 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left shift - altNegativeButton: - altPositiveButton: mouse 2 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: space - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse X - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse Y - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse ScrollWheel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 2 - joyNum: 0 - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 0 - type: 2 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 1 - type: 2 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 0 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 1 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 2 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 3 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: return - altNegativeButton: - altPositiveButton: joystick button 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: enter - altNegativeButton: - altPositiveButton: space - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Cancel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: escape - altNegativeButton: - altPositiveButton: joystick button 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/NavMeshAreas.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/NavMeshAreas.asset deleted file mode 100644 index 3b0b7c3d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/NavMeshAreas.asset +++ /dev/null @@ -1,91 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!126 &1 -NavMeshProjectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - areas: - - name: Walkable - cost: 1 - - name: Not Walkable - cost: 1 - - name: Jump - cost: 2 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - m_LastAgentTypeID: -887442657 - m_Settings: - - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.75 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_SettingNames: - - Humanoid diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PackageManagerSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PackageManagerSettings.asset deleted file mode 100644 index 6920e3ad..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PackageManagerSettings.asset +++ /dev/null @@ -1,38 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &1 -MonoBehaviour: - m_ObjectHideFlags: 61 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} - m_Name: - m_EditorClassIdentifier: - m_ScopedRegistriesSettingsExpanded: 1 - oneTimeWarningShown: 0 - m_Registries: - - m_Id: main - m_Name: - m_Url: https://packages.unity.com - m_Scopes: [] - m_IsDefault: 1 - m_UserSelectedRegistryName: - m_UserAddingNewScopedRegistry: 0 - m_RegistryInfoDraft: - m_ErrorMessage: - m_Original: - m_Id: - m_Name: - m_Url: - m_Scopes: [] - m_IsDefault: 0 - m_Modified: 0 - m_Name: - m_Url: - m_Scopes: - - - m_SelectedScopeIndex: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/Physics2DSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/Physics2DSettings.asset deleted file mode 100644 index 47880b1c..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/Physics2DSettings.asset +++ /dev/null @@ -1,56 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!19 &1 -Physics2DSettings: - m_ObjectHideFlags: 0 - serializedVersion: 4 - m_Gravity: {x: 0, y: -9.81} - m_DefaultMaterial: {fileID: 0} - m_VelocityIterations: 8 - m_PositionIterations: 3 - m_VelocityThreshold: 1 - m_MaxLinearCorrection: 0.2 - m_MaxAngularCorrection: 8 - m_MaxTranslationSpeed: 100 - m_MaxRotationSpeed: 360 - m_BaumgarteScale: 0.2 - m_BaumgarteTimeOfImpactScale: 0.75 - m_TimeToSleep: 0.5 - m_LinearSleepTolerance: 0.01 - m_AngularSleepTolerance: 2 - m_DefaultContactOffset: 0.01 - m_JobOptions: - serializedVersion: 2 - useMultithreading: 0 - useConsistencySorting: 0 - m_InterpolationPosesPerJob: 100 - m_NewContactsPerJob: 30 - m_CollideContactsPerJob: 100 - m_ClearFlagsPerJob: 200 - m_ClearBodyForcesPerJob: 200 - m_SyncDiscreteFixturesPerJob: 50 - m_SyncContinuousFixturesPerJob: 50 - m_FindNearestContactsPerJob: 100 - m_UpdateTriggerContactsPerJob: 100 - m_IslandSolverCostThreshold: 100 - m_IslandSolverBodyCostScale: 1 - m_IslandSolverContactCostScale: 10 - m_IslandSolverJointCostScale: 10 - m_IslandSolverBodiesPerJob: 50 - m_IslandSolverContactsPerJob: 50 - m_AutoSimulation: 1 - m_QueriesHitTriggers: 1 - m_QueriesStartInColliders: 1 - m_CallbacksOnDisable: 1 - m_ReuseCollisionCallbacks: 1 - m_AutoSyncTransforms: 0 - m_AlwaysShowColliders: 0 - m_ShowColliderSleep: 1 - m_ShowColliderContacts: 0 - m_ShowColliderAABB: 0 - m_ContactArrowScale: 0.2 - m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} - m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} - m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} - m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PresetManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PresetManager.asset deleted file mode 100644 index 67a94dae..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/PresetManager.asset +++ /dev/null @@ -1,7 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1386491679 &1 -PresetManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_DefaultPresets: {} diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectSettings.asset deleted file mode 100644 index 9f08158d..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectSettings.asset +++ /dev/null @@ -1,705 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!129 &1 -PlayerSettings: - m_ObjectHideFlags: 0 - serializedVersion: 20 - productGUID: 1c930b117f25648a9abe92c23bd5dbfc - AndroidProfiler: 0 - AndroidFilterTouchesWhenObscured: 0 - AndroidEnableSustainedPerformanceMode: 0 - defaultScreenOrientation: 4 - targetDevice: 2 - useOnDemandResources: 0 - accelerometerFrequency: 60 - companyName: DefaultCompany - productName: 2019_4 - defaultCursor: {fileID: 0} - cursorHotspot: {x: 0, y: 0} - m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 - m_SplashScreenOverlayOpacity: 1 - m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 - m_SplashScreenDrawMode: 0 - m_SplashScreenBackgroundAnimationZoom: 1 - m_SplashScreenLogoAnimationZoom: 1 - m_SplashScreenBackgroundLandscapeAspect: 1 - m_SplashScreenBackgroundPortraitAspect: 1 - m_SplashScreenBackgroundLandscapeUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenBackgroundPortraitUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenLogos: [] - m_VirtualRealitySplashScreen: {fileID: 0} - m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1024 - defaultScreenHeight: 768 - defaultScreenWidthWeb: 960 - defaultScreenHeightWeb: 600 - m_StereoRenderingPath: 0 - m_ActiveColorSpace: 0 - m_MTRendering: 1 - m_StackTraceTypes: 010000000100000001000000010000000100000001000000 - iosShowActivityIndicatorOnLoading: -1 - androidShowActivityIndicatorOnLoading: -1 - iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 - allowedAutorotateToPortrait: 1 - allowedAutorotateToPortraitUpsideDown: 1 - allowedAutorotateToLandscapeRight: 1 - allowedAutorotateToLandscapeLeft: 1 - useOSAutorotation: 1 - use32BitDisplayBuffer: 1 - preserveFramebufferAlpha: 0 - disableDepthAndStencilBuffers: 0 - androidStartInFullscreen: 1 - androidRenderOutsideSafeArea: 1 - androidUseSwappy: 0 - androidBlitType: 0 - defaultIsNativeResolution: 1 - macRetinaSupport: 1 - runInBackground: 1 - captureSingleScreen: 0 - muteOtherAudioSources: 0 - Prepare IOS For Recording: 0 - Force IOS Speakers When Recording: 0 - deferSystemGesturesMode: 0 - hideHomeButton: 0 - submitAnalytics: 1 - usePlayerLog: 1 - bakeCollisionMeshes: 0 - forceSingleInstance: 0 - useFlipModelSwapchain: 1 - resizableWindow: 0 - useMacAppStoreValidation: 0 - macAppStoreCategory: public.app-category.games - gpuSkinning: 1 - xboxPIXTextureCapture: 0 - xboxEnableAvatar: 0 - xboxEnableKinect: 0 - xboxEnableKinectAutoTracking: 0 - xboxEnableFitness: 0 - visibleInBackground: 1 - allowFullscreenSwitch: 1 - fullscreenMode: 1 - xboxSpeechDB: 0 - xboxEnableHeadOrientation: 0 - xboxEnableGuest: 0 - xboxEnablePIXSampling: 0 - metalFramebufferOnly: 0 - xboxOneResolution: 0 - xboxOneSResolution: 0 - xboxOneXResolution: 3 - xboxOneMonoLoggingLevel: 0 - xboxOneLoggingLevel: 1 - xboxOneDisableEsram: 0 - xboxOneEnableTypeOptimization: 0 - xboxOnePresentImmediateThreshold: 0 - switchQueueCommandMemory: 0 - switchQueueControlMemory: 16384 - switchQueueComputeMemory: 262144 - switchNVNShaderPoolsGranularity: 33554432 - switchNVNDefaultPoolsGranularity: 16777216 - switchNVNOtherPoolsGranularity: 16777216 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 - stadiaPresentMode: 0 - stadiaTargetFramerate: 0 - vulkanNumSwapchainBuffers: 3 - vulkanEnableSetSRGBWrite: 0 - vulkanEnableLateAcquireNextImage: 0 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 - bundleVersion: 0.1 - preloadedAssets: [] - metroInputSource: 0 - wsaTransparentSwapchain: 0 - m_HolographicPauseOnTrackingLoss: 1 - xboxOneDisableKinectGpuReservation: 1 - xboxOneEnable7thCore: 1 - vrSettings: - cardboard: - depthFormat: 0 - enableTransitionView: 0 - daydream: - depthFormat: 0 - useSustainedPerformanceMode: 0 - enableVideoLayer: 0 - useProtectedVideoMemory: 0 - minimumSupportedHeadTracking: 0 - maximumSupportedHeadTracking: 1 - hololens: - depthFormat: 1 - depthBufferSharingEnabled: 1 - lumin: - depthFormat: 0 - frameTiming: 2 - enableGLCache: 0 - glCacheMaxBlobSize: 524288 - glCacheMaxFileSize: 8388608 - oculus: - sharedDepthBuffer: 1 - dashSupport: 1 - lowOverheadMode: 0 - protectedContext: 0 - v2Signing: 1 - enable360StereoCapture: 0 - isWsaHolographicRemotingEnabled: 0 - enableFrameTimingStats: 0 - useHDRDisplay: 0 - D3DHDRBitDepth: 0 - m_ColorGamuts: 00000000 - targetPixelDensity: 30 - resolutionScalingMode: 0 - androidSupportedAspectRatio: 1 - androidMaxAspectRatio: 2.1 - applicationIdentifier: {} - buildNumber: {} - AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 19 - AndroidTargetSdkVersion: 0 - AndroidPreferredInstallLocation: 1 - aotOptions: - stripEngineCode: 1 - iPhoneStrippingLevel: 0 - iPhoneScriptCallOptimization: 0 - ForceInternetPermission: 0 - ForceSDCardPermission: 0 - CreateWallpaper: 0 - APKExpansionFiles: 0 - keepLoadedShadersAlive: 0 - StripUnusedMeshComponents: 1 - VertexChannelCompressionMask: 4054 - iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 10.0 - tvOSSdkVersion: 0 - tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 10.0 - uIPrerenderedIcon: 0 - uIRequiresPersistentWiFi: 0 - uIRequiresFullScreen: 1 - uIStatusBarHidden: 1 - uIExitOnSuspend: 0 - uIStatusBarStyle: 0 - appleTVSplashScreen: {fileID: 0} - appleTVSplashScreen2x: {fileID: 0} - tvOSSmallIconLayers: [] - tvOSSmallIconLayers2x: [] - tvOSLargeIconLayers: [] - tvOSLargeIconLayers2x: [] - tvOSTopShelfImageLayers: [] - tvOSTopShelfImageLayers2x: [] - tvOSTopShelfImageWideLayers: [] - tvOSTopShelfImageWideLayers2x: [] - iOSLaunchScreenType: 0 - iOSLaunchScreenPortrait: {fileID: 0} - iOSLaunchScreenLandscape: {fileID: 0} - iOSLaunchScreenBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreenFillPct: 100 - iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: - iOSLaunchScreeniPadType: 0 - iOSLaunchScreeniPadImage: {fileID: 0} - iOSLaunchScreeniPadBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreeniPadFillPct: 100 - iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: - iOSUseLaunchScreenStoryboard: 0 - iOSLaunchScreenCustomStoryboardPath: - iOSDeviceRequirements: [] - iOSURLSchemes: [] - iOSBackgroundModes: 0 - iOSMetalForceHardShadows: 0 - metalEditorSupport: 1 - metalAPIValidation: 1 - iOSRenderExtraFrameOnPause: 0 - iosCopyPluginsCodeInsteadOfSymlink: 0 - appleDeveloperTeamID: - iOSManualSigningProvisioningProfileID: - tvOSManualSigningProvisioningProfileID: - iOSManualSigningProvisioningProfileType: 0 - tvOSManualSigningProvisioningProfileType: 0 - appleEnableAutomaticSigning: 0 - iOSRequireARKit: 0 - iOSAutomaticallyDetectAndAddCapabilities: 1 - appleEnableProMotion: 0 - clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea - templatePackageId: com.unity.template.3d@4.2.8 - templateDefaultScene: Assets/Scenes/SampleScene.unity - AndroidTargetArchitectures: 1 - AndroidSplashScreenScale: 0 - androidSplashScreen: {fileID: 0} - AndroidKeystoreName: - AndroidKeyaliasName: - AndroidBuildApkPerCpuArchitecture: 0 - AndroidTVCompatibility: 0 - AndroidIsGame: 1 - AndroidEnableTango: 0 - androidEnableBanner: 1 - androidUseLowAccuracyLocation: 0 - androidUseCustomKeystore: 0 - m_AndroidBanners: - - width: 320 - height: 180 - banner: {fileID: 0} - androidGamepadSupportLevel: 0 - AndroidValidateAppBundleSize: 1 - AndroidAppBundleSizeToValidate: 150 - m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: - - m_BuildTarget: Standalone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: tvOS - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: Android - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: iPhone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: WebGL - m_StaticBatching: 0 - m_DynamicBatching: 0 - m_BuildTargetGraphicsJobs: - - m_BuildTarget: MacStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: Switch - m_GraphicsJobs: 1 - - m_BuildTarget: MetroSupport - m_GraphicsJobs: 1 - - m_BuildTarget: AppleTVSupport - m_GraphicsJobs: 0 - - m_BuildTarget: BJMSupport - m_GraphicsJobs: 1 - - m_BuildTarget: LinuxStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: PS4Player - m_GraphicsJobs: 1 - - m_BuildTarget: iOSSupport - m_GraphicsJobs: 0 - - m_BuildTarget: WindowsStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobs: 1 - - m_BuildTarget: LuminSupport - m_GraphicsJobs: 0 - - m_BuildTarget: AndroidPlayer - m_GraphicsJobs: 0 - - m_BuildTarget: WebGLSupport - m_GraphicsJobs: 0 - m_BuildTargetGraphicsJobMode: - - m_BuildTarget: PS4Player - m_GraphicsJobMode: 0 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobMode: 0 - m_BuildTargetGraphicsAPIs: - - m_BuildTarget: AndroidPlayer - m_APIs: 150000000b000000 - m_Automatic: 0 - - m_BuildTarget: iOSSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: AppleTVSupport - m_APIs: 10000000 - m_Automatic: 0 - - m_BuildTarget: WebGLSupport - m_APIs: 0b000000 - m_Automatic: 1 - m_BuildTargetVRSettings: - - m_BuildTarget: Standalone - m_Enabled: 0 - m_Devices: - - Oculus - - OpenVR - openGLRequireES31: 0 - openGLRequireES31AEP: 0 - openGLRequireES32: 0 - m_TemplateCustomTags: {} - mobileMTRendering: - Android: 1 - iPhone: 1 - tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: [] - m_BuildTargetGroupLightmapSettings: [] - playModeTestRunnerEnabled: 0 - runPlayModeTestAsEditModeTest: 0 - actionOnDotNetUnhandledException: 1 - enableInternalProfiler: 0 - logObjCUncaughtExceptions: 1 - enableCrashReportAPI: 0 - cameraUsageDescription: - locationUsageDescription: - microphoneUsageDescription: - switchNetLibKey: - switchSocketMemoryPoolSize: 6144 - switchSocketAllocatorPoolSize: 128 - switchSocketConcurrencyLimit: 14 - switchScreenResolutionBehavior: 2 - switchUseCPUProfiler: 0 - switchApplicationID: 0x01004b9000490000 - switchNSODependencies: - switchTitleNames_0: - switchTitleNames_1: - switchTitleNames_2: - switchTitleNames_3: - switchTitleNames_4: - switchTitleNames_5: - switchTitleNames_6: - switchTitleNames_7: - switchTitleNames_8: - switchTitleNames_9: - switchTitleNames_10: - switchTitleNames_11: - switchTitleNames_12: - switchTitleNames_13: - switchTitleNames_14: - switchTitleNames_15: - switchPublisherNames_0: - switchPublisherNames_1: - switchPublisherNames_2: - switchPublisherNames_3: - switchPublisherNames_4: - switchPublisherNames_5: - switchPublisherNames_6: - switchPublisherNames_7: - switchPublisherNames_8: - switchPublisherNames_9: - switchPublisherNames_10: - switchPublisherNames_11: - switchPublisherNames_12: - switchPublisherNames_13: - switchPublisherNames_14: - switchPublisherNames_15: - switchIcons_0: {fileID: 0} - switchIcons_1: {fileID: 0} - switchIcons_2: {fileID: 0} - switchIcons_3: {fileID: 0} - switchIcons_4: {fileID: 0} - switchIcons_5: {fileID: 0} - switchIcons_6: {fileID: 0} - switchIcons_7: {fileID: 0} - switchIcons_8: {fileID: 0} - switchIcons_9: {fileID: 0} - switchIcons_10: {fileID: 0} - switchIcons_11: {fileID: 0} - switchIcons_12: {fileID: 0} - switchIcons_13: {fileID: 0} - switchIcons_14: {fileID: 0} - switchIcons_15: {fileID: 0} - switchSmallIcons_0: {fileID: 0} - switchSmallIcons_1: {fileID: 0} - switchSmallIcons_2: {fileID: 0} - switchSmallIcons_3: {fileID: 0} - switchSmallIcons_4: {fileID: 0} - switchSmallIcons_5: {fileID: 0} - switchSmallIcons_6: {fileID: 0} - switchSmallIcons_7: {fileID: 0} - switchSmallIcons_8: {fileID: 0} - switchSmallIcons_9: {fileID: 0} - switchSmallIcons_10: {fileID: 0} - switchSmallIcons_11: {fileID: 0} - switchSmallIcons_12: {fileID: 0} - switchSmallIcons_13: {fileID: 0} - switchSmallIcons_14: {fileID: 0} - switchSmallIcons_15: {fileID: 0} - switchManualHTML: - switchAccessibleURLs: - switchLegalInformation: - switchMainThreadStackSize: 1048576 - switchPresenceGroupId: - switchLogoHandling: 0 - switchReleaseVersion: 0 - switchDisplayVersion: 1.0.0 - switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 - switchSupportedLanguagesMask: 0 - switchLogoType: 0 - switchApplicationErrorCodeCategory: - switchUserAccountSaveDataSize: 0 - switchUserAccountSaveDataJournalSize: 0 - switchApplicationAttribute: 0 - switchCardSpecSize: -1 - switchCardSpecClock: -1 - switchRatingsMask: 0 - switchRatingsInt_0: 0 - switchRatingsInt_1: 0 - switchRatingsInt_2: 0 - switchRatingsInt_3: 0 - switchRatingsInt_4: 0 - switchRatingsInt_5: 0 - switchRatingsInt_6: 0 - switchRatingsInt_7: 0 - switchRatingsInt_8: 0 - switchRatingsInt_9: 0 - switchRatingsInt_10: 0 - switchRatingsInt_11: 0 - switchRatingsInt_12: 0 - switchLocalCommunicationIds_0: - switchLocalCommunicationIds_1: - switchLocalCommunicationIds_2: - switchLocalCommunicationIds_3: - switchLocalCommunicationIds_4: - switchLocalCommunicationIds_5: - switchLocalCommunicationIds_6: - switchLocalCommunicationIds_7: - switchParentalControl: 0 - switchAllowsScreenshot: 1 - switchAllowsVideoCapturing: 1 - switchAllowsRuntimeAddOnContentInstall: 0 - switchDataLossConfirmation: 0 - switchUserAccountLockEnabled: 0 - switchSystemResourceMemory: 16777216 - switchSupportedNpadStyles: 22 - switchNativeFsCacheSize: 32 - switchIsHoldTypeHorizontal: 0 - switchSupportedNpadCount: 8 - switchSocketConfigEnabled: 0 - switchTcpInitialSendBufferSize: 32 - switchTcpInitialReceiveBufferSize: 64 - switchTcpAutoSendBufferSizeMax: 256 - switchTcpAutoReceiveBufferSizeMax: 256 - switchUdpSendBufferSize: 9 - switchUdpReceiveBufferSize: 42 - switchSocketBufferEfficiency: 4 - switchSocketInitializeEnabled: 1 - switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 - switchUseMicroSleepForYield: 1 - switchMicroSleepForYieldTime: 25 - ps4NPAgeRating: 12 - ps4NPTitleSecret: - ps4NPTrophyPackPath: - ps4ParentalLevel: 11 - ps4ContentID: ED1633-NPXX51362_00-0000000000000000 - ps4Category: 0 - ps4MasterVersion: 01.00 - ps4AppVersion: 01.00 - ps4AppType: 0 - ps4ParamSfxPath: - ps4VideoOutPixelFormat: 0 - ps4VideoOutInitialWidth: 1920 - ps4VideoOutBaseModeInitialWidth: 1920 - ps4VideoOutReprojectionRate: 60 - ps4PronunciationXMLPath: - ps4PronunciationSIGPath: - ps4BackgroundImagePath: - ps4StartupImagePath: - ps4StartupImagesFolder: - ps4IconImagesFolder: - ps4SaveDataImagePath: - ps4SdkOverride: - ps4BGMPath: - ps4ShareFilePath: - ps4ShareOverlayImagePath: - ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: - ps4NPtitleDatPath: - ps4RemotePlayKeyAssignment: -1 - ps4RemotePlayKeyMappingDir: - ps4PlayTogetherPlayerCount: 0 - ps4EnterButtonAssignment: 1 - ps4ApplicationParam1: 0 - ps4ApplicationParam2: 0 - ps4ApplicationParam3: 0 - ps4ApplicationParam4: 0 - ps4DownloadDataSize: 0 - ps4GarlicHeapSize: 2048 - ps4ProGarlicHeapSize: 2560 - playerPrefsMaxSize: 32768 - ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ - ps4pnSessions: 1 - ps4pnPresence: 1 - ps4pnFriends: 1 - ps4pnGameCustomData: 1 - playerPrefsSupport: 0 - enableApplicationExit: 0 - resetTempFolder: 1 - restrictedAudioUsageRights: 0 - ps4UseResolutionFallback: 0 - ps4ReprojectionSupport: 0 - ps4UseAudio3dBackend: 0 - ps4UseLowGarlicFragmentationMode: 1 - ps4SocialScreenEnabled: 0 - ps4ScriptOptimizationLevel: 0 - ps4Audio3dVirtualSpeakerCount: 14 - ps4attribCpuUsage: 0 - ps4PatchPkgPath: - ps4PatchLatestPkgPath: - ps4PatchChangeinfoPath: - ps4PatchDayOne: 0 - ps4attribUserManagement: 0 - ps4attribMoveSupport: 0 - ps4attrib3DSupport: 0 - ps4attribShareSupport: 0 - ps4attribExclusiveVR: 0 - ps4disableAutoHideSplash: 0 - ps4videoRecordingFeaturesUsed: 0 - ps4contentSearchFeaturesUsed: 0 - ps4CompatibilityPS5: 0 - ps4AllowPS5Detection: 0 - ps4GPU800MHz: 1 - ps4attribEyeToEyeDistanceSettingVR: 0 - ps4IncludedModules: [] - ps4attribVROutputEnabled: 0 - ps5ParamFilePath: - ps5VideoOutPixelFormat: 0 - ps5VideoOutInitialWidth: 1920 - ps5VideoOutOutputMode: 1 - ps5BackgroundImagePath: - ps5StartupImagePath: - ps5Pic2Path: - ps5StartupImagesFolder: - ps5IconImagesFolder: - ps5SaveDataImagePath: - ps5SdkOverride: - ps5BGMPath: - ps5ShareOverlayImagePath: - ps5NPConfigZipPath: - ps5Passcode: WqBlQ9wQj99nsQzldVI5ZuGXbEWRK5Rh - ps5UseResolutionFallback: 0 - ps5UseAudio3dBackend: 0 - ps5ScriptOptimizationLevel: 2 - ps5Audio3dVirtualSpeakerCount: 14 - ps5UpdateReferencePackage: - ps5disableAutoHideSplash: 0 - ps5OperatingSystemCanDisableSplashScreen: 0 - ps5IncludedModules: [] - ps5SharedBinaryContentLabels: [] - ps5SharedBinarySystemFolders: [] - monoEnv: - splashScreenBackgroundSourceLandscape: {fileID: 0} - splashScreenBackgroundSourcePortrait: {fileID: 0} - blurSplashScreenBackground: 1 - spritePackerPolicy: - webGLMemorySize: 16 - webGLExceptionSupport: 1 - webGLNameFilesAsHashes: 0 - webGLDataCaching: 1 - webGLDebugSymbols: 0 - webGLEmscriptenArgs: - webGLModulesDirectory: - webGLTemplate: APPLICATION:Default - webGLAnalyzeBuildSize: 0 - webGLUseEmbeddedResources: 0 - webGLCompressionFormat: 1 - webGLLinkerTarget: 1 - webGLThreadsSupport: 0 - webGLWasmStreaming: 0 - scriptingDefineSymbols: {} - platformArchitecture: {} - scriptingBackend: {} - il2cppCompilerConfiguration: {} - managedStrippingLevel: {} - incrementalIl2cppBuild: {} - suppressCommonWarnings: 1 - allowUnsafeCode: 0 - additionalIl2CppArgs: - scriptingRuntimeVersion: 1 - gcIncremental: 0 - assemblyVersionValidation: 1 - gcWBarrierValidation: 0 - apiCompatibilityLevelPerPlatform: - Standalone: 3 - m_RenderingPath: 1 - m_MobileRenderingPath: 1 - metroPackageName: Template_3D - metroPackageVersion: - metroCertificatePath: - metroCertificatePassword: - metroCertificateSubject: - metroCertificateIssuer: - metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_3D - wsaImages: {} - metroTileShortName: - metroTileShowName: 0 - metroMediumTileShowName: 0 - metroLargeTileShowName: 0 - metroWideTileShowName: 0 - metroSupportStreamingInstall: 0 - metroLastRequiredScene: 0 - metroDefaultTileSize: 1 - metroTileForegroundText: 2 - metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, - a: 1} - metroSplashScreenUseBackgroundColor: 0 - platformCapabilities: {} - metroTargetDeviceFamilies: {} - metroFTAName: - metroFTAFileTypes: [] - metroProtocolName: - XboxOneProductId: - XboxOneUpdateKey: - XboxOneSandboxId: - XboxOneContentId: - XboxOneTitleId: - XboxOneSCId: - XboxOneGameOsOverridePath: - XboxOnePackagingOverridePath: - XboxOneAppManifestOverridePath: - XboxOneVersion: 1.0.0.0 - XboxOnePackageEncryption: 0 - XboxOnePackageUpdateGranularity: 2 - XboxOneDescription: - XboxOneLanguage: - - enus - XboxOneCapability: [] - XboxOneGameRating: {} - XboxOneIsContentPackage: 0 - XboxOneEnhancedXboxCompatibilityMode: 0 - XboxOneEnableGPUVariability: 1 - XboxOneSockets: {} - XboxOneSplashScreen: {fileID: 0} - XboxOneAllowedProductIds: [] - XboxOnePersistentLocalStorageSize: 0 - XboxOneXTitleMemory: 8 - XboxOneOverrideIdentityName: - XboxOneOverrideIdentityPublisher: - vrEditorSettings: - daydream: - daydreamIconForeground: {fileID: 0} - daydreamIconBackground: {fileID: 0} - cloudServicesEnabled: - UNet: 1 - luminIcon: - m_Name: - m_ModelFolderPath: - m_PortalFolderPath: - luminCert: - m_CertPath: - m_SignPackage: 1 - luminIsChannelApp: 0 - luminVersion: - m_VersionCode: 1 - m_VersionName: - apiCompatibilityLevel: 6 - cloudProjectId: - framebufferDepthMemorylessMode: 0 - projectName: - organizationId: - cloudEnabled: 0 - enableNativePlatformBackendsForNewInputSystem: 0 - disableOldInputManagerSupport: 0 - legacyClampBlendShapeWeights: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectVersion.txt b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index 7b855c60..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -m_EditorVersion: 2019.4.30f1 -m_EditorVersionWithRevision: 2019.4.30f1 (e8c891080a1f) diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/QualitySettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/QualitySettings.asset deleted file mode 100644 index 7b7658d6..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/QualitySettings.asset +++ /dev/null @@ -1,232 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!47 &1 -QualitySettings: - m_ObjectHideFlags: 0 - serializedVersion: 5 - m_CurrentQuality: 5 - m_QualitySettings: - - serializedVersion: 2 - name: Very Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 15 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 1 - textureQuality: 1 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.3 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.4 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 16 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Medium - pixelLightCount: 1 - shadows: 1 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 1 - lodBias: 0.7 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 64 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: High - pixelLightCount: 2 - shadows: 2 - shadowResolution: 1 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 256 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Very High - pixelLightCount: 3 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 70 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1.5 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 1024 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Ultra - pixelLightCount: 4 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 4 - shadowDistance: 150 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 2 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4096 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Lumin: 5 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSP2: 2 - Stadia: 5 - Standalone: 5 - WebGL: 3 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TagManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TagManager.asset deleted file mode 100644 index 1c92a784..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TagManager.asset +++ /dev/null @@ -1,43 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!78 &1 -TagManager: - serializedVersion: 2 - tags: [] - layers: - - Default - - TransparentFX - - Ignore Raycast - - - - Water - - UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m_SortingLayers: - - name: Default - uniqueID: 0 - locked: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TimeManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TimeManager.asset deleted file mode 100644 index 558a017e..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/TimeManager.asset +++ /dev/null @@ -1,9 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!5 &1 -TimeManager: - m_ObjectHideFlags: 0 - Fixed Timestep: 0.02 - Maximum Allowed Timestep: 0.33333334 - m_TimeScale: 1 - Maximum Particle Timestep: 0.03 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/UnityConnectSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/UnityConnectSettings.asset deleted file mode 100644 index fa0b1465..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/UnityConnectSettings.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!310 &1 -UnityConnectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 1 - m_Enabled: 0 - m_TestMode: 0 - m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events - m_EventUrl: https://cdp.cloud.unity3d.com/v1/events - m_ConfigUrl: https://config.uca.cloud.unity3d.com - m_TestInitMode: 0 - CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com - m_Enabled: 0 - m_LogBufferSize: 10 - m_CaptureEditorExceptions: 1 - UnityPurchasingSettings: - m_Enabled: 0 - m_TestMode: 0 - UnityAnalyticsSettings: - m_Enabled: 0 - m_TestMode: 0 - m_InitializeOnStartup: 1 - UnityAdsSettings: - m_Enabled: 0 - m_InitializeOnStartup: 1 - m_TestMode: 0 - m_IosGameId: - m_AndroidGameId: - m_GameIds: {} - m_GameId: - PerformanceReportingSettings: - m_Enabled: 0 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/VFXManager.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/VFXManager.asset deleted file mode 100644 index 3a95c98b..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/VFXManager.asset +++ /dev/null @@ -1,12 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!937362698 &1 -VFXManager: - m_ObjectHideFlags: 0 - m_IndirectShader: {fileID: 0} - m_CopyBufferShader: {fileID: 0} - m_SortShader: {fileID: 0} - m_StripUpdateShader: {fileID: 0} - m_RenderPipeSettingsPath: - m_FixedTimeStep: 0.016666668 - m_MaxDeltaTime: 0.05 diff --git a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/XRSettings.asset b/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/XRSettings.asset deleted file mode 100644 index 482590c1..00000000 --- a/src/DesperateDevs.Tests/unity/2019_4/ProjectSettings/XRSettings.asset +++ /dev/null @@ -1,10 +0,0 @@ -{ - "m_SettingKeys": [ - "VR Device Disabled", - "VR Device User Alert" - ], - "m_SettingValues": [ - "False", - "False" - ] -} \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs.meta deleted file mode 100644 index 64bbebeb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f215a11fa2faa4dee8d398f745d783f7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics.meta deleted file mode 100644 index 3d1ea961..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4b97384f273b1454080ab9b79bdfa5a3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs deleted file mode 120000 index 30ebf5b4..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/AbstractTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta deleted file mode 100644 index 8f3dd074..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/AbstractTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5bd6b509a2be045b6b4f2f685feb7e70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs deleted file mode 120000 index 52c81d8c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Hooks/ITrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta deleted file mode 100644 index af80aa8f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/ITrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 060bd99f36ca4424c9484c6dfa3a217f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs deleted file mode 120000 index da81cf0c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/Tracker.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta deleted file mode 100644 index 68aef665..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/Tracker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f0d8d8b78fa343e380cafa515e6a509 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs deleted file mode 120000 index 83c873bb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/TrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta deleted file mode 100644 index 4a94a386..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ea24d61d4c5c948e7803b5f84b1f0968 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs deleted file mode 120000 index 1957d036..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingDataException.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta deleted file mode 100644 index 3873e00f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/TrackingDataException.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 32eb90018b0f24fbd96b7e008fd92f09 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs deleted file mode 120000 index a750db87..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Analytics/src/TrackingData/UserTrackingData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta deleted file mode 100644 index eb6dabfd..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Analytics/UserTrackingData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cd3707555e300439788c07ff4d07c650 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta deleted file mode 100644 index 092f9e28..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 44509e7dcabd94727ac43d1aa3876e79 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs deleted file mode 120000 index e2263e78..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorMenuItems.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta deleted file mode 100644 index a4fd7302..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorMenuItems.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6c2265443ee314c52bbf6a9e89fd88bf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs deleted file mode 120000 index 20d5d632..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta deleted file mode 100644 index 83630b8e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e0a51746b88b0434f82ab45f2c15ca00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs deleted file mode 120000 index fa1a77b8..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta deleted file mode 100644 index 24b1f4a2..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/CodeGeneratorPreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c2ac4c58e9be4108a38594a3af7f74d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs deleted file mode 120000 index 226d31c0..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/UnityCodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta deleted file mode 100644 index 00b85ce7..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/UnityCodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 316a29d04e54440beb018431a82e0f5d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta deleted file mode 100644 index 17b402e5..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1ccebf53b6bb0474a992cc1f234f36c8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images deleted file mode 120000 index 21d0b5b5..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta deleted file mode 100644 index 5ff6b459..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4711f79c138cd4fbb86b58f825ed0f80 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta deleted file mode 100644 index 894faa4c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d0992f4ea3ff44c8f94aba64e841dfb0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs deleted file mode 120000 index 97ad0829..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta deleted file mode 100644 index 42a4987b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 13b08657614ca4a418b67b9446b6fff9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs deleted file mode 120000 index 3e18166b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta deleted file mode 100644 index 990277d6..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7003be52902894236b7b972a5844c0d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs deleted file mode 120000 index 1633c82a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorTrackingHook.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta deleted file mode 100644 index a9410972..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorTrackingHook.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b4235c554c7b24a0c9534344035c9dd1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs deleted file mode 120000 index 4f90bc91..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.CodeGenerator/src/CodeGeneratorUtil.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta deleted file mode 100644 index b705beb5..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.CodeGenerator/CodeGeneratorUtil.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 513ec4d08145944e5bb43d66dc3ba0fd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta deleted file mode 100644 index 06164232..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f63b55cb88f094733b74d83f2cf42dfd -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs deleted file mode 120000 index 063352fa..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/AddFileHeaderPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta deleted file mode 100644 index 61cf5e53..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/AddFileHeaderPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f7ef0c7332444de6b11bb72875d4d51 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs deleted file mode 120000 index 6571a8c0..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/CleanTargetDirectoryPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta deleted file mode 100644 index 193f04d7..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/CleanTargetDirectoryPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c2795a098bdb540cea135fab981d096f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs deleted file mode 120000 index 79ded1d6..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/ConsoleWriteLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta deleted file mode 100644 index 2492785f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ConsoleWriteLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fca83f42e087a4cf199f523e9abf2753 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs deleted file mode 120000 index 7df20e3e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/MergeFilesPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta deleted file mode 100644 index 25733b9b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/MergeFilesPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d320c61704c524fac8c532c90c69576b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs deleted file mode 120000 index 7afd8821..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/NewLinePostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta deleted file mode 100644 index 2e4a5594..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/NewLinePostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ca4df402b37c94bad84c9cd1f7e1e7bb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs deleted file mode 120000 index a4ce8877..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/ProjectPathConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta deleted file mode 100644 index 4bd44722..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ProjectPathConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa6f74d9951a54ea78e1fe1e5ba752ae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs deleted file mode 120000 index ba6e2433..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/Configs/TargetDirectoryConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta deleted file mode 100644 index 21acaa4d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetDirectoryConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a4f661a6893014bda8ae256c5bea0c1d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs deleted file mode 120000 index 5576c464..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/TargetFrameworkProfilePreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta deleted file mode 100644 index ef1792a3..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/TargetFrameworkProfilePreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2c23206e5a0df47759080f3d1e46b50e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs deleted file mode 120000 index 7df9e786..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/UpdateCSProjPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta deleted file mode 100644 index b47a8c0e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/UpdateCSProjPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 75437d8e900f5406a93209daa5a443e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs deleted file mode 120000 index 66509389..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PreProcessors/ValidateProjectPathPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta deleted file mode 100644 index 16813f89..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/ValidateProjectPathPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2ad96a7a7fae74a09b7f09c6bff8e0e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs deleted file mode 120000 index f00d1c81..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Plugins/src/PostProcessors/WriteToDiskPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta deleted file mode 100644 index 8c263305..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Plugins/WriteToDiskPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cfd8e685c92d24373b6eccee837cb211 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta deleted file mode 100644 index 1b9b9197..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f2766ef0b92c745f58c07fcfaec6ab70 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs deleted file mode 120000 index a69a7c2c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta deleted file mode 100644 index fee52c0d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e76a35d2fb89e4f818b4249c266dd850 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs deleted file mode 120000 index 6bfa8a5a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PostProcessors/DebugLogPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta deleted file mode 100644 index 40ea9351..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/DebugLogPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eb02f95117793407cbfd0b186d96db99 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs deleted file mode 120000 index aebd42e0..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta deleted file mode 100644 index 73881209..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 72b1010d3747f4a309e6e0d145ef3d93 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs deleted file mode 120000 index 3df1f086..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration.Unity.Plugins/src/PreProcessors/WarnIfCompilationErrorsPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta deleted file mode 100644 index 90773721..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.Unity.Plugins/WarnIfCompilationErrorsPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bfaa7934d59b3493b9b07eaada633596 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta deleted file mode 100644 index 497fd1ea..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d8034fb533618492e8296fa78d7a07b9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs deleted file mode 120000 index 1925f6e7..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGenFile.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta deleted file mode 100644 index 48fe4a05..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGenFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c8201bca3dac346bbab8e8328038b625 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs deleted file mode 120000 index b081a443..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/CodeGeneratorData.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta deleted file mode 100644 index 435f5b07..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/CodeGeneratorData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a7046e4e2fb444aaadcb236baeebe70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs deleted file mode 120000 index 33bdb22a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Diagnosis.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta deleted file mode 100644 index 0d19bb2d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/Diagnosis.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e7589ead0f8cb4ccfae4ecd875ada599 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs deleted file mode 120000 index 1b80a051..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICachable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta deleted file mode 100644 index f90664aa..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICachable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2091d4324ef8145d6af9fee680a1a832 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs deleted file mode 120000 index 9888a3fc..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerationPlugin.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta deleted file mode 100644 index afa6b754..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerationPlugin.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 100ab2fab22dd47789d4739abb7fccf4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs deleted file mode 120000 index 29e3cf15..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/ICodeGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta deleted file mode 100644 index 6029874b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/ICodeGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 78e5f59b760d649499e870269ec70018 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs deleted file mode 120000 index bc4dedcb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta deleted file mode 100644 index 4b72a521..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52e25d58dd43c4b9fbc35783c35b6e83 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs deleted file mode 120000 index 1db724e1..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IDoctor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta deleted file mode 100644 index bf78e8b5..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IDoctor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d9be436487de942ecb328fa54b4821ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs deleted file mode 120000 index acd9fe98..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPostProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta deleted file mode 100644 index a4d7eae2..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3264bc5bc8f9b46de881e743fe539693 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs deleted file mode 120000 index 84c072a7..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.CodeGeneration/src/Interfaces/IPreProcessor.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta deleted file mode 100644 index 44fa50a8..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.CodeGeneration/IPreProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3ad13562474b94ec79bea0abe5960b94 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging.meta deleted file mode 100644 index 3ad35773..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c5c4ab69421ef446d9f53aec6727b1da -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs deleted file mode 120000 index 561c19ac..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/LogLevel.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta deleted file mode 100644 index c0ba5fa9..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/LogLevel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 85186265249254631a094dd71e519cfd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs deleted file mode 120000 index 00ed4df8..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/Logger.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta deleted file mode 100644 index 68f2286d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/Logger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dfe7fa07c19b04f268bf17b792bd858c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs deleted file mode 120000 index d3bb88a7..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Logging/src/fabl.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta deleted file mode 100644 index d7a7b457..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Logging/fabl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eb0cb3bfa31a54ff0830be9d78a5fdd9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking.meta deleted file mode 100644 index 82cecf5d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: adf4ca46ac28546cb9efa0abb33c161b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs deleted file mode 120000 index aece12f2..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/AbstractTcpSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta deleted file mode 100644 index 5587b4ad..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/AbstractTcpSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f793afb45d43a43cab7ec44448010d90 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs deleted file mode 120000 index 2ce4b3dd..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/IPAddressStringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta deleted file mode 100644 index ac4bf56e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/IPAddressStringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0814cf065c75441ee813ef38c964ced0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs deleted file mode 120000 index 5bd2f0ef..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpClientSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta deleted file mode 100644 index ffff980c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpClientSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6d4f9aace15d040e1b57869041b4c785 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs deleted file mode 120000 index e81ef09d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpMessageParser.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta deleted file mode 100644 index 0ed99157..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpMessageParser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80e1b36c8445c4e9c97457703cc856c4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs deleted file mode 120000 index 03d8607d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Networking/src/TcpServerSocket.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta deleted file mode 100644 index 345a9a01..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Networking/TcpServerSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e5cf07c67e964f1fbcabc539ffb537d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization.meta deleted file mode 100644 index 38f7be17..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 073e2251ba7e046578c69b14f0216f10 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs deleted file mode 120000 index 38970703..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/AbstractConfigurableConfig.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta deleted file mode 100644 index cbc1dfc4..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/AbstractConfigurableConfig.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 208562d63f5544c0b86e229211d66b96 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs deleted file mode 120000 index 3abc95dc..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/IConfigurable.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta deleted file mode 100644 index 05162547..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/IConfigurable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8766f6b5e638e4206a634d0c9ada6c43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs deleted file mode 120000 index 9b056559..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Preferences.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta deleted file mode 100644 index 94e9b737..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Preferences.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3154e14db887d47dbbf516bc0688c4d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs deleted file mode 120000 index f0d0dafb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Serialization/src/Properties.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta deleted file mode 100644 index 7d26df50..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Serialization/Properties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b98c392cd44404f38a4546cc8d77ab05 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta deleted file mode 100644 index b99e76f8..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 175355294495c4a85afeb3662eca853b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs deleted file mode 120000 index d465e306..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta deleted file mode 100644 index 3fa7feed..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/AbstractPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 42e3acd1c705e4d4ebb706ca06820b3b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs deleted file mode 120000 index 51c8727f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta deleted file mode 100644 index 25e4d619..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/EditorWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3dfd428868d64e54b6f2346e2957e2e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs deleted file mode 120000 index 8a3af584..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta deleted file mode 100644 index 271e4fd0..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/GUI.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 73d7b04c4950e446594465a9df0e2798 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs deleted file mode 120000 index 6d3eef89..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/Graph.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta deleted file mode 100644 index 3fb7b8d2..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Graph.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a43db3daf1ffd482b93a0e5707b15790 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs deleted file mode 120000 index 8fc2767a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta deleted file mode 100644 index 59518141..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/IPreferencesDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3411acba891b046c18616b750a73755b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs deleted file mode 120000 index 94b16fdf..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta deleted file mode 100644 index 2c1e44b3..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Layout.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9d56f199a563946228f222e9b0d4c00d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs deleted file mode 120000 index e88a7a6b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta deleted file mode 100644 index 114c7127..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/PreferencesWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 69b2999d832e84573b7fc34d1a155cb3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs deleted file mode 120000 index fcac849f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta deleted file mode 100644 index 1ec71755..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/ScriptingDefineSymbols.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5577d0b854c674227b6e888cc1f68c4f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs deleted file mode 120000 index f8569278..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta deleted file mode 100644 index 8618a108..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Unity.Editor/Styles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8a0adc4f72f53465f8b6f6f0aeef579f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils.meta deleted file mode 100644 index fa187daa..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ac5a8e816f6b048e4a067f0a5eb6346e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs deleted file mode 120000 index 6351f1eb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta deleted file mode 100644 index 8dd16d50..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AppDomainExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e5217b2b11477418987da8692cbd0c0a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs deleted file mode 120000 index edf1389b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta deleted file mode 100644 index f80d1ff0..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolver.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 40b95506e250945daa6ec6bd878fab91 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs deleted file mode 120000 index 3cdd4d8b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta deleted file mode 100644 index dbe4197a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AssemblyResolverStatic.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 79cdd6d0a488c4b1a9d8b37aa579ddcd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs deleted file mode 120000 index 8c905f5b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta deleted file mode 100644 index e68632cf..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/AttributeInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 410896d5941fc4b8db250eb6bdc3eb65 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs deleted file mode 120000 index 235af2a9..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/ConsoleColors.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta deleted file mode 100644 index c988c066..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ConsoleColors.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 40ac5615979ae486eb9fe1b69235565b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs deleted file mode 120000 index ed215b19..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta deleted file mode 100644 index 53443edb..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/DictionaryExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 922e0dccf868940078971743e67f4f3b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs deleted file mode 120000 index a782424e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta deleted file mode 100644 index 1087d924..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/InterfaceTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2664eb00e69a441dbbebc7c3debec4e3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs deleted file mode 120000 index 6f488255..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectCache.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta deleted file mode 100644 index 6e44050f..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectCache.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 25543e68a702b4244bb6babea4371161 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs deleted file mode 120000 index 5fd702e3..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Caching/ObjectPool.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta deleted file mode 100644 index 2b9c3d72..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/ObjectPool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d39e57b1e6ca149acb890f1ccdcf9d31 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs deleted file mode 120000 index d4ca19a9..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta deleted file mode 100644 index 8729c939..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 945c68dca0eb2463287ffc2d0ada3f85 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs deleted file mode 120000 index e5df5880..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta deleted file mode 100644 index dfb7b087..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/PublicMemberInfoExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f8d9267ea5ee74138be04ad57d5e6963 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs deleted file mode 120000 index b7290b7c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta deleted file mode 100644 index e015bf96..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/SerializationTypeExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fa4c81c41d40c4355a6d67019902b698 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs deleted file mode 120000 index 7025610b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../src/DesperateDevs.Utils/src/Extensions/StringExtension.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta deleted file mode 100644 index 603c6127..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/DesperateDevs/DesperateDevs.Utils/StringExtension.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1391d873694564aa5b53a0898591a039 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources.meta deleted file mode 100644 index db52f7bc..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c99b5e7501d441fca3a8961b47637b1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated.meta deleted file mode 100644 index 77dd11cf..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a5f7a72508b34e46a05f81aed299123 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs deleted file mode 100644 index e3e78751..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File1 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs.meta deleted file mode 100644 index 5e2f6ce8..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File1.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d221b1f45a1bc4efbaf70565c4508c80 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs deleted file mode 100644 index 09acf142..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs +++ /dev/null @@ -1,9 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by ExampleGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -public class File2 { } \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs.meta deleted file mode 100644 index 583fa640..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/Sources/Generated/File2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6485ed0d70b814a7a880fefbd8a6ee4c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/src.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/src.meta deleted file mode 100644 index 873492bd..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/src.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8b0dadae938e949f199500c49015878f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs deleted file mode 120000 index 3dfedcea..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleDataProvider.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs.meta deleted file mode 100644 index 702fda8b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleDataProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a63c3733f42b4b6187d407ec2107739 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs b/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs deleted file mode 120000 index 225f5f96..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs +++ /dev/null @@ -1 +0,0 @@ -../../../src/ExampleGenerator.cs \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs.meta b/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs.meta deleted file mode 100644 index 4f51d84a..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Assets/src/ExampleGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1dc6fd4685b6e45b68a025a619aa09bb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/DesperateDevs.Tests/unity/2020_3/Jenny.properties b/src/DesperateDevs.Tests/unity/2020_3/Jenny.properties deleted file mode 120000 index 645889dc..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Jenny.properties +++ /dev/null @@ -1 +0,0 @@ -../src/Jenny.properties \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/Packages/manifest.json b/src/DesperateDevs.Tests/unity/2020_3/Packages/manifest.json deleted file mode 100644 index 269f8191..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Packages/manifest.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": "1.7.1", - "com.unity.ide.rider": "2.0.7", - "com.unity.ide.visualstudio": "2.0.11", - "com.unity.ide.vscode": "1.2.3", - "com.unity.test-framework": "1.1.27", - "com.unity.textmeshpro": "3.0.6", - "com.unity.timeline": "1.4.8", - "com.unity.ugui": "1.0.0", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } -} diff --git a/src/DesperateDevs.Tests/unity/2020_3/Packages/packages-lock.json b/src/DesperateDevs.Tests/unity/2020_3/Packages/packages-lock.json deleted file mode 100644 index 6f39b82e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/Packages/packages-lock.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": { - "version": "1.7.1", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.nuget.newtonsoft-json": "2.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ext.nunit": { - "version": "1.0.6", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.ide.rider": { - "version": "2.0.7", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.visualstudio": { - "version": "2.0.11", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.9" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.vscode": { - "version": "1.2.3", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.nuget.newtonsoft-json": { - "version": "2.0.0", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.test-framework": { - "version": "1.1.27", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ext.nunit": "1.0.6", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.textmeshpro": { - "version": "3.0.6", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.timeline": { - "version": "1.4.8", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.modules.director": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ugui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0" - } - }, - "com.unity.modules.ai": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.androidjni": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.animation": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.assetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.audio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.cloth": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.director": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.animation": "1.0.0" - } - }, - "com.unity.modules.imageconversion": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.imgui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.jsonserialize": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.particlesystem": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics2d": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.screencapture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.subsystems": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.terrain": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.terrainphysics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.terrain": "1.0.0" - } - }, - "com.unity.modules.tilemap": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics2d": "1.0.0" - } - }, - "com.unity.modules.ui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.uielements": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.uielementsnative": "1.0.0" - } - }, - "com.unity.modules.uielementsnative": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.umbra": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unityanalytics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.unitywebrequest": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unitywebrequestassetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestaudio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.audio": "1.0.0" - } - }, - "com.unity.modules.unitywebrequesttexture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestwww": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.vehicles": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.video": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.vr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } - }, - "com.unity.modules.wind": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.xr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.subsystems": "1.0.0" - } - } - } -} diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/AudioManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/AudioManager.asset deleted file mode 100644 index 07ebfb05..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/AudioManager.asset +++ /dev/null @@ -1,19 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!11 &1 -AudioManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Volume: 1 - Rolloff Scale: 1 - Doppler Factor: 1 - Default Speaker Mode: 2 - m_SampleRate: 0 - m_DSPBufferSize: 1024 - m_VirtualVoiceCount: 512 - m_RealVoiceCount: 32 - m_SpatializerPlugin: - m_AmbisonicDecoderPlugin: - m_DisableAudio: 0 - m_VirtualizeEffects: 1 - m_RequestedDSPBufferSize: 1024 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ClusterInputManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ClusterInputManager.asset deleted file mode 100644 index e7886b26..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ClusterInputManager.asset +++ /dev/null @@ -1,6 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!236 &1 -ClusterInputManager: - m_ObjectHideFlags: 0 - m_Inputs: [] diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/DynamicsManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/DynamicsManager.asset deleted file mode 100644 index cdc1f3ea..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/DynamicsManager.asset +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!55 &1 -PhysicsManager: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_Gravity: {x: 0, y: -9.81, z: 0} - m_DefaultMaterial: {fileID: 0} - m_BounceThreshold: 2 - m_SleepThreshold: 0.005 - m_DefaultContactOffset: 0.01 - m_DefaultSolverIterations: 6 - m_DefaultSolverVelocityIterations: 1 - m_QueriesHitBackfaces: 0 - m_QueriesHitTriggers: 1 - m_EnableAdaptiveForce: 0 - m_ClothInterCollisionDistance: 0 - m_ClothInterCollisionStiffness: 0 - m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - m_AutoSimulation: 1 - m_AutoSyncTransforms: 0 - m_ReuseCollisionCallbacks: 1 - m_ClothInterCollisionSettingsToggle: 0 - m_ContactPairsMode: 0 - m_BroadphaseType: 0 - m_WorldBounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 250, y: 250, z: 250} - m_WorldSubdivisions: 8 - m_FrictionType: 0 - m_EnableEnhancedDeterminism: 0 - m_EnableUnifiedHeightmaps: 1 - m_DefaultMaxAngluarSpeed: 7 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorBuildSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorBuildSettings.asset deleted file mode 100644 index 0147887e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorBuildSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1045 &1 -EditorBuildSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Scenes: [] - m_configObjects: {} diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorSettings.asset deleted file mode 100644 index de5d0b2d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/EditorSettings.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!159 &1 -EditorSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_ExternalVersionControlSupport: Visible Meta Files - m_SerializationMode: 2 - m_LineEndingsForNewScripts: 0 - m_DefaultBehaviorMode: 0 - m_PrefabRegularEnvironment: {fileID: 0} - m_PrefabUIEnvironment: {fileID: 0} - m_SpritePackerMode: 0 - m_SpritePackerPaddingPower: 1 - m_EtcTextureCompressorBehavior: 1 - m_EtcTextureFastCompressor: 1 - m_EtcTextureNormalCompressor: 2 - m_EtcTextureBestCompressor: 4 - m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref - m_ProjectGenerationRootNamespace: - m_CollabEditorSettings: - inProgressEnabled: 1 - m_EnableTextureStreamingInEditMode: 1 - m_EnableTextureStreamingInPlayMode: 1 - m_AsyncShaderCompilation: 1 - m_EnterPlayModeOptionsEnabled: 0 - m_EnterPlayModeOptions: 3 - m_ShowLightmapResolutionOverlay: 1 - m_UseLegacyProbeSampleCount: 0 - m_SerializeInlineMappingsOnOneLine: 1 \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/GraphicsSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/GraphicsSettings.asset deleted file mode 100644 index 43369e3c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/GraphicsSettings.asset +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!30 &1 -GraphicsSettings: - m_ObjectHideFlags: 0 - serializedVersion: 13 - m_Deferred: - m_Mode: 1 - m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} - m_DeferredReflections: - m_Mode: 1 - m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} - m_ScreenSpaceShadows: - m_Mode: 1 - m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} - m_DepthNormals: - m_Mode: 1 - m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} - m_MotionVectors: - m_Mode: 1 - m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} - m_LightHalo: - m_Mode: 1 - m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} - m_LensFlare: - m_Mode: 1 - m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} - m_AlwaysIncludedShaders: - - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - m_PreloadedShaders: [] - m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, - type: 0} - m_CustomRenderPipeline: {fileID: 0} - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 0, z: 1} - m_DefaultRenderingPath: 1 - m_DefaultMobileRenderingPath: 1 - m_TierSettings: [] - m_LightmapStripping: 0 - m_FogStripping: 0 - m_InstancingStripping: 0 - m_LightmapKeepPlain: 1 - m_LightmapKeepDirCombined: 1 - m_LightmapKeepDynamicPlain: 1 - m_LightmapKeepDynamicDirCombined: 1 - m_LightmapKeepShadowMask: 1 - m_LightmapKeepSubtractive: 1 - m_FogKeepLinear: 1 - m_FogKeepExp: 1 - m_FogKeepExp2: 1 - m_AlbedoSwatchInfos: [] - m_LightsUseLinearIntensity: 0 - m_LightsUseColorTemperature: 0 - m_LogWhenShaderIsCompiled: 0 - m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/InputManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/InputManager.asset deleted file mode 100644 index 17c8f538..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/InputManager.asset +++ /dev/null @@ -1,295 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!13 &1 -InputManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Axes: - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: left - positiveButton: right - altNegativeButton: a - altPositiveButton: d - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: down - positiveButton: up - altNegativeButton: s - altPositiveButton: w - gravity: 3 - dead: 0.001 - sensitivity: 3 - snap: 1 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left ctrl - altNegativeButton: - altPositiveButton: mouse 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left alt - altNegativeButton: - altPositiveButton: mouse 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: left shift - altNegativeButton: - altPositiveButton: mouse 2 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: space - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse X - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse Y - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Mouse ScrollWheel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0 - sensitivity: 0.1 - snap: 0 - invert: 0 - type: 1 - axis: 2 - joyNum: 0 - - serializedVersion: 3 - m_Name: Horizontal - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 0 - type: 2 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Vertical - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: - altNegativeButton: - altPositiveButton: - gravity: 0 - dead: 0.19 - sensitivity: 1 - snap: 0 - invert: 1 - type: 2 - axis: 1 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire1 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 0 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire2 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 1 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Fire3 - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 2 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Jump - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: joystick button 3 - altNegativeButton: - altPositiveButton: - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: return - altNegativeButton: - altPositiveButton: joystick button 0 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Submit - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: enter - altNegativeButton: - altPositiveButton: space - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 - - serializedVersion: 3 - m_Name: Cancel - descriptiveName: - descriptiveNegativeName: - negativeButton: - positiveButton: escape - altNegativeButton: - altPositiveButton: joystick button 1 - gravity: 1000 - dead: 0.001 - sensitivity: 1000 - snap: 0 - invert: 0 - type: 0 - axis: 0 - joyNum: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/NavMeshAreas.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/NavMeshAreas.asset deleted file mode 100644 index 3b0b7c3d..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/NavMeshAreas.asset +++ /dev/null @@ -1,91 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!126 &1 -NavMeshProjectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - areas: - - name: Walkable - cost: 1 - - name: Not Walkable - cost: 1 - - name: Jump - cost: 2 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - - name: - cost: 1 - m_LastAgentTypeID: -887442657 - m_Settings: - - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.75 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_SettingNames: - - Humanoid diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PackageManagerSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PackageManagerSettings.asset deleted file mode 100644 index be4a7974..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PackageManagerSettings.asset +++ /dev/null @@ -1,43 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &1 -MonoBehaviour: - m_ObjectHideFlags: 61 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} - m_Name: - m_EditorClassIdentifier: - m_EnablePreviewPackages: 0 - m_EnablePackageDependencies: 0 - m_AdvancedSettingsExpanded: 1 - m_ScopedRegistriesSettingsExpanded: 1 - oneTimeWarningShown: 0 - m_Registries: - - m_Id: main - m_Name: - m_Url: https://packages.unity.com - m_Scopes: [] - m_IsDefault: 1 - m_Capabilities: 7 - m_UserSelectedRegistryName: - m_UserAddingNewScopedRegistry: 0 - m_RegistryInfoDraft: - m_ErrorMessage: - m_Original: - m_Id: - m_Name: - m_Url: - m_Scopes: [] - m_IsDefault: 0 - m_Capabilities: 0 - m_Modified: 0 - m_Name: - m_Url: - m_Scopes: - - - m_SelectedScopeIndex: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/Physics2DSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/Physics2DSettings.asset deleted file mode 100644 index 47880b1c..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/Physics2DSettings.asset +++ /dev/null @@ -1,56 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!19 &1 -Physics2DSettings: - m_ObjectHideFlags: 0 - serializedVersion: 4 - m_Gravity: {x: 0, y: -9.81} - m_DefaultMaterial: {fileID: 0} - m_VelocityIterations: 8 - m_PositionIterations: 3 - m_VelocityThreshold: 1 - m_MaxLinearCorrection: 0.2 - m_MaxAngularCorrection: 8 - m_MaxTranslationSpeed: 100 - m_MaxRotationSpeed: 360 - m_BaumgarteScale: 0.2 - m_BaumgarteTimeOfImpactScale: 0.75 - m_TimeToSleep: 0.5 - m_LinearSleepTolerance: 0.01 - m_AngularSleepTolerance: 2 - m_DefaultContactOffset: 0.01 - m_JobOptions: - serializedVersion: 2 - useMultithreading: 0 - useConsistencySorting: 0 - m_InterpolationPosesPerJob: 100 - m_NewContactsPerJob: 30 - m_CollideContactsPerJob: 100 - m_ClearFlagsPerJob: 200 - m_ClearBodyForcesPerJob: 200 - m_SyncDiscreteFixturesPerJob: 50 - m_SyncContinuousFixturesPerJob: 50 - m_FindNearestContactsPerJob: 100 - m_UpdateTriggerContactsPerJob: 100 - m_IslandSolverCostThreshold: 100 - m_IslandSolverBodyCostScale: 1 - m_IslandSolverContactCostScale: 10 - m_IslandSolverJointCostScale: 10 - m_IslandSolverBodiesPerJob: 50 - m_IslandSolverContactsPerJob: 50 - m_AutoSimulation: 1 - m_QueriesHitTriggers: 1 - m_QueriesStartInColliders: 1 - m_CallbacksOnDisable: 1 - m_ReuseCollisionCallbacks: 1 - m_AutoSyncTransforms: 0 - m_AlwaysShowColliders: 0 - m_ShowColliderSleep: 1 - m_ShowColliderContacts: 0 - m_ShowColliderAABB: 0 - m_ContactArrowScale: 0.2 - m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} - m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} - m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} - m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} - m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PresetManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PresetManager.asset deleted file mode 100644 index 67a94dae..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/PresetManager.asset +++ /dev/null @@ -1,7 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1386491679 &1 -PresetManager: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_DefaultPresets: {} diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectSettings.asset deleted file mode 100644 index dff7f698..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectSettings.asset +++ /dev/null @@ -1,689 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!129 &1 -PlayerSettings: - m_ObjectHideFlags: 0 - serializedVersion: 22 - productGUID: 30e55a36743294b18bd08dad7e916d67 - AndroidProfiler: 0 - AndroidFilterTouchesWhenObscured: 0 - AndroidEnableSustainedPerformanceMode: 0 - defaultScreenOrientation: 4 - targetDevice: 2 - useOnDemandResources: 0 - accelerometerFrequency: 60 - companyName: DefaultCompany - productName: 2020_3 - defaultCursor: {fileID: 0} - cursorHotspot: {x: 0, y: 0} - m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 - m_SplashScreenOverlayOpacity: 1 - m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 - m_SplashScreenDrawMode: 0 - m_SplashScreenBackgroundAnimationZoom: 1 - m_SplashScreenLogoAnimationZoom: 1 - m_SplashScreenBackgroundLandscapeAspect: 1 - m_SplashScreenBackgroundPortraitAspect: 1 - m_SplashScreenBackgroundLandscapeUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenBackgroundPortraitUvs: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - m_SplashScreenLogos: [] - m_VirtualRealitySplashScreen: {fileID: 0} - m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1024 - defaultScreenHeight: 768 - defaultScreenWidthWeb: 960 - defaultScreenHeightWeb: 600 - m_StereoRenderingPath: 0 - m_ActiveColorSpace: 0 - m_MTRendering: 1 - mipStripping: 0 - numberOfMipsStripped: 0 - m_StackTraceTypes: 010000000100000001000000010000000100000001000000 - iosShowActivityIndicatorOnLoading: -1 - androidShowActivityIndicatorOnLoading: -1 - iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 - allowedAutorotateToPortrait: 1 - allowedAutorotateToPortraitUpsideDown: 1 - allowedAutorotateToLandscapeRight: 1 - allowedAutorotateToLandscapeLeft: 1 - useOSAutorotation: 1 - use32BitDisplayBuffer: 1 - preserveFramebufferAlpha: 0 - disableDepthAndStencilBuffers: 0 - androidStartInFullscreen: 1 - androidRenderOutsideSafeArea: 1 - androidUseSwappy: 1 - androidBlitType: 0 - androidResizableWindow: 0 - androidDefaultWindowWidth: 1920 - androidDefaultWindowHeight: 1080 - androidMinimumWindowWidth: 400 - androidMinimumWindowHeight: 300 - androidFullscreenMode: 1 - defaultIsNativeResolution: 1 - macRetinaSupport: 1 - runInBackground: 1 - captureSingleScreen: 0 - muteOtherAudioSources: 0 - Prepare IOS For Recording: 0 - Force IOS Speakers When Recording: 0 - deferSystemGesturesMode: 0 - hideHomeButton: 0 - submitAnalytics: 1 - usePlayerLog: 1 - bakeCollisionMeshes: 0 - forceSingleInstance: 0 - useFlipModelSwapchain: 1 - resizableWindow: 0 - useMacAppStoreValidation: 0 - macAppStoreCategory: public.app-category.games - gpuSkinning: 1 - xboxPIXTextureCapture: 0 - xboxEnableAvatar: 0 - xboxEnableKinect: 0 - xboxEnableKinectAutoTracking: 0 - xboxEnableFitness: 0 - visibleInBackground: 1 - allowFullscreenSwitch: 1 - fullscreenMode: 1 - xboxSpeechDB: 0 - xboxEnableHeadOrientation: 0 - xboxEnableGuest: 0 - xboxEnablePIXSampling: 0 - metalFramebufferOnly: 0 - xboxOneResolution: 0 - xboxOneSResolution: 0 - xboxOneXResolution: 3 - xboxOneMonoLoggingLevel: 0 - xboxOneLoggingLevel: 1 - xboxOneDisableEsram: 0 - xboxOneEnableTypeOptimization: 0 - xboxOnePresentImmediateThreshold: 0 - switchQueueCommandMemory: 0 - switchQueueControlMemory: 16384 - switchQueueComputeMemory: 262144 - switchNVNShaderPoolsGranularity: 33554432 - switchNVNDefaultPoolsGranularity: 16777216 - switchNVNOtherPoolsGranularity: 16777216 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 - stadiaPresentMode: 0 - stadiaTargetFramerate: 0 - vulkanNumSwapchainBuffers: 3 - vulkanEnableSetSRGBWrite: 0 - vulkanEnablePreTransform: 0 - vulkanEnableLateAcquireNextImage: 0 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 - bundleVersion: 0.1 - preloadedAssets: [] - metroInputSource: 0 - wsaTransparentSwapchain: 0 - m_HolographicPauseOnTrackingLoss: 1 - xboxOneDisableKinectGpuReservation: 1 - xboxOneEnable7thCore: 1 - vrSettings: - enable360StereoCapture: 0 - isWsaHolographicRemotingEnabled: 0 - enableFrameTimingStats: 0 - useHDRDisplay: 0 - D3DHDRBitDepth: 0 - m_ColorGamuts: 00000000 - targetPixelDensity: 30 - resolutionScalingMode: 0 - androidSupportedAspectRatio: 1 - androidMaxAspectRatio: 2.1 - applicationIdentifier: - Standalone: com.DefaultCompany.20203 - buildNumber: - Standalone: 0 - iPhone: 0 - tvOS: 0 - overrideDefaultApplicationIdentifier: 0 - AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 19 - AndroidTargetSdkVersion: 0 - AndroidPreferredInstallLocation: 1 - aotOptions: - stripEngineCode: 1 - iPhoneStrippingLevel: 0 - iPhoneScriptCallOptimization: 0 - ForceInternetPermission: 0 - ForceSDCardPermission: 0 - CreateWallpaper: 0 - APKExpansionFiles: 0 - keepLoadedShadersAlive: 0 - StripUnusedMeshComponents: 1 - VertexChannelCompressionMask: 4054 - iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 11.0 - tvOSSdkVersion: 0 - tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 11.0 - uIPrerenderedIcon: 0 - uIRequiresPersistentWiFi: 0 - uIRequiresFullScreen: 1 - uIStatusBarHidden: 1 - uIExitOnSuspend: 0 - uIStatusBarStyle: 0 - appleTVSplashScreen: {fileID: 0} - appleTVSplashScreen2x: {fileID: 0} - tvOSSmallIconLayers: [] - tvOSSmallIconLayers2x: [] - tvOSLargeIconLayers: [] - tvOSLargeIconLayers2x: [] - tvOSTopShelfImageLayers: [] - tvOSTopShelfImageLayers2x: [] - tvOSTopShelfImageWideLayers: [] - tvOSTopShelfImageWideLayers2x: [] - iOSLaunchScreenType: 0 - iOSLaunchScreenPortrait: {fileID: 0} - iOSLaunchScreenLandscape: {fileID: 0} - iOSLaunchScreenBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreenFillPct: 100 - iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: - iOSLaunchScreeniPadType: 0 - iOSLaunchScreeniPadImage: {fileID: 0} - iOSLaunchScreeniPadBackgroundColor: - serializedVersion: 2 - rgba: 0 - iOSLaunchScreeniPadFillPct: 100 - iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: - iOSLaunchScreenCustomStoryboardPath: - iOSLaunchScreeniPadCustomStoryboardPath: - iOSDeviceRequirements: [] - iOSURLSchemes: [] - iOSBackgroundModes: 0 - iOSMetalForceHardShadows: 0 - metalEditorSupport: 1 - metalAPIValidation: 1 - iOSRenderExtraFrameOnPause: 0 - iosCopyPluginsCodeInsteadOfSymlink: 0 - appleDeveloperTeamID: - iOSManualSigningProvisioningProfileID: - tvOSManualSigningProvisioningProfileID: - iOSManualSigningProvisioningProfileType: 0 - tvOSManualSigningProvisioningProfileType: 0 - appleEnableAutomaticSigning: 0 - iOSRequireARKit: 0 - iOSAutomaticallyDetectAndAddCapabilities: 1 - appleEnableProMotion: 0 - shaderPrecisionModel: 0 - clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea - templatePackageId: com.unity.template.3d@5.0.4 - templateDefaultScene: Assets/Scenes/SampleScene.unity - useCustomMainManifest: 0 - useCustomLauncherManifest: 0 - useCustomMainGradleTemplate: 0 - useCustomLauncherGradleManifest: 0 - useCustomBaseGradleTemplate: 0 - useCustomGradlePropertiesTemplate: 0 - useCustomProguardFile: 0 - AndroidTargetArchitectures: 1 - AndroidTargetDevices: 0 - AndroidSplashScreenScale: 0 - androidSplashScreen: {fileID: 0} - AndroidKeystoreName: - AndroidKeyaliasName: - AndroidBuildApkPerCpuArchitecture: 0 - AndroidTVCompatibility: 0 - AndroidIsGame: 1 - AndroidEnableTango: 0 - androidEnableBanner: 1 - androidUseLowAccuracyLocation: 0 - androidUseCustomKeystore: 0 - m_AndroidBanners: - - width: 320 - height: 180 - banner: {fileID: 0} - androidGamepadSupportLevel: 0 - chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 - AndroidMinifyRelease: 0 - AndroidMinifyDebug: 0 - AndroidValidateAppBundleSize: 1 - AndroidAppBundleSizeToValidate: 150 - m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] - m_BuildTargetBatching: - - m_BuildTarget: Standalone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: tvOS - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: Android - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: iPhone - m_StaticBatching: 1 - m_DynamicBatching: 0 - - m_BuildTarget: WebGL - m_StaticBatching: 0 - m_DynamicBatching: 0 - m_BuildTargetGraphicsJobs: - - m_BuildTarget: MacStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: Switch - m_GraphicsJobs: 1 - - m_BuildTarget: MetroSupport - m_GraphicsJobs: 1 - - m_BuildTarget: AppleTVSupport - m_GraphicsJobs: 0 - - m_BuildTarget: BJMSupport - m_GraphicsJobs: 1 - - m_BuildTarget: LinuxStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: PS4Player - m_GraphicsJobs: 1 - - m_BuildTarget: iOSSupport - m_GraphicsJobs: 0 - - m_BuildTarget: WindowsStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobs: 1 - - m_BuildTarget: LuminSupport - m_GraphicsJobs: 0 - - m_BuildTarget: AndroidPlayer - m_GraphicsJobs: 0 - - m_BuildTarget: WebGLSupport - m_GraphicsJobs: 0 - m_BuildTargetGraphicsJobMode: - - m_BuildTarget: PS4Player - m_GraphicsJobMode: 0 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobMode: 0 - m_BuildTargetGraphicsAPIs: - - m_BuildTarget: AndroidPlayer - m_APIs: 150000000b000000 - m_Automatic: 0 - - m_BuildTarget: iOSSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: AppleTVSupport - m_APIs: 10000000 - m_Automatic: 1 - - m_BuildTarget: WebGLSupport - m_APIs: 0b000000 - m_Automatic: 1 - m_BuildTargetVRSettings: - - m_BuildTarget: Standalone - m_Enabled: 0 - m_Devices: - - Oculus - - OpenVR - openGLRequireES31: 0 - openGLRequireES31AEP: 0 - openGLRequireES32: 0 - m_TemplateCustomTags: {} - mobileMTRendering: - Android: 1 - iPhone: 1 - tvOS: 1 - m_BuildTargetGroupLightmapEncodingQuality: [] - m_BuildTargetGroupLightmapSettings: [] - m_BuildTargetNormalMapEncoding: [] - playModeTestRunnerEnabled: 0 - runPlayModeTestAsEditModeTest: 0 - actionOnDotNetUnhandledException: 1 - enableInternalProfiler: 0 - logObjCUncaughtExceptions: 1 - enableCrashReportAPI: 0 - cameraUsageDescription: - locationUsageDescription: - microphoneUsageDescription: - bluetoothUsageDescription: - switchNMETAOverride: - switchNetLibKey: - switchSocketMemoryPoolSize: 6144 - switchSocketAllocatorPoolSize: 128 - switchSocketConcurrencyLimit: 14 - switchScreenResolutionBehavior: 2 - switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 - switchApplicationID: 0x01004b9000490000 - switchNSODependencies: - switchTitleNames_0: - switchTitleNames_1: - switchTitleNames_2: - switchTitleNames_3: - switchTitleNames_4: - switchTitleNames_5: - switchTitleNames_6: - switchTitleNames_7: - switchTitleNames_8: - switchTitleNames_9: - switchTitleNames_10: - switchTitleNames_11: - switchTitleNames_12: - switchTitleNames_13: - switchTitleNames_14: - switchTitleNames_15: - switchPublisherNames_0: - switchPublisherNames_1: - switchPublisherNames_2: - switchPublisherNames_3: - switchPublisherNames_4: - switchPublisherNames_5: - switchPublisherNames_6: - switchPublisherNames_7: - switchPublisherNames_8: - switchPublisherNames_9: - switchPublisherNames_10: - switchPublisherNames_11: - switchPublisherNames_12: - switchPublisherNames_13: - switchPublisherNames_14: - switchPublisherNames_15: - switchIcons_0: {fileID: 0} - switchIcons_1: {fileID: 0} - switchIcons_2: {fileID: 0} - switchIcons_3: {fileID: 0} - switchIcons_4: {fileID: 0} - switchIcons_5: {fileID: 0} - switchIcons_6: {fileID: 0} - switchIcons_7: {fileID: 0} - switchIcons_8: {fileID: 0} - switchIcons_9: {fileID: 0} - switchIcons_10: {fileID: 0} - switchIcons_11: {fileID: 0} - switchIcons_12: {fileID: 0} - switchIcons_13: {fileID: 0} - switchIcons_14: {fileID: 0} - switchIcons_15: {fileID: 0} - switchSmallIcons_0: {fileID: 0} - switchSmallIcons_1: {fileID: 0} - switchSmallIcons_2: {fileID: 0} - switchSmallIcons_3: {fileID: 0} - switchSmallIcons_4: {fileID: 0} - switchSmallIcons_5: {fileID: 0} - switchSmallIcons_6: {fileID: 0} - switchSmallIcons_7: {fileID: 0} - switchSmallIcons_8: {fileID: 0} - switchSmallIcons_9: {fileID: 0} - switchSmallIcons_10: {fileID: 0} - switchSmallIcons_11: {fileID: 0} - switchSmallIcons_12: {fileID: 0} - switchSmallIcons_13: {fileID: 0} - switchSmallIcons_14: {fileID: 0} - switchSmallIcons_15: {fileID: 0} - switchManualHTML: - switchAccessibleURLs: - switchLegalInformation: - switchMainThreadStackSize: 1048576 - switchPresenceGroupId: - switchLogoHandling: 0 - switchReleaseVersion: 0 - switchDisplayVersion: 1.0.0 - switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 - switchSupportedLanguagesMask: 0 - switchLogoType: 0 - switchApplicationErrorCodeCategory: - switchUserAccountSaveDataSize: 0 - switchUserAccountSaveDataJournalSize: 0 - switchApplicationAttribute: 0 - switchCardSpecSize: -1 - switchCardSpecClock: -1 - switchRatingsMask: 0 - switchRatingsInt_0: 0 - switchRatingsInt_1: 0 - switchRatingsInt_2: 0 - switchRatingsInt_3: 0 - switchRatingsInt_4: 0 - switchRatingsInt_5: 0 - switchRatingsInt_6: 0 - switchRatingsInt_7: 0 - switchRatingsInt_8: 0 - switchRatingsInt_9: 0 - switchRatingsInt_10: 0 - switchRatingsInt_11: 0 - switchRatingsInt_12: 0 - switchLocalCommunicationIds_0: - switchLocalCommunicationIds_1: - switchLocalCommunicationIds_2: - switchLocalCommunicationIds_3: - switchLocalCommunicationIds_4: - switchLocalCommunicationIds_5: - switchLocalCommunicationIds_6: - switchLocalCommunicationIds_7: - switchParentalControl: 0 - switchAllowsScreenshot: 1 - switchAllowsVideoCapturing: 1 - switchAllowsRuntimeAddOnContentInstall: 0 - switchDataLossConfirmation: 0 - switchUserAccountLockEnabled: 0 - switchSystemResourceMemory: 16777216 - switchSupportedNpadStyles: 22 - switchNativeFsCacheSize: 32 - switchIsHoldTypeHorizontal: 0 - switchSupportedNpadCount: 8 - switchSocketConfigEnabled: 0 - switchTcpInitialSendBufferSize: 32 - switchTcpInitialReceiveBufferSize: 64 - switchTcpAutoSendBufferSizeMax: 256 - switchTcpAutoReceiveBufferSizeMax: 256 - switchUdpSendBufferSize: 9 - switchUdpReceiveBufferSize: 42 - switchSocketBufferEfficiency: 4 - switchSocketInitializeEnabled: 1 - switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 - switchUseNewStyleFilepaths: 0 - switchUseMicroSleepForYield: 1 - switchMicroSleepForYieldTime: 25 - ps4NPAgeRating: 12 - ps4NPTitleSecret: - ps4NPTrophyPackPath: - ps4ParentalLevel: 11 - ps4ContentID: ED1633-NPXX51362_00-0000000000000000 - ps4Category: 0 - ps4MasterVersion: 01.00 - ps4AppVersion: 01.00 - ps4AppType: 0 - ps4ParamSfxPath: - ps4VideoOutPixelFormat: 0 - ps4VideoOutInitialWidth: 1920 - ps4VideoOutBaseModeInitialWidth: 1920 - ps4VideoOutReprojectionRate: 60 - ps4PronunciationXMLPath: - ps4PronunciationSIGPath: - ps4BackgroundImagePath: - ps4StartupImagePath: - ps4StartupImagesFolder: - ps4IconImagesFolder: - ps4SaveDataImagePath: - ps4SdkOverride: - ps4BGMPath: - ps4ShareFilePath: - ps4ShareOverlayImagePath: - ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: - ps4NPtitleDatPath: - ps4RemotePlayKeyAssignment: -1 - ps4RemotePlayKeyMappingDir: - ps4PlayTogetherPlayerCount: 0 - ps4EnterButtonAssignment: 1 - ps4ApplicationParam1: 0 - ps4ApplicationParam2: 0 - ps4ApplicationParam3: 0 - ps4ApplicationParam4: 0 - ps4DownloadDataSize: 0 - ps4GarlicHeapSize: 2048 - ps4ProGarlicHeapSize: 2560 - playerPrefsMaxSize: 32768 - ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ - ps4pnSessions: 1 - ps4pnPresence: 1 - ps4pnFriends: 1 - ps4pnGameCustomData: 1 - playerPrefsSupport: 0 - enableApplicationExit: 0 - resetTempFolder: 1 - restrictedAudioUsageRights: 0 - ps4UseResolutionFallback: 0 - ps4ReprojectionSupport: 0 - ps4UseAudio3dBackend: 0 - ps4UseLowGarlicFragmentationMode: 1 - ps4SocialScreenEnabled: 0 - ps4ScriptOptimizationLevel: 0 - ps4Audio3dVirtualSpeakerCount: 14 - ps4attribCpuUsage: 0 - ps4PatchPkgPath: - ps4PatchLatestPkgPath: - ps4PatchChangeinfoPath: - ps4PatchDayOne: 0 - ps4attribUserManagement: 0 - ps4attribMoveSupport: 0 - ps4attrib3DSupport: 0 - ps4attribShareSupport: 0 - ps4attribExclusiveVR: 0 - ps4disableAutoHideSplash: 0 - ps4videoRecordingFeaturesUsed: 0 - ps4contentSearchFeaturesUsed: 0 - ps4CompatibilityPS5: 0 - ps4AllowPS5Detection: 0 - ps4GPU800MHz: 1 - ps4attribEyeToEyeDistanceSettingVR: 0 - ps4IncludedModules: [] - ps4attribVROutputEnabled: 0 - monoEnv: - splashScreenBackgroundSourceLandscape: {fileID: 0} - splashScreenBackgroundSourcePortrait: {fileID: 0} - blurSplashScreenBackground: 1 - spritePackerPolicy: - webGLMemorySize: 16 - webGLExceptionSupport: 1 - webGLNameFilesAsHashes: 0 - webGLDataCaching: 1 - webGLDebugSymbols: 0 - webGLEmscriptenArgs: - webGLModulesDirectory: - webGLTemplate: APPLICATION:Default - webGLAnalyzeBuildSize: 0 - webGLUseEmbeddedResources: 0 - webGLCompressionFormat: 1 - webGLWasmArithmeticExceptions: 0 - webGLLinkerTarget: 1 - webGLThreadsSupport: 0 - webGLDecompressionFallback: 0 - scriptingDefineSymbols: {} - additionalCompilerArguments: {} - platformArchitecture: {} - scriptingBackend: {} - il2cppCompilerConfiguration: {} - managedStrippingLevel: {} - incrementalIl2cppBuild: {} - suppressCommonWarnings: 1 - allowUnsafeCode: 0 - useDeterministicCompilation: 1 - useReferenceAssemblies: 1 - enableRoslynAnalyzers: 1 - additionalIl2CppArgs: - scriptingRuntimeVersion: 1 - gcIncremental: 1 - assemblyVersionValidation: 1 - gcWBarrierValidation: 0 - apiCompatibilityLevelPerPlatform: - Standalone: 3 - m_RenderingPath: 1 - m_MobileRenderingPath: 1 - metroPackageName: Template_3D - metroPackageVersion: - metroCertificatePath: - metroCertificatePassword: - metroCertificateSubject: - metroCertificateIssuer: - metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: Template_3D - wsaImages: {} - metroTileShortName: - metroTileShowName: 0 - metroMediumTileShowName: 0 - metroLargeTileShowName: 0 - metroWideTileShowName: 0 - metroSupportStreamingInstall: 0 - metroLastRequiredScene: 0 - metroDefaultTileSize: 1 - metroTileForegroundText: 2 - metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} - metroSplashScreenUseBackgroundColor: 0 - platformCapabilities: {} - metroTargetDeviceFamilies: {} - metroFTAName: - metroFTAFileTypes: [] - metroProtocolName: - XboxOneProductId: - XboxOneUpdateKey: - XboxOneSandboxId: - XboxOneContentId: - XboxOneTitleId: - XboxOneSCId: - XboxOneGameOsOverridePath: - XboxOnePackagingOverridePath: - XboxOneAppManifestOverridePath: - XboxOneVersion: 1.0.0.0 - XboxOnePackageEncryption: 0 - XboxOnePackageUpdateGranularity: 2 - XboxOneDescription: - XboxOneLanguage: - - enus - XboxOneCapability: [] - XboxOneGameRating: {} - XboxOneIsContentPackage: 0 - XboxOneEnhancedXboxCompatibilityMode: 0 - XboxOneEnableGPUVariability: 1 - XboxOneSockets: {} - XboxOneSplashScreen: {fileID: 0} - XboxOneAllowedProductIds: [] - XboxOnePersistentLocalStorageSize: 0 - XboxOneXTitleMemory: 8 - XboxOneOverrideIdentityName: - XboxOneOverrideIdentityPublisher: - vrEditorSettings: {} - cloudServicesEnabled: - UNet: 1 - luminIcon: - m_Name: - m_ModelFolderPath: - m_PortalFolderPath: - luminCert: - m_CertPath: - m_SignPackage: 1 - luminIsChannelApp: 0 - luminVersion: - m_VersionCode: 1 - m_VersionName: - apiCompatibilityLevel: 6 - activeInputHandler: 0 - cloudProjectId: - framebufferDepthMemorylessMode: 0 - qualitySettingsNames: [] - projectName: - organizationId: - cloudEnabled: 0 - legacyClampBlendShapeWeights: 0 - virtualTexturingSupportEnabled: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectVersion.txt b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index 2c2c4462..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -m_EditorVersion: 2020.3.17f1 -m_EditorVersionWithRevision: 2020.3.17f1 (a4537701e4ab) diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/QualitySettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/QualitySettings.asset deleted file mode 100644 index 7b7658d6..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/QualitySettings.asset +++ /dev/null @@ -1,232 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!47 &1 -QualitySettings: - m_ObjectHideFlags: 0 - serializedVersion: 5 - m_CurrentQuality: 5 - m_QualitySettings: - - serializedVersion: 2 - name: Very Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 15 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 1 - textureQuality: 1 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.3 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 0 - lodBias: 0.4 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 16 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Medium - pixelLightCount: 1 - shadows: 1 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - vSyncCount: 1 - lodBias: 0.7 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 64 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: High - pixelLightCount: 2 - shadows: 2 - shadowResolution: 1 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 2 - textureQuality: 0 - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 256 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Very High - pixelLightCount: 3 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 70 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 1.5 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 1024 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - - serializedVersion: 2 - name: Ultra - pixelLightCount: 4 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 4 - shadowDistance: 150 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - blendWeights: 4 - textureQuality: 0 - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - vSyncCount: 1 - lodBias: 2 - maximumLODLevel: 0 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4096 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Lumin: 5 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSP2: 2 - Stadia: 5 - Standalone: 5 - WebGL: 3 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TagManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TagManager.asset deleted file mode 100644 index 1c92a784..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TagManager.asset +++ /dev/null @@ -1,43 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!78 &1 -TagManager: - serializedVersion: 2 - tags: [] - layers: - - Default - - TransparentFX - - Ignore Raycast - - - - Water - - UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m_SortingLayers: - - name: Default - uniqueID: 0 - locked: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TimeManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TimeManager.asset deleted file mode 100644 index 558a017e..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/TimeManager.asset +++ /dev/null @@ -1,9 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!5 &1 -TimeManager: - m_ObjectHideFlags: 0 - Fixed Timestep: 0.02 - Maximum Allowed Timestep: 0.33333334 - m_TimeScale: 1 - Maximum Particle Timestep: 0.03 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/UnityConnectSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/UnityConnectSettings.asset deleted file mode 100644 index 6125b308..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/UnityConnectSettings.asset +++ /dev/null @@ -1,35 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!310 &1 -UnityConnectSettings: - m_ObjectHideFlags: 0 - serializedVersion: 1 - m_Enabled: 0 - m_TestMode: 0 - m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events - m_EventUrl: https://cdp.cloud.unity3d.com/v1/events - m_ConfigUrl: https://config.uca.cloud.unity3d.com - m_DashboardUrl: https://dashboard.unity3d.com - m_TestInitMode: 0 - CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com - m_Enabled: 0 - m_LogBufferSize: 10 - m_CaptureEditorExceptions: 1 - UnityPurchasingSettings: - m_Enabled: 0 - m_TestMode: 0 - UnityAnalyticsSettings: - m_Enabled: 0 - m_TestMode: 0 - m_InitializeOnStartup: 1 - UnityAdsSettings: - m_Enabled: 0 - m_InitializeOnStartup: 1 - m_TestMode: 0 - m_IosGameId: - m_AndroidGameId: - m_GameIds: {} - m_GameId: - PerformanceReportingSettings: - m_Enabled: 0 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VFXManager.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VFXManager.asset deleted file mode 100644 index 3a95c98b..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VFXManager.asset +++ /dev/null @@ -1,12 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!937362698 &1 -VFXManager: - m_ObjectHideFlags: 0 - m_IndirectShader: {fileID: 0} - m_CopyBufferShader: {fileID: 0} - m_SortShader: {fileID: 0} - m_StripUpdateShader: {fileID: 0} - m_RenderPipeSettingsPath: - m_FixedTimeStep: 0.016666668 - m_MaxDeltaTime: 0.05 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VersionControlSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VersionControlSettings.asset deleted file mode 100644 index dca28814..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/VersionControlSettings.asset +++ /dev/null @@ -1,8 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!890905787 &1 -VersionControlSettings: - m_ObjectHideFlags: 0 - m_Mode: Visible Meta Files - m_CollabEditorSettings: - inProgressEnabled: 1 diff --git a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/XRSettings.asset b/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/XRSettings.asset deleted file mode 100644 index 482590c1..00000000 --- a/src/DesperateDevs.Tests/unity/2020_3/ProjectSettings/XRSettings.asset +++ /dev/null @@ -1,10 +0,0 @@ -{ - "m_SettingKeys": [ - "VR Device Disabled", - "VR Device User Alert" - ], - "m_SettingValues": [ - "False", - "False" - ] -} \ No newline at end of file diff --git a/src/DesperateDevs.Tests/unity/Samples/DesperateDevs.Unity/SampleCoroutine.cs b/src/DesperateDevs.Tests/unity/Samples/DesperateDevs.Unity/SampleCoroutine.cs new file mode 100644 index 00000000..bc95d544 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/DesperateDevs.Unity/SampleCoroutine.cs @@ -0,0 +1,35 @@ +ο»Ώusing System.Collections; +using DesperateDevs.Unity; +using UnityEngine; + +namespace Samples.DesperateDevs.Unity +{ + public class SampleCoroutine : MonoBehaviour + { + void Start() + { + CoroutineRunner.Run(SampleRoutine(), Debug.Log); + CoroutineRunner.Run(SampleRoutine()); + } + + IEnumerator SampleRoutine() + { + Debug.Log("SampleRoutine start"); + var i = 0; + while (i < 5) + { + i += 1; + yield return new WaitForSeconds(0.5f); + } + + Debug.Log("SampleRoutine done"); + yield return "Sample " + i; + } + + void Update() + { + if (Input.anyKey) + CoroutineRunner.StopAll(); + } + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesDrawer.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesDrawer.cs new file mode 100644 index 00000000..c7ab4cf4 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesDrawer.cs @@ -0,0 +1,64 @@ +using DesperateDevs.Serialization; +using DesperateDevs.Unity.Editor; +using UnityEditor; +using UnityEngine; + +namespace Samples.DesperateDevs.Unity.Editor.Editor +{ + public class SamplePreferencesDrawer : AbstractPreferencesDrawer + { + public override string Title => nameof(SamplePreferencesDrawer); + Texture2D _headerTexture; + + bool _unfolded = true; + string _objectFieldFolder = "Assets"; + string _objectFieldFile = "Sample.properties"; + string _searchString = string.Empty; + + public override void Initialize(Preferences preferences) + { + _headerTexture = EditorLayout.LoadTexture("l:Jenny-Header"); + } + + public override void DrawHeader(Preferences preferences) + { + EditorLayout.DrawTexture(_headerTexture); + } + + protected override void OnDrawContent(Preferences preferences) + { + var path = EditorLayout.ObjectFieldOpenFolderPanel("Folder", _objectFieldFolder, "Assets"); + if (!string.IsNullOrEmpty(path)) _objectFieldFolder = path; + + path = EditorLayout.ObjectFieldOpenFilePanel("File", _objectFieldFile, "Assets", "properties"); + if (!string.IsNullOrEmpty(path)) _objectFieldFile = path; + + EditorGUILayout.Space(); + _unfolded = EditorLayout.Foldout(_unfolded, "Foldout"); + if (_unfolded) + { + EditorGUILayout.BeginHorizontal(); + { + EditorLayout.MiniButton("Mini Button"); + EditorLayout.MiniButton("x"); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal(); + { + EditorLayout.MiniButtonLeft("Left"); + EditorLayout.MiniButtonMid("Middle"); + EditorLayout.MiniButtonRight("Right"); + } + EditorGUILayout.EndHorizontal(); + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Search"); + _searchString = EditorLayout.SearchTextField(_searchString); + if (EditorLayout.MatchesSearchString("Desperate", _searchString)) + EditorGUILayout.LabelField("Desperate"); + if (EditorLayout.MatchesSearchString("Devs", _searchString)) + EditorGUILayout.LabelField("Devs"); + } + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesWindow.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesWindow.cs new file mode 100644 index 00000000..6493a778 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SamplePreferencesWindow.cs @@ -0,0 +1,20 @@ +using DesperateDevs.Unity.Editor; +using UnityEditor; + +namespace Samples.DesperateDevs.Unity.Editor.Editor +{ + public class SamplePreferencesWindow : PreferencesWindow + { + [MenuItem("Samples/DesperateDevs.Unity.Editor/Create SamplePreferencesWindow")] + public static void OpenPreferences() + { + var window = GetWindow(true, nameof(SamplePreferencesWindow)); + window.Initialize( + "Sample.properties", + "Sample.userproperties", + typeof(SamplePreferencesDrawer).FullName); + + window.Show(); + } + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SampleScriptingDefineSymbols.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SampleScriptingDefineSymbols.cs new file mode 100644 index 00000000..2eab056c --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/Editor/SampleScriptingDefineSymbols.cs @@ -0,0 +1,31 @@ +using DesperateDevs.Unity.Editor; +using UnityEditor; +using UnityEngine; + +namespace Samples.DesperateDevs.Unity.Editor.Editor +{ + public class SampleScriptingDefineSymbolsWindow : EditorWindow + { + [MenuItem("Samples/DesperateDevs.Unity.Editor/Create SampleScriptingDefineSymbolsWindow")] + public static void CreateWindow() + { + GetWindow(nameof(SampleScriptingDefineSymbolsWindow)); + } + + ScriptingDefineSymbols _symbols; + + void OnFocus() => _symbols = new ScriptingDefineSymbols(); + + void OnGUI() + { + if (GUILayout.Button("Log build target groups")) + foreach (var buildTargetGroup in ScriptingDefineSymbols.BuildTargetGroups) + Debug.Log(buildTargetGroup); + + if (GUILayout.Button("Add SAMPLE")) _symbols.Add("SAMPLE", BuildTargetGroup.WebGL); + if (GUILayout.Button("Remove SAMPLE")) _symbols.Remove("SAMPLE", BuildTargetGroup.WebGL); + if (GUILayout.Button("AddForAll SAMPLE")) _symbols.AddForAll("SAMPLE"); + if (GUILayout.Button("RemoveForAll SAMPLE")) _symbols.RemoveForAll("SAMPLE"); + } + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/SampleGraph.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/SampleGraph.cs new file mode 100644 index 00000000..10b0f706 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/DesperateDevs.Unity.Editor/SampleGraph.cs @@ -0,0 +1,66 @@ +using DesperateDevs.Unity.Editor; +using UnityEngine; + +namespace Samples.DesperateDevs.Unity.Editor +{ + public class SampleGraph : MonoBehaviour + { + public float[] Data = new float[100]; + public float Height = 180f; + public float Min = -10; + public float Max = 10f; + + public float BorderX = 48; + public float BorderY = 20; + public int RightLinePadding = -15; + public string LabelFormat = "{0:0.0}"; + public string AxisFormat = "{0:0.0}"; + public int GridLines = 1; + public float AxisRounding = 1f; + public float AnchorRadius = 1f; + public float PointScale = 1f; + public float SelectedPointScale = 3f; + public float LineWidth = 2f; + public Color GridLinesColor = Color.gray; + public Color LineColor = Color.red; + public Color AvgLineColor = Color.yellow; + public Color PointColor = Color.red; + } + +#if UNITY_EDITOR + + [UnityEditor.CustomEditor(typeof(SampleGraph))] + public class SampleGraphEditor : UnityEditor.Editor + { + Graph _graph; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + var sample = (SampleGraph)target; + for (var i = 0; i < sample.Data.Length; i++) + sample.Data[i] = sample.Min + (sample.Max - sample.Min) * ((float)i / sample.Data.Length); + + if (_graph == null) _graph = new Graph(100); + _graph.BorderX = sample.BorderX; + _graph.BorderY = sample.BorderY; + _graph.RightLinePadding = sample.RightLinePadding; + _graph.LabelFormat = sample.LabelFormat; + _graph.AxisFormat = sample.AxisFormat; + _graph.GridLines = sample.GridLines; + _graph.AxisRounding = sample.AxisRounding; + _graph.AnchorRadius = sample.AnchorRadius; + _graph.PointScale = sample.PointScale; + _graph.SelectedPointScale = sample.SelectedPointScale; + _graph.LineWidth = sample.LineWidth; + _graph.GridLinesColor = sample.GridLinesColor; + _graph.LineColor = sample.LineColor; + _graph.AvgLineColor = sample.AvgLineColor; + _graph.PointColor = sample.PointColor; + _graph.Draw(sample.Data, sample.Height); + + Repaint(); + } + } +#endif +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleDataProvider.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleDataProvider.cs new file mode 100644 index 00000000..178662ac --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleDataProvider.cs @@ -0,0 +1,37 @@ +ο»Ώusing System.Collections.Generic; +using System.Linq; +using DesperateDevs.Serialization; +using Jenny; + +namespace Samples.Jenny +{ + public class SampleDataProvider : IDataProvider, IConfigurable + { + public string Name => "Sample"; + public int Order => 0; + public bool RunInDryMode => true; + + readonly string _countKey = $"{typeof(SampleDataProvider).Namespace}.Count"; + + int _count; + + public Dictionary DefaultProperties => new Dictionary + { + {_countKey, "5"} + }; + + public void Configure(Preferences preferences) + { + _count = int.Parse(preferences[_countKey]); + } + + public CodeGeneratorData[] GetData() => Enumerable + .Range(1, _count) + .Select(i => new CodeGeneratorData + { + ["File.Name"] = $"File{i}.cs", + ["File.Content"] = $"public class File{i} {{}}" + }) + .ToArray(); + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleGenerator.cs b/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleGenerator.cs new file mode 100644 index 00000000..0aab39ae --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Editor/Jenny/SampleGenerator.cs @@ -0,0 +1,22 @@ +ο»Ώusing System.Linq; +using Jenny; + +namespace Samples.Jenny +{ + public class SampleGenerator : ICodeGenerator + { + public string Name => "Sample"; + public int Order => 0; + public bool RunInDryMode => true; + + public CodeGenFile[] Generate(CodeGeneratorData[] data) => data + .Select(CreateFile) + .ToArray(); + + CodeGenFile CreateFile(CodeGeneratorData data) => new CodeGenFile( + data["File.Name"].ToString(), + data["File.Content"].ToString(), + GetType().FullName + ); + } +} diff --git a/src/DesperateDevs.Tests/unity/Samples/Jenny.properties b/src/DesperateDevs.Tests/unity/Samples/Jenny.properties new file mode 100644 index 00000000..6522ec78 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Jenny.properties @@ -0,0 +1,18 @@ +Jenny.SearchPaths = Assets/Editor, \ + Library/ScriptAssemblies +Jenny.Plugins = Assembly-CSharp-Editor, \ + Jenny.Plugins, \ + Jenny.Plugins.Unity +Jenny.PreProcessors = Jenny.Plugins.ValidateProjectPathPreProcessor +Jenny.DataProviders = Samples.Jenny.SampleDataProvider +Jenny.CodeGenerators = Samples.Jenny.SampleGenerator +Jenny.PostProcessors = Jenny.Plugins.AddFileHeaderPostProcessor, \ + Jenny.Plugins.CleanTargetDirectoryPostProcessor, \ + Jenny.Plugins.MergeFilesPostProcessor, \ + Jenny.Plugins.UpdateCsprojPostProcessor, \ + Jenny.Plugins.WriteToDiskPostProcessor +Jenny.Server.Port = 3333 +Jenny.Client.Host = localhost +Jenny.Plugins.ProjectPath = Assembly-CSharp.csproj +Jenny.Plugins.TargetDirectory = Assets/Generated +Samples.Jenny.Count = 5 diff --git a/src/DesperateDevs.Tests/unity/Samples/Sample.properties b/src/DesperateDevs.Tests/unity/Samples/Sample.properties new file mode 100644 index 00000000..dd2ee085 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Samples/Sample.properties @@ -0,0 +1 @@ +key = value diff --git a/src/DesperateDevs.Tests/unity/Unity-2020.3 b/src/DesperateDevs.Tests/unity/Unity-2020.3 new file mode 160000 index 00000000..c0d27106 --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Unity-2020.3 @@ -0,0 +1 @@ +Subproject commit c0d271060f43d7f597177d0a276b1e523ad466e1 diff --git a/src/DesperateDevs.Tests/unity/Unity-2021.3 b/src/DesperateDevs.Tests/unity/Unity-2021.3 new file mode 160000 index 00000000..1892ff2f --- /dev/null +++ b/src/DesperateDevs.Tests/unity/Unity-2021.3 @@ -0,0 +1 @@ +Subproject commit 1892ff2fd8d3c7475b6e5c8cb4d1a7e6843cba63 diff --git a/src/DesperateDevs.Tests/unity/src/ExampleDataProvider.cs b/src/DesperateDevs.Tests/unity/src/ExampleDataProvider.cs deleted file mode 100644 index 9aabd5e4..00000000 --- a/src/DesperateDevs.Tests/unity/src/ExampleDataProvider.cs +++ /dev/null @@ -1,21 +0,0 @@ -ο»Ώusing DesperateDevs.CodeGeneration; - -public class ExampleDataProvider : IDataProvider { - - public string name { get { return "Example"; } } - public int priority { get { return 0; } } - public bool isEnabledByDefault { get { return true; } } - public bool runInDryMode { get { return true; } } - - public CodeGeneratorData[] GetData() { - var d1 = new CodeGeneratorData(); - d1["File.Name"] = "File1.cs"; - d1["File.Content"] = "public class File1 { }"; - - var d2 = new CodeGeneratorData(); - d2["File.Name"] = "File2.cs"; - d2["File.Content"] = "public class File2 { }"; - - return new[] { d1, d2 }; - } -} diff --git a/src/DesperateDevs.Tests/unity/src/ExampleGenerator.cs b/src/DesperateDevs.Tests/unity/src/ExampleGenerator.cs deleted file mode 100644 index 824e8969..00000000 --- a/src/DesperateDevs.Tests/unity/src/ExampleGenerator.cs +++ /dev/null @@ -1,24 +0,0 @@ -ο»Ώusing System.Linq; -using DesperateDevs.CodeGeneration; - -public class ExampleGenerator : ICodeGenerator { - - public string name { get { return "Example"; } } - public int priority { get { return 0; } } - public bool isEnabledByDefault { get { return true; } } - public bool runInDryMode { get { return true; } } - - public CodeGenFile[] Generate(CodeGeneratorData[] data) { - return data - .Select(createFile) - .ToArray(); - } - - CodeGenFile createFile(CodeGeneratorData data) { - return new CodeGenFile( - data["File.Name"].ToString(), - data["File.Content"].ToString(), - GetType().FullName - ); - } -} diff --git a/src/DesperateDevs.Tests/unity/src/Jenny.properties b/src/DesperateDevs.Tests/unity/src/Jenny.properties deleted file mode 100644 index d19c8636..00000000 --- a/src/DesperateDevs.Tests/unity/src/Jenny.properties +++ /dev/null @@ -1,21 +0,0 @@ -Jenny.SearchPaths = Library/ScriptAssemblies -Jenny.Plugins = Assembly-CSharp -Jenny.PreProcessors = DesperateDevs.CodeGeneration.Plugins.ValidateProjectPathPreProcessor, \ - DesperateDevs.CodeGeneration.Unity.Plugins.WarnIfCompilationErrorsPreProcessor, \ - DesperateDevs.CodeGeneration.Plugins.TargetFrameworkProfilePreProcessor - -Jenny.DataProviders = ExampleDataProvider -Jenny.CodeGenerators = ExampleGenerator -Jenny.PostProcessors = DesperateDevs.CodeGeneration.Plugins.AddFileHeaderPostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.CleanTargetDirectoryPostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.MergeFilesPostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.NewLinePostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.UpdateCSProjPostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.WriteToDiskPostProcessor, \ - DesperateDevs.CodeGeneration.Plugins.ConsoleWriteLinePostProcessor, \ - DesperateDevs.CodeGeneration.Unity.Plugins.DebugLogPostProcessor - -Jenny.Server.Port = 3333 -Jenny.Client.Host = localhost -DesperateDevs.CodeGeneration.Plugins.ProjectPath = Assembly-CSharp.csproj -DesperateDevs.CodeGeneration.Plugins.TargetDirectory = Assets/Sources diff --git a/src/DesperateDevs.Threading/src/DesperateDevs.Threading.csproj b/src/DesperateDevs.Threading/src/DesperateDevs.Threading.csproj index 44eca124..e0e0bf2c 100644 --- a/src/DesperateDevs.Threading/src/DesperateDevs.Threading.csproj +++ b/src/DesperateDevs.Threading/src/DesperateDevs.Threading.csproj @@ -2,6 +2,7 @@ $(DefaultTargetFramework) + 1.0.0 diff --git a/src/DesperateDevs.Threading/src/Dispatcher.cs b/src/DesperateDevs.Threading/src/Dispatcher.cs index 66a1ce63..b8ae0de8 100644 --- a/src/DesperateDevs.Threading/src/Dispatcher.cs +++ b/src/DesperateDevs.Threading/src/Dispatcher.cs @@ -2,48 +2,54 @@ using System.Collections.Generic; using System.Threading; -namespace DesperateDevs.Threading { - - public class Dispatcher { - - public bool isOnThread { get { return _threadId == Thread.CurrentThread.ManagedThreadId; } } +namespace DesperateDevs.Threading +{ + public class Dispatcher + { + public bool IsOnThread => _threadId == Thread.CurrentThread.ManagedThreadId; readonly int _threadId; readonly List _actions; readonly object _lock = new object(); - public Dispatcher(Thread thread) { + public Dispatcher(Thread thread) + { _threadId = thread.ManagedThreadId; - lock (_lock) { - _actions = new List(); - } + _actions = new List(); } - public void Queue(Action action) { - if (isOnThread) { + public void Queue(Action action) + { + if (IsOnThread) + { action(); - } else { - lock (_lock) { + } + else + { + lock (_lock) + { _actions.Add(action); } } } - public void Run() { - if (isOnThread) { + public void Run() + { + if (IsOnThread) + { Action[] actions = null; - lock (_lock) { - if (_actions.Count > 0) { + lock (_lock) + { + if (_actions.Count > 0) + { actions = _actions.ToArray(); _actions.Clear(); } } - if (actions != null) { - foreach (var action in actions) { + if (actions != null) + foreach (var action in actions) action(); - } - } } } } diff --git a/src/DesperateDevs.Threading/tests/DesperateDevs.Threading.Tests.csproj b/src/DesperateDevs.Threading/tests/DesperateDevs.Threading.Tests.csproj index 3da7ed82..08ca148f 100644 --- a/src/DesperateDevs.Threading/tests/DesperateDevs.Threading.Tests.csproj +++ b/src/DesperateDevs.Threading/tests/DesperateDevs.Threading.Tests.csproj @@ -3,18 +3,20 @@ $(DefaultTestTargetFramework) false + false - - + + + - + - + diff --git a/src/DesperateDevs.Unity.Editor/src/AbstractPreferencesDrawer.cs b/src/DesperateDevs.Unity.Editor/src/AbstractPreferencesDrawer.cs new file mode 100644 index 00000000..8c9e164f --- /dev/null +++ b/src/DesperateDevs.Unity.Editor/src/AbstractPreferencesDrawer.cs @@ -0,0 +1,30 @@ +using DesperateDevs.Serialization; + +namespace DesperateDevs.Unity.Editor +{ + public abstract class AbstractPreferencesDrawer : IPreferencesDrawer + { + public abstract string Title { get; } + + protected bool _drawContent = true; + + public abstract void Initialize(Preferences preferences); + public abstract void DrawHeader(Preferences preferences); + + public virtual void DrawContent(Preferences preferences) + { + var title = _drawContent ? $"β–Ό {Title}" : $"β–Ά {Title}"; + _drawContent = EditorLayout.DrawSectionHeaderToggle(title, _drawContent); + if (_drawContent) + { + EditorLayout.BeginSectionContent(); + { + OnDrawContent(preferences); + } + EditorLayout.EndSectionContent(); + } + } + + protected abstract void OnDrawContent(Preferences preferences); + } +} diff --git a/src/DesperateDevs.Unity.Editor/src/DesperateDevs.Unity.Editor.csproj b/src/DesperateDevs.Unity.Editor/src/DesperateDevs.Unity.Editor.csproj index b6622a61..e3568022 100644 --- a/src/DesperateDevs.Unity.Editor/src/DesperateDevs.Unity.Editor.csproj +++ b/src/DesperateDevs.Unity.Editor/src/DesperateDevs.Unity.Editor.csproj @@ -2,10 +2,11 @@ $(DefaultTargetFramework) + 1.0.0 - + diff --git a/src/DesperateDevs.Unity.Editor/src/EditorLayout.cs b/src/DesperateDevs.Unity.Editor/src/EditorLayout.cs new file mode 100644 index 00000000..9e484189 --- /dev/null +++ b/src/DesperateDevs.Unity.Editor/src/EditorLayout.cs @@ -0,0 +1,151 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace DesperateDevs.Unity.Editor +{ + public static class EditorLayout + { + public static bool DrawSectionHeaderToggle(string header, bool value) => + GUILayout.Toggle(value, header, Styles.SectionHeader); + + public static void BeginSectionContent() => + EditorGUILayout.BeginVertical(Styles.SectionContent); + + public static void EndSectionContent() => + EditorGUILayout.EndVertical(); + + public static Rect BeginVerticalBox() => + EditorGUILayout.BeginVertical(GUI.skin.box); + + public static void EndVerticalBox() => + EditorGUILayout.EndVertical(); + + public static Texture2D LoadTexture(string label) + { + var guid = AssetDatabase.FindAssets(label).FirstOrDefault(); + return guid != null + ? AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)) + : null; + } + + public static Rect DrawTexture(Texture2D texture) + { + if (texture != null) + { + var ratio = (float)texture.width / texture.height; + var rect = GUILayoutUtility.GetAspectRect(ratio, GUILayout.ExpandWidth(true)); + GUI.DrawTexture(rect, texture, ScaleMode.ScaleAndCrop); + return rect; + } + else + { + return new Rect(); + } + } + + public static bool ObjectFieldButton(string label, string buttonText) + { + bool clicked; + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.LabelField(label, GUILayout.Width(146)); + clicked = GUILayout.Button(buttonText, EditorStyles.objectField); + } + EditorGUILayout.EndHorizontal(); + + return clicked; + } + + public static string ObjectFieldOpenFolderPanel(string label, string buttonText, string defaultPath) + { + if (ObjectFieldButton(label, buttonText)) + { + var path = defaultPath ?? "Assets/"; + if (!Directory.Exists(path)) + path = "Assets/"; + + path = EditorUtility.OpenFolderPanel(label, path, string.Empty); + return path.Replace(Directory.GetCurrentDirectory() + "/", string.Empty); + } + else + { + return null; + } + } + + public static string ObjectFieldOpenFilePanel(string label, string buttonText, string defaultPath, string extension) + { + if (ObjectFieldButton(label, buttonText)) + { + var path = defaultPath ?? "Assets/"; + if (!File.Exists(path)) + path = "Assets/"; + + path = EditorUtility.OpenFilePanel(label, path, extension); + return path.Replace(Directory.GetCurrentDirectory() + "/", string.Empty); + } + else + { + return null; + } + } + + public static bool MiniButton(string c) => MiniButton(c, EditorStyles.miniButton); + public static bool MiniButtonLeft(string c) => MiniButton(c, EditorStyles.miniButtonLeft); + public static bool MiniButtonMid(string c) => MiniButton(c, EditorStyles.miniButtonMid); + public static bool MiniButtonRight(string c) => MiniButton(c, EditorStyles.miniButtonRight); + + static bool MiniButton(string c, GUIStyle style) + { + var options = c.Length == 1 + ? new[] {GUILayout.Width(19)} + : Array.Empty(); + + var clicked = GUILayout.Button(c, style, options); + if (clicked) + GUI.FocusControl(null); + + return clicked; + } + + const int DefaultFoldoutMargin = 11; + + public static bool Foldout(bool foldout, string content, int leftMargin = DefaultFoldoutMargin) => + Foldout(foldout, content, EditorStyles.foldout, leftMargin); + + public static bool Foldout(bool foldout, string content, GUIStyle style, int leftMargin = DefaultFoldoutMargin) + { + EditorGUILayout.BeginHorizontal(); + { + GUILayout.Space(leftMargin); + foldout = EditorGUILayout.Foldout(foldout, content, style); + } + EditorGUILayout.EndHorizontal(); + return foldout; + } + + public static string SearchTextField(string searchString) + { + var guiChanged = GUI.changed; + GUILayout.BeginHorizontal(); + { + searchString = GUILayout.TextField(searchString, Styles.ToolbarSearchTextField); + if (GUILayout.Button(string.Empty, Styles.ToolbarSearchCancelButtonStyle)) + searchString = string.Empty; + } + GUILayout.EndHorizontal(); + GUI.changed = guiChanged; + + return searchString; + } + + public static bool MatchesSearchString(string str, string search) + { + var searches = search.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); + return searches.Length == 0 || searches.Any(str.Contains); + } + } +} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs b/src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs deleted file mode 100644 index 8b7188e9..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/EditorWindow.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.Unity.Editor -{ - public static partial class EditorLayout - { - public static Texture2D LoadTexture(string label) - { - var assets = AssetDatabase.FindAssets(label); - if (assets.Length > 0) - { - var guid = assets[0]; - if (guid != null) - { - var path = AssetDatabase.GUIDToAssetPath(guid); - return AssetDatabase.LoadAssetAtPath(path); - } - } - - return null; - } - - public static Rect DrawTexture(Texture2D texture) - { - if (texture != null) - { - var ratio = (float)texture.width / (float)texture.height; - var rect = GUILayoutUtility.GetAspectRect(ratio, GUILayout.ExpandWidth(true)); - GUI.DrawTexture(rect, texture, ScaleMode.ScaleAndCrop); - return rect; - } - - return new Rect(); - } - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs b/src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs deleted file mode 100644 index f87f862c..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/GUI.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.Unity.Editor -{ - public static partial class EditorLayout - { - public static bool ObjectFieldButton(string label, string buttonText) - { - var clicked = false; - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField(label, GUILayout.Width(146)); - if (buttonText.Length > 24) - { - buttonText = "..." + buttonText.Substring(buttonText.Length - 24); - } - clicked = GUILayout.Button(buttonText, EditorStyles.objectField); - EditorGUILayout.EndHorizontal(); - - return clicked; - } - - public static string ObjectFieldOpenFolderPanel(string label, string buttonText, string defaultPath) - { - if (ObjectFieldButton(label, buttonText)) - { - var path = defaultPath ?? "Assets/"; - if (!Directory.Exists(path)) - { - path = "Assets/"; - } - path = EditorUtility.OpenFolderPanel(label, path, string.Empty); - return path.Replace(Directory.GetCurrentDirectory() + "/", string.Empty); - } - - return null; - } - - public static string ObjectFieldOpenFilePanel(string label, string buttonText, string defaultPath, string extension) - { - if (ObjectFieldButton(label, buttonText)) - { - var path = defaultPath ?? "Assets/"; - if (!File.Exists(path)) - { - path = "Assets/"; - } - path = EditorUtility.OpenFilePanel(label, path, extension); - return path.Replace(Directory.GetCurrentDirectory() + "/", string.Empty); - } - - return null; - } - - public static bool MiniButton(string c) - { - return miniButton(c, EditorStyles.miniButton); - } - - public static bool MiniButtonLeft(string c) - { - return miniButton(c, EditorStyles.miniButtonLeft); - } - - public static bool MiniButtonMid(string c) - { - return miniButton(c, EditorStyles.miniButtonMid); - } - - public static bool MiniButtonRight(string c) - { - return miniButton(c, EditorStyles.miniButtonRight); - } - - static bool miniButton(string c, GUIStyle style) - { - var options = c.Length == 1 - ? new[] { GUILayout.Width(19) } - : new GUILayoutOption[0]; - - var clicked = GUILayout.Button(c, style, options); - if (clicked) - { - GUI.FocusControl(null); - } - return clicked; - } - - const int DEFAULT_FOLDOUT_MARGIN = 11; - - public static bool Foldout(bool foldout, string content, int leftMargin = DEFAULT_FOLDOUT_MARGIN) - { - return Foldout(foldout, content, EditorStyles.foldout, leftMargin); - } - - public static bool Foldout(bool foldout, string content, GUIStyle style, int leftMargin = DEFAULT_FOLDOUT_MARGIN) - { - EditorGUILayout.BeginHorizontal(); - GUILayout.Space(leftMargin); - foldout = EditorGUILayout.Foldout(foldout, content, style); - EditorGUILayout.EndHorizontal(); - return foldout; - } - - public static string SearchTextField(string searchString) - { - var guiChanged = GUI.changed; - GUILayout.BeginHorizontal(); - searchString = GUILayout.TextField(searchString, GUI.skin.FindStyle("ToolbarSeachTextField")); - if (GUILayout.Button(string.Empty, GUI.skin.FindStyle("ToolbarSeachCancelButton"))) - { - searchString = string.Empty; - } - GUILayout.EndHorizontal(); - GUI.changed = guiChanged; - - return searchString; - } - - public static bool MatchesSearchString(string str, string search) - { - var searches = search.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - return searches.Length == 0 || searches.Any(str.Contains); - } - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs b/src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs deleted file mode 100644 index 91344627..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/Layout/Layout.cs +++ /dev/null @@ -1,28 +0,0 @@ -ο»Ώusing UnityEditor; -using UnityEngine; - -namespace DesperateDevs.Unity.Editor { - - public static partial class EditorLayout { - - public static bool DrawSectionHeaderToggle(string header, bool value) { - return GUILayout.Toggle(value, header, Styles.sectionHeader); - } - - public static void BeginSectionContent() { - EditorGUILayout.BeginVertical(Styles.sectionContent); - } - - public static void EndSectionContent() { - EditorGUILayout.EndVertical(); - } - - public static Rect BeginVerticalBox() { - return EditorGUILayout.BeginVertical(GUI.skin.box); - } - - public static void EndVerticalBox() { - EditorGUILayout.EndVertical(); - } - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs b/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs deleted file mode 100644 index 78e3213c..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/AbstractPreferencesDrawer.cs +++ /dev/null @@ -1,27 +0,0 @@ -using DesperateDevs.Serialization; - -namespace DesperateDevs.Unity.Editor { - - public abstract class AbstractPreferencesDrawer : IPreferencesDrawer { - - public abstract string title { get; } - - protected bool _drawContent = true; - - public abstract void Initialize(Preferences preferences); - public abstract void DrawHeader(Preferences preferences); - - public virtual void DrawContent(Preferences preferences) { - _drawContent = EditorLayout.DrawSectionHeaderToggle(title, _drawContent); - if (_drawContent) { - EditorLayout.BeginSectionContent(); - { - drawContent(preferences); - } - EditorLayout.EndSectionContent(); - } - } - - protected abstract void drawContent(Preferences preferences); - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs b/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs deleted file mode 100644 index 3aaf5512..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesDrawer/IPreferencesDrawer.cs +++ /dev/null @@ -1,13 +0,0 @@ -ο»Ώusing DesperateDevs.Serialization; - -namespace DesperateDevs.Unity.Editor { - - public interface IPreferencesDrawer { - - string title { get; } - - void Initialize(Preferences preferences); - void DrawHeader(Preferences preferences); - void DrawContent(Preferences preferences); - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs b/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs deleted file mode 100644 index db0a8522..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/PreferencesWindow.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using System.Linq; -using DesperateDevs.Serialization; -using DesperateDevs.Utils; -using UnityEditor; -using UnityEngine; - -namespace DesperateDevs.Unity.Editor -{ - public class PreferencesWindow : EditorWindow - { - public Preferences preferences { get { return _preferences; } } - - string _propertiesPath; - string _userPropertiesPath; - string[] _preferencesDrawerNames; - - Preferences _preferences; - IPreferencesDrawer[] _preferencesDrawers; - Vector2 _scrollViewPosition; - - Exception _configException; - - public void Initialize(string propertiesPath, string userPropertiesPath, params string[] preferencesDrawerNames) - { - _propertiesPath = propertiesPath; - _userPropertiesPath = userPropertiesPath; - _preferencesDrawerNames = preferencesDrawerNames; - } - - void initialize() - { - try - { - _preferences = new Preferences(_propertiesPath, _userPropertiesPath); - - var availableDrawers = AppDomain.CurrentDomain - .GetNonAbstractTypes(); - - _preferencesDrawers = _preferencesDrawerNames - .Select(drawerName => availableDrawers.SingleOrDefault(type => type.FullName == drawerName)) - .Where(type => type != null) - .Select(type => (IPreferencesDrawer)Activator.CreateInstance(type)) - .ToArray(); - - foreach (var drawer in _preferencesDrawers) - { - drawer.Initialize(_preferences); - } - _preferences.Save(); - } - catch (Exception ex) - { - _preferencesDrawers = new IPreferencesDrawer[0]; - _configException = ex; - } - } - - void OnGUI() - { - if (_preferencesDrawers == null) - { - initialize(); - } - - drawHeader(); - _scrollViewPosition = EditorGUILayout.BeginScrollView(_scrollViewPosition); - { - drawContent(); - } - EditorGUILayout.EndScrollView(); - - if (GUI.changed) - { - _preferences.Save(); - } - } - - void drawHeader() - { - foreach (var drawer in _preferencesDrawers) - { - try - { - drawer.DrawHeader(_preferences); - } - catch (Exception ex) - { - drawException(ex); - } - } - } - - void drawContent() - { - if (_configException == null) - { - for (int i = 0; i < _preferencesDrawers.Length; i++) - { - try - { - _preferencesDrawers[i].DrawContent(_preferences); - } - catch (Exception ex) - { - drawException(ex); - } - - if (i < _preferencesDrawers.Length - 1) - { - EditorGUILayout.Space(); - } - } - } - else - { - drawException(_configException); - } - } - - static void drawException(Exception exception) - { - var style = new GUIStyle(GUI.skin.label); - style.wordWrap = true; - style.normal.textColor = Color.red; - - if (Event.current.alt) - { - EditorGUILayout.LabelField(exception.ToString(), style); - } - else - { - EditorGUILayout.LabelField(exception.Message, style); - } - - EditorGUILayout.Space(); - EditorGUILayout.LabelField("Please make sure the properties files are set up correctly."); - } - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs b/src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs deleted file mode 100644 index 344ebcfc..00000000 --- a/src/DesperateDevs.Unity.Editor/src/GUI/Styles.cs +++ /dev/null @@ -1,32 +0,0 @@ -using UnityEngine; - -namespace DesperateDevs.Unity.Editor { - - public static class Styles { - - static GUIStyle _sectionHeader; - - public static GUIStyle sectionHeader { - get { - if (_sectionHeader == null) { - _sectionHeader = new GUIStyle("OL Title"); - } - - return _sectionHeader; - } - } - - static GUIStyle _sectionContent; - - public static GUIStyle sectionContent { - get { - if (_sectionContent == null) { - _sectionContent = new GUIStyle("OL Box"); - _sectionContent.stretchHeight = false; - } - - return _sectionContent; - } - } - } -} diff --git a/src/DesperateDevs.Unity.Editor/src/Graph.cs b/src/DesperateDevs.Unity.Editor/src/Graph.cs index ecf9b241..d5ad472e 100644 --- a/src/DesperateDevs.Unity.Editor/src/Graph.cs +++ b/src/DesperateDevs.Unity.Editor/src/Graph.cs @@ -1,129 +1,182 @@ -ο»Ώusing System.Linq; -using UnityEditor; +ο»Ώusing UnityEditor; using UnityEngine; -namespace DesperateDevs.Unity.Editor { - - public class Graph { - - public float xBorder = 48; - public float yBorder = 20; - public int rightLinePadding = -15; - public string labelFormat = "{0:0.0}"; - public string axisFormat = "{0:0.0}"; - public int gridLines = 1; - public float axisRounding = 1f; - public float anchorRadius = 1f; - public Color lineColor = Color.magenta; +namespace DesperateDevs.Unity.Editor +{ + public class Graph + { + public float BorderX = 48; + public float BorderY = 20; + public int RightLinePadding = -15; + public string LabelFormat = "{0:0.0}"; + public string AxisFormat = "{0:0.0}"; + public int GridLines = 1; + public float AxisRounding = 1f; + public float AnchorRadius = 1f; + public float PointScale = 1f; + public float SelectedPointScale = 3f; + public float LineWidth = 2f; + public Color GridLinesColor = Color.gray; + public Color LineColor = Color.red; + public Color AvgLineColor = Color.yellow; + public Color PointColor = Color.red; readonly GUIStyle _labelTextStyle; readonly GUIStyle _centeredStyle; - readonly Vector3[] _cachedLinePointVerticies; + readonly Vector3[] _cachedLinePointVertices; readonly Vector3[] _linePoints; - public Graph(int dataLength) { - _labelTextStyle = new GUIStyle(GUI.skin.label); - _labelTextStyle.alignment = TextAnchor.UpperRight; - _centeredStyle = new GUIStyle(); - _centeredStyle.alignment = TextAnchor.UpperCenter; - _centeredStyle.normal.textColor = Color.white; + public Graph(int dataLength) + { + _labelTextStyle = new GUIStyle(GUI.skin.label) + { + alignment = TextAnchor.UpperRight + }; + _centeredStyle = new GUIStyle + { + alignment = TextAnchor.UpperCenter, + normal = + { + textColor = Color.white + } + }; _linePoints = new Vector3[dataLength]; - _cachedLinePointVerticies = new[] { - new Vector3(-1, 1, 0) * anchorRadius, - new Vector3(1, 1, 0) * anchorRadius, - new Vector3(1, -1, 0) * anchorRadius, - new Vector3(-1, -1, 0) * anchorRadius, + _cachedLinePointVertices = new[] + { + new Vector3(-1, 1, 0) * AnchorRadius, + new Vector3(1, 1, 0) * AnchorRadius, + new Vector3(1, -1, 0) * AnchorRadius, + new Vector3(-1, -1, 0) * AnchorRadius, }; } - public void Draw(float[] data, float height) { + public void Draw(float[] data, float height) + { var rect = GUILayoutUtility.GetRect(EditorGUILayout.GetControlRect().width, height); - var top = rect.y + yBorder; - var floor = rect.y + rect.height - yBorder; + var top = rect.y + BorderY; + var floor = rect.y + rect.height - BorderY; var availableHeight = floor - top; - var max = data.Length != 0 ? data.Max() : 0f; - if (max % axisRounding != 0) { - max = max + axisRounding - (max % axisRounding); + + var min = 0f; + var max = 0f; + var avg = 0f; + + if (data.Length > 0) + { + min = float.MaxValue; + max = float.MinValue; + foreach (var value in data) + { + if (value < min) min = value; + if (value > max) max = value; + avg += value; + } + + avg /= data.Length; } - drawGridLines(top, rect.width, availableHeight, max); - drawAvg(data, top, floor, rect.width, availableHeight, max); - drawLine(data, floor, rect.width, availableHeight, max); + if (min % AxisRounding != 0) + min = min < 0 + ? min - AxisRounding - min % AxisRounding + : min - min % AxisRounding; + + if (max % AxisRounding != 0) + max = max > 0 + ? max + AxisRounding - max % AxisRounding + : max - max % AxisRounding; + + var range = max - min; + DrawGridLines(top, rect.width, availableHeight, min, range); + DrawAvg(floor, rect.width, availableHeight, min, range, avg); + DrawLine(data, floor, rect.width, availableHeight, min, range); } - void drawGridLines(float top, float width, float availableHeight, float max) { + void DrawGridLines(float top, float width, float availableHeight, float min, float range) + { var handleColor = Handles.color; - Handles.color = Color.grey; - var n = gridLines + 1; + Handles.color = GridLinesColor; + + var n = GridLines + 1; var lineSpacing = availableHeight / n; - for (int i = 0; i <= n; i++) { - var lineY = top + (lineSpacing * i); + for (var i = 0; i <= n; i++) + { + var lineY = top + lineSpacing * i; Handles.DrawLine( - new Vector2(xBorder, lineY), - new Vector2(width - rightLinePadding, lineY) + new Vector2(BorderX, lineY), + new Vector2(width - RightLinePadding, lineY) ); GUI.Label( - new Rect(0, lineY - 8, xBorder - 2, 50), - string.Format(axisFormat, max * (1f - ((float)i / (float)n))), + new Rect(0, lineY - 8, BorderX - 2, 50), + string.Format(AxisFormat, min + range * (1f - i / (float)n)), _labelTextStyle ); } + Handles.color = handleColor; } - void drawAvg(float[] data, float top, float floor, float width, float availableHeight, float max) { + void DrawAvg(float floor, float width, float availableHeight, float min, float range, float avg) + { var handleColor = Handles.color; - Handles.color = Color.yellow; + Handles.color = AvgLineColor; - var avg = data.Average(); - var lineY = floor - (availableHeight * (avg / max)); + var lineY = floor + availableHeight * (min / range) - availableHeight * (avg / range); Handles.DrawLine( - new Vector2(xBorder, lineY), - new Vector2(width - rightLinePadding, lineY) + new Vector2(BorderX, lineY), + new Vector2(width - RightLinePadding, lineY) ); + Handles.color = handleColor; } - void drawLine(float[] data, float floor, float width, float availableHeight, float max) { - var lineWidth = (float)(width - xBorder - rightLinePadding) / data.Length; + void DrawLine(float[] data, float floor, float width, float availableHeight, float min, float range) + { var handleColor = Handles.color; - var labelRect = new Rect(); - Vector2 newLine; - bool mousePositionDiscovered = false; - float mouseHoverDataValue = 0; - float linePointScale; - Handles.color = lineColor; Handles.matrix = Matrix4x4.identity; HandleUtility.handleMaterial.SetPass(0); - for (int i = 0; i < data.Length; i++) { + + var lineWidth = (width - BorderX - RightLinePadding) / data.Length; + var labelRect = new Rect(); + var mousePositionDiscovered = false; + var mouseHoverDataValue = 0f; + for (var i = 0; i < data.Length; i++) + { var value = data[i]; - var lineTop = floor - (availableHeight * (value / max)); - newLine = new Vector2(xBorder + (lineWidth * i), lineTop); + var lineTop = floor + availableHeight * (min / range) - availableHeight * (value / range); + var newLine = new Vector2(BorderX + lineWidth * i, lineTop); _linePoints[i] = new Vector3(newLine.x, newLine.y, 0); - linePointScale = 1f; - if (!mousePositionDiscovered) { - var anchorPosRadius3 = anchorRadius * 3; - var anchorPosRadius6 = anchorRadius * 6; - var anchorPos = newLine - (Vector2.up * 0.5f); + var linePointScale = PointScale; + if (!mousePositionDiscovered) + { + var anchorPosRadius3 = AnchorRadius * 3; + var anchorPosRadius6 = AnchorRadius * 6; + var anchorPos = newLine - Vector2.up * 0.5f; labelRect = new Rect(anchorPos.x - anchorPosRadius3, anchorPos.y - anchorPosRadius3, anchorPosRadius6, anchorPosRadius6); - if (labelRect.Contains(Event.current.mousePosition)) { + if (labelRect.Contains(Event.current.mousePosition)) + { mousePositionDiscovered = true; mouseHoverDataValue = value; - linePointScale = 3f; + linePointScale = SelectedPointScale; } } + + Handles.color = PointColor; Handles.matrix = Matrix4x4.TRS(_linePoints[i], Quaternion.identity, Vector3.one * linePointScale); - Handles.DrawAAConvexPolygon(_cachedLinePointVerticies); + Handles.DrawAAConvexPolygon(_cachedLinePointVertices); } + + Handles.color = LineColor; Handles.matrix = Matrix4x4.identity; - Handles.DrawAAPolyLine(2f, data.Length, _linePoints); + Handles.DrawAAPolyLine(LineWidth, data.Length, _linePoints); - if (mousePositionDiscovered) { + if (mousePositionDiscovered) + { labelRect.y -= 16; labelRect.width += 50; labelRect.x -= 25; - GUI.Label(labelRect, string.Format(labelFormat, mouseHoverDataValue), _centeredStyle); + GUI.Label(labelRect, string.Format(LabelFormat, mouseHoverDataValue), _centeredStyle); } + Handles.color = handleColor; } } diff --git a/src/DesperateDevs.Unity.Editor/src/IPreferencesDrawer.cs b/src/DesperateDevs.Unity.Editor/src/IPreferencesDrawer.cs new file mode 100644 index 00000000..51c4b0a0 --- /dev/null +++ b/src/DesperateDevs.Unity.Editor/src/IPreferencesDrawer.cs @@ -0,0 +1,13 @@ +ο»Ώusing DesperateDevs.Serialization; + +namespace DesperateDevs.Unity.Editor +{ + public interface IPreferencesDrawer + { + string Title { get; } + + void Initialize(Preferences preferences); + void DrawHeader(Preferences preferences); + void DrawContent(Preferences preferences); + } +} diff --git a/src/DesperateDevs.Unity.Editor/src/PreferencesWindow.cs b/src/DesperateDevs.Unity.Editor/src/PreferencesWindow.cs new file mode 100644 index 00000000..3b3137a4 --- /dev/null +++ b/src/DesperateDevs.Unity.Editor/src/PreferencesWindow.cs @@ -0,0 +1,119 @@ +using System; +using System.Linq; +using DesperateDevs.Serialization; +using UnityEditor; +using UnityEngine; + +namespace DesperateDevs.Unity.Editor +{ + public class PreferencesWindow : EditorWindow + { + public Preferences Preferences => _preferences; + + string _propertiesPath; + string _userPropertiesPath; + string[] _preferencesDrawerNames; + + Preferences _preferences; + IPreferencesDrawer[] _preferencesDrawers; + Vector2 _scrollViewPosition; + + Exception _configException; + + public void Initialize(string propertiesPath, string userPropertiesPath, params string[] preferencesDrawerNames) + { + _propertiesPath = propertiesPath; + _userPropertiesPath = userPropertiesPath; + _preferencesDrawerNames = preferencesDrawerNames; + } + + void Initialize() + { + try + { + _preferences = new Preferences(_propertiesPath, _userPropertiesPath); + var availableDrawers = TypeCache.GetTypesDerivedFrom(); + _preferencesDrawers = _preferencesDrawerNames + .Select(drawerName => availableDrawers.SingleOrDefault(type => type.FullName == drawerName)) + .Where(type => type != null) + .Select(type => (IPreferencesDrawer)Activator.CreateInstance(type)) + .ToArray(); + + foreach (var drawer in _preferencesDrawers) + drawer.Initialize(_preferences); + + _preferences.Save(); + } + catch (Exception exception) + { + _preferencesDrawers = Array.Empty(); + _configException = exception; + } + } + + void OnGUI() + { + if (_preferencesDrawers == null) + Initialize(); + + DrawHeader(); + _scrollViewPosition = EditorGUILayout.BeginScrollView(_scrollViewPosition); + { + DrawContent(); + } + EditorGUILayout.EndScrollView(); + + if (GUI.changed) + _preferences.Save(); + } + + void DrawHeader() + { + foreach (var drawer in _preferencesDrawers) + { + try + { + drawer.DrawHeader(_preferences); + } + catch (Exception exception) + { + DrawException(exception); + } + } + } + + void DrawContent() + { + if (_configException == null) + { + for (var i = 0; i < _preferencesDrawers.Length; i++) + { + try + { + _preferencesDrawers[i].DrawContent(_preferences); + } + catch (Exception exception) + { + DrawException(exception); + } + + if (i < _preferencesDrawers.Length - 1) + { + EditorGUILayout.Space(); + } + } + } + else + { + DrawException(_configException); + } + } + + static void DrawException(Exception exception) + { + EditorGUILayout.LabelField(Event.current.alt ? exception.ToString() : exception.Message, Styles.ErrorLabel); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Please make sure the properties files are set up correctly."); + } + } +} diff --git a/src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs b/src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs index 01490189..416d046f 100644 --- a/src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs +++ b/src/DesperateDevs.Unity.Editor/src/ScriptingDefineSymbols.cs @@ -1,47 +1,53 @@ using System; -using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using UnityEditor; -namespace DesperateDevs.Unity.Editor { - - public class ScriptingDefineSymbols { - - public Dictionary buildTargetToDefSymbol { get { return _buildTargetToDefSymbol; } } - - readonly Dictionary _buildTargetToDefSymbol; +namespace DesperateDevs.Unity.Editor +{ + public class ScriptingDefineSymbols + { + public static BuildTargetGroup[] BuildTargetGroups + { + get + { + var enumType = typeof(BuildTargetGroup); + return Enum.GetNames(enumType) + .Where(name => !Attribute.IsDefined(enumType.GetField(name), typeof(ObsoleteAttribute))) + .Select(name => (BuildTargetGroup)Enum.Parse(enumType, name)) + .Where(buildTarget => buildTarget != BuildTargetGroup.Unknown) + .ToArray(); + } + } - public ScriptingDefineSymbols() { - _buildTargetToDefSymbol = Enum.GetValues(typeof(BuildTargetGroup)) - .Cast() - .Where(buildTargetGroup => buildTargetGroup != BuildTargetGroup.Unknown) - .Where(buildTargetGroup => !isBuildTargetObsolete(buildTargetGroup)) - .Distinct() - .ToDictionary( - buildTargetGroup => buildTargetGroup, - PlayerSettings.GetScriptingDefineSymbolsForGroup - ); + public void Add(string defineSymbol, BuildTargetGroup buildTargetGroup) + { + var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); + PlayerSettings.SetScriptingDefineSymbolsForGroup( + buildTargetGroup, + Regex.Replace(symbols, $@"\b{defineSymbol}\b", string.Empty) + ";" + defineSymbol + ); } - public void AddDefineSymbol(string defineSymbol) { - foreach (var kv in _buildTargetToDefSymbol) { - PlayerSettings.SetScriptingDefineSymbolsForGroup( - kv.Key, kv.Value.Replace(defineSymbol, string.Empty) + "," + defineSymbol - ); - } + public void AddForAll(string defineSymbol) + { + foreach (var buildTargetGroup in BuildTargetGroups) + Add(defineSymbol, buildTargetGroup); } - public void RemoveDefineSymbol(string defineSymbol) { - foreach (var kv in _buildTargetToDefSymbol) { - PlayerSettings.SetScriptingDefineSymbolsForGroup( - kv.Key, kv.Value.Replace(defineSymbol, string.Empty) - ); - } + public void Remove(string defineSymbol, BuildTargetGroup buildTargetGroup) + { + var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); + PlayerSettings.SetScriptingDefineSymbolsForGroup( + buildTargetGroup, + Regex.Replace(symbols, $@"\b{defineSymbol}\b", string.Empty) + ); } - bool isBuildTargetObsolete(BuildTargetGroup buildTargetGroup) { - var fieldInfo = buildTargetGroup.GetType().GetField(buildTargetGroup.ToString()); - return Attribute.IsDefined(fieldInfo, typeof(ObsoleteAttribute)); + public void RemoveForAll(string defineSymbol) + { + foreach (var buildTargetGroup in BuildTargetGroups) + Remove(defineSymbol, buildTargetGroup); } } } diff --git a/src/DesperateDevs.Unity.Editor/src/Styles.cs b/src/DesperateDevs.Unity.Editor/src/Styles.cs new file mode 100644 index 00000000..814627c4 --- /dev/null +++ b/src/DesperateDevs.Unity.Editor/src/Styles.cs @@ -0,0 +1,41 @@ +using UnityEngine; + +namespace DesperateDevs.Unity.Editor +{ + public static class Styles + { + static GUIStyle _sectionHeader; + + public static GUIStyle SectionHeader => _sectionHeader ??= new GUIStyle("OL Title"); + + static GUIStyle _sectionContent; + + public static GUIStyle SectionContent => + _sectionContent ??= new GUIStyle("OL Box") + { + stretchHeight = false + }; + + static GUIStyle _errorLabel; + + public static GUIStyle ErrorLabel => + _errorLabel ??= new GUIStyle(GUI.skin.label) + { + wordWrap = true, + normal = + { + textColor = Color.red + } + }; + + static GUIStyle _toolbarSearchTextField; + + public static GUIStyle ToolbarSearchTextField => + _toolbarSearchTextField ??= GUI.skin.FindStyle("ToolbarSeachTextField"); + + static GUIStyle _toolbarSearchCancelButtonStyle; + + public static GUIStyle ToolbarSearchCancelButtonStyle => + _toolbarSearchCancelButtonStyle ??= GUI.skin.FindStyle("ToolbarSeachCancelButton"); + } +} diff --git a/src/DesperateDevs.Unity/src/CoroutineRunner.cs b/src/DesperateDevs.Unity/src/CoroutineRunner.cs index 1f343064..97da19e1 100644 --- a/src/DesperateDevs.Unity/src/CoroutineRunner.cs +++ b/src/DesperateDevs.Unity/src/CoroutineRunner.cs @@ -2,37 +2,35 @@ using System.Collections; using UnityEngine; -namespace DesperateDevs.Unity { - - public class CoroutineRunner : MonoBehaviour { - - static CoroutineRunner _coroutineRunner; - - static CoroutineRunner runner { - get { - if (_coroutineRunner == null) { - _coroutineRunner = new GameObject("Coroutine Runner").AddComponent(); - DontDestroyOnLoad(_coroutineRunner); +namespace DesperateDevs.Unity +{ + public class CoroutineRunner : MonoBehaviour + { + static CoroutineRunner Instance + { + get + { + if (_instance == null) + { + _instance = new GameObject(nameof(CoroutineRunner)).AddComponent(); + DontDestroyOnLoad(_instance); } - return _coroutineRunner; + return _instance; } } - public static Coroutine Run(IEnumerator enumerator, Action onComplete = null) { - return runner.StartCoroutine(enumerator, onComplete); - } + static CoroutineRunner _instance; - public static void CancelCoroutine(Coroutine coroutine) { - runner.StopCoroutine(coroutine); - } + public static Coroutine Run(IEnumerator enumerator) => Instance.StartCoroutine(enumerator); - public Coroutine StartCoroutine(IEnumerator enumerator, Action onComplete = null) { - return StartCoroutine(new CoroutineWithData().Wrap(enumerator, onComplete)); - } + public static Coroutine Run(IEnumerator enumerator, Action onComplete) => + Instance.StartCoroutine(new CoroutineWithResult().Wrap(enumerator, onComplete)); - void OnDestroy() { - _coroutineRunner = null; - } + public static void Stop(Coroutine coroutine) => Instance.StopCoroutine(coroutine); + + public static void StopAll() => Instance.StopAllCoroutines(); + + void OnDestroy() => _instance = null; } } diff --git a/src/DesperateDevs.Unity/src/CoroutineWithData.cs b/src/DesperateDevs.Unity/src/CoroutineWithData.cs deleted file mode 100644 index c6450c71..00000000 --- a/src/DesperateDevs.Unity/src/CoroutineWithData.cs +++ /dev/null @@ -1,21 +0,0 @@ -ο»Ώusing System; -using System.Collections; - -namespace DesperateDevs.Unity { - - public class CoroutineWithData { - - public T result; - - public IEnumerator Wrap(IEnumerator enumerator, Action onComplete) { - while (enumerator.MoveNext()) { - yield return enumerator.Current; - } - - result = (T)enumerator.Current; - if (onComplete != null) { - onComplete(result); - } - } - } -} diff --git a/src/DesperateDevs.Unity/src/CoroutineWithResult.cs b/src/DesperateDevs.Unity/src/CoroutineWithResult.cs new file mode 100644 index 00000000..25049051 --- /dev/null +++ b/src/DesperateDevs.Unity/src/CoroutineWithResult.cs @@ -0,0 +1,19 @@ +ο»Ώusing System; +using System.Collections; + +namespace DesperateDevs.Unity +{ + public class CoroutineWithResult + { + public T Result; + + public IEnumerator Wrap(IEnumerator enumerator, Action onComplete) + { + while (enumerator.MoveNext()) + yield return enumerator.Current; + + Result = (T)enumerator.Current; + onComplete?.Invoke(Result); + } + } +} diff --git a/src/DesperateDevs.Unity/src/DesperateDevs.Unity.csproj b/src/DesperateDevs.Unity/src/DesperateDevs.Unity.csproj index 47950b02..a37244bc 100644 --- a/src/DesperateDevs.Unity/src/DesperateDevs.Unity.csproj +++ b/src/DesperateDevs.Unity/src/DesperateDevs.Unity.csproj @@ -2,6 +2,7 @@ $(DefaultTargetFramework) + 1.0.0 diff --git a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/DesperateDevs.Utils.Tests.Project1.csproj b/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/DesperateDevs.Utils.Tests.Project1.csproj deleted file mode 100644 index a31f91e6..00000000 --- a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/DesperateDevs.Utils.Tests.Project1.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - $(DefaultNetTargetFramework) - false - - - diff --git a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/TestClass.cs b/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/TestClass.cs deleted file mode 100644 index a65e4a68..00000000 --- a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project1/TestClass.cs +++ /dev/null @@ -1,4 +0,0 @@ -ο»Ώnamespace DesperateDevs.Utils.Tests.Project1 -{ - public class TestClass { } -} diff --git a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/DesperateDevs.Utils.Tests.Project2.csproj b/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/DesperateDevs.Utils.Tests.Project2.csproj deleted file mode 100644 index a330eb2b..00000000 --- a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/DesperateDevs.Utils.Tests.Project2.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - $(DefaultNetTargetFramework) - false - - - - - - - diff --git a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/TestClass.cs b/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/TestClass.cs deleted file mode 100644 index ff946875..00000000 --- a/src/DesperateDevs.Utils/fixtures/DesperateDevs.Utils.Tests.Project2/TestClass.cs +++ /dev/null @@ -1,7 +0,0 @@ -ο»Ώnamespace DesperateDevs.Utils.Tests.Project2 -{ - public class TestClass - { - public DesperateDevs.Utils.Tests.Project1.TestClass Value = new(); - } -} diff --git a/src/DesperateDevs.Utils/src/Caching/ObjectCache.cs b/src/DesperateDevs.Utils/src/Caching/ObjectCache.cs deleted file mode 100644 index 416d2204..00000000 --- a/src/DesperateDevs.Utils/src/Caching/ObjectCache.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace DesperateDevs.Utils { - - public class ObjectCache { - - readonly Dictionary _objectPools; - - public ObjectCache() { - _objectPools = new Dictionary(); - } - - public ObjectPool GetObjectPool() where T : new() { - object objectPool; - var type = typeof(T); - if (!_objectPools.TryGetValue(type, out objectPool)) { - objectPool = new ObjectPool(() => new T()); - _objectPools.Add(type, objectPool); - } - - return ((ObjectPool)objectPool); - } - - public T Get() where T : new() { - return GetObjectPool().Get(); - } - - public void Push(T obj) where T : new() { - GetObjectPool().Push(obj); - } - - public void RegisterCustomObjectPool(ObjectPool objectPool) { - _objectPools.Add(typeof(T), objectPool); - } - - public void Reset() { - _objectPools.Clear(); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Caching/ObjectPool.cs b/src/DesperateDevs.Utils/src/Caching/ObjectPool.cs deleted file mode 100644 index 2c0f96dc..00000000 --- a/src/DesperateDevs.Utils/src/Caching/ObjectPool.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace DesperateDevs.Utils -{ - public class ObjectPool - { - readonly Func _factoryMethod; - readonly Action _resetMethod; - readonly Stack _objectPool; - - public ObjectPool(Func factoryMethod, Action resetMethod = null) - { - _factoryMethod = factoryMethod; - _resetMethod = resetMethod; - _objectPool = new Stack(); - } - - public T Get() => _objectPool.Count == 0 - ? _factoryMethod() - : _objectPool.Pop(); - - public void Push(T obj) - { - _resetMethod?.Invoke(obj); - _objectPool.Push(obj); - } - - public T[] Drain() - { - var objects = _objectPool.ToArray(); - _objectPool.Clear(); - return objects; - } - } -} diff --git a/src/DesperateDevs.Utils/src/ConsoleColors.cs b/src/DesperateDevs.Utils/src/ConsoleColors.cs deleted file mode 100644 index e8216295..00000000 --- a/src/DesperateDevs.Utils/src/ConsoleColors.cs +++ /dev/null @@ -1,26 +0,0 @@ -ο»Ώusing System; -using System.Collections.Generic; -using DesperateDevs.Logging; - -namespace DesperateDevs.Utils -{ - public class ConsoleColors - { - public ConsoleColor highlightedBackground { get; set; } = ConsoleColor.White; - public ConsoleColor highlightedForeground { get; set; } = ConsoleColor.Black; - - public readonly Dictionary logLevelColors; - - public ConsoleColors() - { - logLevelColors = new Dictionary { - { LogLevel.Trace, ConsoleColor.Cyan }, - { LogLevel.Debug, ConsoleColor.White }, - { LogLevel.Info, ConsoleColor.White }, - { LogLevel.Warn, ConsoleColor.DarkYellow }, - { LogLevel.Error, ConsoleColor.Red }, - { LogLevel.Fatal, ConsoleColor.DarkRed } - }; - } - } -} diff --git a/src/DesperateDevs.Utils/src/DesperateDevs.Utils.csproj b/src/DesperateDevs.Utils/src/DesperateDevs.Utils.csproj deleted file mode 100644 index 2f97ef00..00000000 --- a/src/DesperateDevs.Utils/src/DesperateDevs.Utils.csproj +++ /dev/null @@ -1,11 +0,0 @@ -ο»Ώ - - - $(DefaultTargetFramework) - - - - - - - diff --git a/src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs b/src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs deleted file mode 100644 index 29f2c699..00000000 --- a/src/DesperateDevs.Utils/src/Extensions/AppDomainExtension.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; - -namespace DesperateDevs.Utils { - - public static class AppDomainExtension { - - public static Type[] GetAllTypes(this AppDomain appDomain) { - return GetAllTypes(appDomain.GetAssemblies()); - } - - public static Type[] GetAllTypes(this IEnumerable assemblies) { - var types = new List(); - foreach (var assembly in assemblies) { - try { - types.AddRange(assembly.GetTypes()); - } catch (ReflectionTypeLoadException ex) { - types.AddRange(ex.Types.Where(type => type != null)); - } - } - - return types.ToArray(); - } - - public static Type[] GetNonAbstractTypes(this AppDomain appDomain) { - return GetNonAbstractTypes(GetAllTypes(appDomain)); - } - - public static Type[] GetNonAbstractTypes(this Type[] types) { - return types - .Where(type => !type.IsAbstract) - .Where(type => type.ImplementsInterface()) - .ToArray(); - } - - public static T[] GetInstancesOf(this AppDomain appDomain) { - return GetInstancesOf(GetNonAbstractTypes(appDomain)); - } - - public static T[] GetInstancesOf(this Type[] types) { - return GetNonAbstractTypes(types) - .Select(type => (T)Activator.CreateInstance(type)) - .ToArray(); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs b/src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs deleted file mode 100644 index ebc7b23c..00000000 --- a/src/DesperateDevs.Utils/src/Extensions/DictionaryExtension.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace DesperateDevs.Utils { - - public static class DictionaryExtension { - - public static Dictionary Merge(this Dictionary dictionary, - params Dictionary[] dictionaries) { - return dictionaries.Aggregate(dictionary, (current, dict) => current.Union(dict).ToDictionary(kv => kv.Key, kv => kv.Value)); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs b/src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs deleted file mode 100644 index 121069d0..00000000 --- a/src/DesperateDevs.Utils/src/Extensions/InterfaceTypeExtension.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace DesperateDevs.Utils { - - public static class InterfaceTypeExtension { - - public static bool ImplementsInterface(this Type type) { - return !type.IsInterface && type.GetInterface(typeof(T).FullName) != null; - } - } -} diff --git a/src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs b/src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs deleted file mode 100644 index dbbf1b53..00000000 --- a/src/DesperateDevs.Utils/src/Extensions/SerializationTypeExtension.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; - -namespace DesperateDevs.Utils { - - public static class SerializationTypeExtension { - - /// Generates a simplified type string for the specified type that - /// can be compiled. This is useful for code generation that will - /// produce compilable source code. - /// e.g. int instead of System.Int32 - /// e.g. System.Collections.Generic.Dictionary instead of - /// System.Collections.Generic.Dictionary`2[System.Int32,System.String] - public static string ToCompilableString(this Type type) { - if (_builtInTypesToString.ContainsKey(type.FullName)) { - return _builtInTypesToString[type.FullName]; - } - if (type.IsGenericType) { - var genericMainType = type.FullName.Split('`')[0]; - var genericArguments = type.GetGenericArguments().Select( - argType => argType.ToCompilableString() - ).ToArray(); - return genericMainType + - "<" + string.Join(", ", genericArguments) + ">"; - } - if (type.IsArray) { - return type.GetElementType().ToCompilableString() + - "[" + new string(',', type.GetArrayRank() - 1) + "]"; - } - if (type.IsNested) { - return type.FullName.Replace('+', '.'); - } - - return type.FullName; - } - - /// Tries to find and create a type based on the specified type string. - public static Type ToType(this string typeString) { - var fullTypeName = generateTypeString(typeString); - var type = Type.GetType(fullTypeName); - if (type != null) { - return type; - } - - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { - type = assembly.GetType(fullTypeName); - if (type != null) { - return type; - } - } - - return null; - } - - public static string ShortTypeName(this string fullTypeName) { - var split = fullTypeName.Split('.'); - return split[split.Length - 1]; - } - - public static string RemoveDots(this string fullTypeName) { - return fullTypeName.Replace(".", string.Empty); - } - - static string generateTypeString(string typeString) { - if (_builtInTypeStrings.ContainsKey(typeString)) { - typeString = _builtInTypeStrings[typeString]; - } else { - typeString = generateGenericArguments(typeString); - typeString = generateArray(typeString); - } - - return typeString; - } - - static string generateGenericArguments(string typeString) { - const string genericArgsPattern = @"<(?.*)>"; - var separator = new[] { ", " }; - typeString = Regex.Replace(typeString, genericArgsPattern, - m => { - var ts = generateTypeString(m.Groups["arg"].Value); - var argsCount = ts.Split(separator, StringSplitOptions.None).Length; - - return "`" + argsCount + "[" + ts + "]"; - }); - - return typeString; - } - - static string generateArray(string typeString) { - const string arrayPattern = @"(?[^\[]*)(?\[,*\])"; - typeString = Regex.Replace(typeString, arrayPattern, - m => { - var type = generateTypeString(m.Groups["type"].Value); - var rank = m.Groups["rank"].Value; - return type + rank; - }); - - return typeString; - } - - static readonly Dictionary _builtInTypesToString = new Dictionary { - { "System.Boolean", "bool" }, - { "System.Byte", "byte" }, - { "System.SByte", "sbyte" }, - { "System.Char", "char" }, - { "System.Decimal", "decimal" }, - { "System.Double", "double" }, - { "System.Single", "float" }, - { "System.Int32", "int" }, - { "System.UInt32", "uint" }, - { "System.Int64", "long" }, - { "System.UInt64", "ulong" }, - { "System.Object", "object" }, - { "System.Int16", "short" }, - { "System.UInt16", "ushort" }, - { "System.String", "string" }, - { "System.Void", "void" } - }; - - static readonly Dictionary _builtInTypeStrings = new Dictionary { - { "bool", "System.Boolean" }, - { "byte", "System.Byte" }, - { "sbyte", "System.SByte" }, - { "char", "System.Char" }, - { "decimal", "System.Decimal" }, - { "double", "System.Double" }, - { "float", "System.Single" }, - { "int", "System.Int32" }, - { "uint", "System.UInt32" }, - { "long", "System.Int64" }, - { "ulong", "System.UInt64" }, - { "object", "System.Object" }, - { "short", "System.Int16" }, - { "ushort", "System.UInt16" }, - { "string", "System.String" }, - { "void", "System.Void" } - }; - } -} diff --git a/src/DesperateDevs.Utils/src/Extensions/StringExtension.cs b/src/DesperateDevs.Utils/src/Extensions/StringExtension.cs deleted file mode 100644 index 7563badb..00000000 --- a/src/DesperateDevs.Utils/src/Extensions/StringExtension.cs +++ /dev/null @@ -1,79 +0,0 @@ -ο»Ώusing System; -using System.Linq; - -namespace DesperateDevs.Utils { - - public static class StringExtension { - - public static string UppercaseFirst(this string str) { - if (string.IsNullOrEmpty(str)) { - return str; - } - - return char.ToUpper(str[0]) + str.Substring(1); - } - - public static string LowercaseFirst(this string str) { - if (string.IsNullOrEmpty(str)) { - return str; - } - - return char.ToLower(str[0]) + str.Substring(1); - } - - public static string ToUnixLineEndings(this string str) { - return str.Replace("\r\n", "\n").Replace("\r", "\n"); - } - - public static string ToUnixPath(this string str) { - return str.Replace("\\", "/"); - } - - public static string ToCSV(this string[] values) { - return string.Join(", ", values - .Where(value => !string.IsNullOrEmpty(value)) - .Select(value => value.Trim()) - .ToArray() - ); - } - - public static string[] ArrayFromCSV(this string values) { - return values - .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) - .Select(value => value.Trim()) - .ToArray(); - } - - public static string ToSpacedCamelCase(this string text) { - var sb = new System.Text.StringBuilder(text.Length * 2); - sb.Append(char.ToUpper(text[0])); - for (int i = 1; i < text.Length; i++) { - if (char.IsUpper(text[i]) && text[i - 1] != ' ') { - sb.Append(' '); - } - - sb.Append(text[i]); - } - - return sb.ToString(); - } - - public static string MakePathRelativeTo(this string path, string currentDirectory) { - currentDirectory = CreateUri(currentDirectory); - path = CreateUri(path); - if (path.StartsWith(currentDirectory)) { - path = path.Replace(currentDirectory, string.Empty); - if (path.StartsWith("/")) { - path = path.Substring(1); - } - } - - return path; - } - - public static string CreateUri(this string path) { - var uri = new Uri(path); - return Uri.UnescapeDataString(uri.AbsolutePath + uri.Fragment); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs b/src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs deleted file mode 100644 index f65e276d..00000000 --- a/src/DesperateDevs.Utils/src/Reflection/AssemblyResolver.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using DesperateDevs.Logging; - -namespace DesperateDevs.Utils { - - public partial class AssemblyResolver { - - readonly Logger _logger = fabl.GetLogger(typeof(AssemblyResolver).Name); - - public Assembly[] assemblies { get { return _assemblies.ToArray(); } } - - readonly bool _reflectionOnly; - readonly string[] _basePaths; - readonly HashSet _assemblies; - readonly AppDomain _appDomain; - - public AssemblyResolver(bool reflectionOnly, params string[] basePaths) { - _reflectionOnly = reflectionOnly; - _basePaths = basePaths; - _assemblies = new HashSet(); - _appDomain = AppDomain.CurrentDomain; - - if (reflectionOnly) { - _appDomain.ReflectionOnlyAssemblyResolve += onReflectionOnlyAssemblyResolve; - } else { - _appDomain.AssemblyResolve += onAssemblyResolve; - } - } - - public void Load(string path) { - if (_reflectionOnly) { - _logger.Debug(_appDomain + " reflect: " + path); - resolveAndLoad(path, Assembly.ReflectionOnlyLoadFrom, false); - } else { - _logger.Debug(_appDomain + " load: " + path); - resolveAndLoad(path, Assembly.LoadFrom, false); - } - } - - public void Close() { - if (_reflectionOnly) { - _appDomain.ReflectionOnlyAssemblyResolve -= onReflectionOnlyAssemblyResolve; - } else { - _appDomain.AssemblyResolve -= onAssemblyResolve; - } - } - - Assembly resolveAndLoad(string name, Func loadMethod, bool isDependency) { - Assembly assembly = null; - try { - if (isDependency) { - _logger.Debug(" ➜ Loading Dependency: " + name); - } else { - _logger.Debug(" ➜ Loading: " + name); - } - assembly = loadMethod(name); - addAssembly(assembly); - } catch (Exception) { - var path = resolvePath(name); - if (path != null) { - try { - assembly = loadMethod(path); - addAssembly(assembly); - } catch (BadImageFormatException) { - } - } - } - - return assembly; - } - - Assembly onAssemblyResolve(object sender, ResolveEventArgs args) { - return resolveAndLoad(args.Name, Assembly.LoadFrom, true); - } - - Assembly onReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) { - return resolveAndLoad(args.Name, Assembly.ReflectionOnlyLoadFrom, true); - } - - void addAssembly(Assembly assembly) { - _assemblies.Add(assembly); - } - - string resolvePath(string name) { - try { - var assemblyName = new AssemblyName(name).Name; - - if (!assemblyName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) && - !assemblyName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) { - assemblyName += ".dll"; - } - - foreach (var basePath in _basePaths) { - var path = basePath + Path.DirectorySeparatorChar + assemblyName; - if (File.Exists(path)) { - _logger.Debug(" ➜ Resolved: " + path); - return path; - } - } - } catch (FileLoadException) { - _logger.Debug(" Γ— Could not resolve: " + name); - } - - return null; - } - - public Type[] GetTypes() { - return _assemblies.ToArray().GetAllTypes(); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs b/src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs deleted file mode 100644 index 31f143fc..00000000 --- a/src/DesperateDevs.Utils/src/Reflection/AssemblyResolverStatic.cs +++ /dev/null @@ -1,59 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; - -namespace DesperateDevs.Utils { - - public partial class AssemblyResolver { - - public static AssemblyResolver LoadAssemblies(bool allDirectories, params string[] basePaths) { - var resolver = new AssemblyResolver(false, basePaths); - foreach (var file in getAssemblyFiles(allDirectories, basePaths)) { - resolver.Load(file); - } - - return resolver; - } - - public static Assembly[] GetAssembliesContainingType(bool allDirectories, params string[] basePaths) { - var resolver = new AssemblyResolver(true, basePaths); - foreach (var file in getAssemblyFiles(allDirectories, basePaths)) { - resolver.Load(file); - } - - var interfaceName = typeof(T).FullName; - var assemblies = resolver - .GetTypes() - .Where(type => type.GetInterface(interfaceName) != null) - .Select(type => type.Assembly) - .Distinct() - .ToArray(); - - resolver.Close(); - - return assemblies; - } - - public static AssemblyResolver LoadAssembliesContainingType(bool allDirectories, params string[] basePaths) { - var assemblies = GetAssembliesContainingType(allDirectories, basePaths); - - var resolver = new AssemblyResolver(false, basePaths); - foreach (var assembly in assemblies) { - resolver.Load(assembly.CodeBase); - } - - return resolver; - } - - static string[] getAssemblyFiles(bool allDirectories, params string[] basePaths) { - var patterns = new[] { "*.dll", "*.exe" }; - var files = new List(); - foreach (var pattern in patterns) { - files.AddRange(basePaths.SelectMany(s => Directory.GetFiles(s, pattern, allDirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly))); - } - - return files.ToArray(); - } - } -} diff --git a/src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs b/src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs deleted file mode 100644 index fb0dfad2..00000000 --- a/src/DesperateDevs.Utils/src/Reflection/AttributeInfo.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; - -namespace DesperateDevs.Utils { - - public class AttributeInfo { - - public readonly object attribute; - public readonly List memberInfos; - - public AttributeInfo(object attribute, List memberInfos) { - this.attribute = attribute; - this.memberInfos = memberInfos; - } - } -} diff --git a/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs b/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs deleted file mode 100644 index 48fdb07a..00000000 --- a/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfo.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Reflection; - -namespace DesperateDevs.Utils { - - public class PublicMemberInfo { - - public readonly Type type; - public readonly string name; - public readonly AttributeInfo[] attributes; - - readonly FieldInfo _fieldInfo; - readonly PropertyInfo _propertyInfo; - - public PublicMemberInfo(FieldInfo info) { - _fieldInfo = info; - type = _fieldInfo.FieldType; - name = _fieldInfo.Name; - attributes = getAttributes(_fieldInfo.GetCustomAttributes(false)); - } - - public PublicMemberInfo(PropertyInfo info) { - _propertyInfo = info; - type = _propertyInfo.PropertyType; - name = _propertyInfo.Name; - attributes = getAttributes(_propertyInfo.GetCustomAttributes(false)); - } - - public PublicMemberInfo(Type type, string name, AttributeInfo[] attributes = null) { - this.type = type; - this.name = name; - this.attributes = attributes; - } - - public object GetValue(object obj) { - return _fieldInfo != null - ? _fieldInfo.GetValue(obj) - : _propertyInfo.GetValue(obj, null); - } - - public void SetValue(object obj, object value) { - if (_fieldInfo != null) { - _fieldInfo.SetValue(obj, value); - } else { - _propertyInfo.SetValue(obj, value, null); - } - } - - static AttributeInfo[] getAttributes(object[] attributes) { - var infos = new AttributeInfo[attributes.Length]; - for (int i = 0; i < attributes.Length; i++) { - var attr = attributes[i]; - infos[i] = new AttributeInfo(attr, attr.GetType().GetPublicMemberInfos()); - } - - return infos; - } - } -} diff --git a/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs b/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs deleted file mode 100644 index 2f63f0c7..00000000 --- a/src/DesperateDevs.Utils/src/Reflection/PublicMemberInfoExtension.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace DesperateDevs.Utils { - - public static class PublicMemberInfoExtension { - - public static List GetPublicMemberInfos(this Type type) { - - const BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public; - - var fieldInfos = type.GetFields(bindingFlags); - var propertyInfos = type.GetProperties(bindingFlags); - var memberInfos = new List( - fieldInfos.Length + propertyInfos.Length - ); - - for (int i = 0; i < fieldInfos.Length; i++) { - memberInfos.Add(new PublicMemberInfo(fieldInfos[i])); - } - - for (int i = 0; i < propertyInfos.Length; i++) { - var propertyInfo = propertyInfos[i]; - if (propertyInfo.CanRead && propertyInfo.CanWrite && propertyInfo.GetIndexParameters().Length == 0) { - memberInfos.Add(new PublicMemberInfo(propertyInfo)); - } - } - - return memberInfos; - } - - public static object PublicMemberClone(this object obj) { - var clone = Activator.CreateInstance(obj.GetType()); - CopyPublicMemberValues(obj, clone); - return clone; - } - - public static T PublicMemberClone(this object obj) where T : new() { - var clone = new T(); - CopyPublicMemberValues(obj, clone); - return clone; - } - - public static void CopyPublicMemberValues(this object source, object target) { - var memberInfos = source.GetType().GetPublicMemberInfos(); - for (int i = 0; i < memberInfos.Count; i++) { - var info = memberInfos[i]; - info.SetValue(target, info.GetValue(source)); - } - } - } -} diff --git a/src/DesperateDevs.Utils/tests/AssemblyResolverTests.cs b/src/DesperateDevs.Utils/tests/AssemblyResolverTests.cs deleted file mode 100644 index a97a92fa..00000000 --- a/src/DesperateDevs.Utils/tests/AssemblyResolverTests.cs +++ /dev/null @@ -1,188 +0,0 @@ -ο»Ώusing System; -using System.IO; -using System.Linq; -using DesperateDevs.Tests; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class AssemblyResolverTests - { - static readonly string ProjectRoot = TestHelper.GetProjectRoot(); - - const string Project1AssemblyName = "DesperateDevs.Utils.Tests.Project1"; - const string Project2AssemblyName = "DesperateDevs.Utils.Tests.Project2"; - const string Project1AssemblyFile = Project1AssemblyName + ".dll"; - const string Project2AssemblyFile = Project2AssemblyName + ".dll"; - const string Project1ClassType = "DesperateDevs.Utils.Tests.Project1.TestClass"; - const string Project2ClassType = "DesperateDevs.Utils.Tests.Project2.TestClass"; - static readonly string Project1BasePath = Path.Combine(ProjectRoot, "DesperateDevs.Utils", "fixtures", "DesperateDevs.Utils.Tests.Project1", "bin", "Release", "net472"); - static readonly string Project2BasePath = Path.Combine(ProjectRoot, "DesperateDevs.Utils", "fixtures", "DesperateDevs.Utils.Tests.Project2", "bin", "Release", "net472"); - - AssemblyResolver Project1ResolverReflection { get; } = new(true, Project1BasePath); - - AssemblyResolver Project1Resolver - { - get - { - if (_resolver == null) - { - _resolver = new AssemblyResolver(false, Project1BasePath); - _resolver.Load(Project1AssemblyName); - } - - return _resolver; - } - } - - AssemblyResolver Project12Resolver - { - get - { - if (_resolver == null) - { - _resolver = new AssemblyResolver(false, Project1BasePath, Project2BasePath); - _resolver.Load(Project2AssemblyName); - } - - return _resolver; - } - } - - AssemblyResolver _resolver; - - [Fact] - public void LoadsAssemblyWithFullPath() - { - var resolver = new AssemblyResolver(true); - resolver.Load(Path.Combine(Project1BasePath, Project1AssemblyFile)); - - resolver.GetTypes() - .Select(t => t.FullName) - .Should().Contain(Project1ClassType); - - resolver.assemblies.Length.Should().Be(1); - } - - [Fact] - public void LoadsAssemblyByFileNameAndBasePath() - { - Project1ResolverReflection.Load(Project1AssemblyFile); - - Project1ResolverReflection.GetTypes() - .Select(t => t.FullName) - .Should().Contain(Project1ClassType); - - Project1ResolverReflection.assemblies.Length.Should().Be(1); - } - - [Fact] - public void LoadsAssemblyByNameAndBasePath() - { - Project1ResolverReflection.Load(Project1AssemblyName); - - Project1ResolverReflection.GetTypes() - .Select(t => t.FullName) - .Should().Contain(Project1ClassType); - - Project1ResolverReflection.assemblies.Length.Should().Be(1); - } - - [Fact(Skip = "Must be run separately (uses AppDomain)")] - public void DoesNotLoadTypeIntoAppDomain() - { - Project1ResolverReflection.Load(Project1AssemblyName); - Project1ResolverReflection.GetTypes(); - - AppDomain.CurrentDomain - .GetAllTypes() - .Select(t => t.FullName) - .Should().NotContain(Project1ClassType); - } - - [Fact] - public void RetrievesTheAssemblyFromType() - { - Project1ResolverReflection.Load(Project1AssemblyName); - - var types = Project1ResolverReflection.GetTypes(); - types[0].FullName.Should().Be(Project1ClassType); - types[0].Assembly.Should().BeSameAs(Project1ResolverReflection.assemblies[0]); - } - - [Fact] - public void DoesNotAddSameAssemblyTwice() - { - Project1ResolverReflection.Load(Project1AssemblyName); - Project1ResolverReflection.Load(Project1AssemblyName); - Project1ResolverReflection.assemblies.Length.Should().Be(1); - } - - [Fact] - public void ReflectionOnlyDoesNotLoadAnyDependencies() - { - var resolver = new AssemblyResolver(true, Project1BasePath, Project2BasePath); - resolver.Load(Project2AssemblyName); - - var typeNames = resolver.GetTypes() - .Select(t => t.FullName) - .ToArray(); - - typeNames.Length.Should().Be(1); - typeNames.Should().Contain(Project2ClassType); - resolver.assemblies.Length.Should().Be(1); - } - - [Fact] - public void CanReflectTypeWithMissingDependencies() - { - var resolver = new AssemblyResolver(true, Project1BasePath, Project2BasePath); - resolver.Load(Project2AssemblyName); - - var i = resolver.GetTypes()[0].GetInterfaces(); - i.Length.Should().Be(0); - } - - [Fact] - public void DoesNotLoadAnyDependencies() - { - var types = Project12Resolver.GetTypes(); - types.Length.Should().Be(1); - types[0].FullName.Should().Be(Project2ClassType); - Project12Resolver.assemblies.Length.Should().Be(1); - } - - [Fact(Skip = "TODO")] - public void InstantiatingTypeResultsInLoadingDependencies() - { - var types = Project12Resolver.GetTypes(); - Activator.CreateInstance(types[0]); - - var typeNames = Project12Resolver.GetTypes() - .Select(t => t.FullName) - .ToArray(); - - typeNames.Length.Should().Be(2); - typeNames.Should().Contain(Project1ClassType); - typeNames.Should().Contain(Project2ClassType); - Project12Resolver.assemblies.Length.Should().Be(2); - } - - [Fact] - public void LoadsDll() - { - var types = Project1Resolver.GetTypes(); - types.Length.Should().Be(1); - types[0].FullName.Should().Be(Project1ClassType); - } - - [Fact] - public void InstantiatesType() - { - var types = Project1Resolver.GetTypes(); - Activator.CreateInstance(types[0]); - types.Length.Should().Be(1); - } - } -} diff --git a/src/DesperateDevs.Utils/tests/DesperateDevs.Utils.Tests.csproj b/src/DesperateDevs.Utils/tests/DesperateDevs.Utils.Tests.csproj deleted file mode 100644 index 32254a02..00000000 --- a/src/DesperateDevs.Utils/tests/DesperateDevs.Utils.Tests.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - $(DefaultTestTargetFramework) - false - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/DesperateDevs.Utils/tests/DictionaryExtensionTests.cs b/src/DesperateDevs.Utils/tests/DictionaryExtensionTests.cs deleted file mode 100644 index 584ef3af..00000000 --- a/src/DesperateDevs.Utils/tests/DictionaryExtensionTests.cs +++ /dev/null @@ -1,39 +0,0 @@ -ο»Ώusing System.Collections.Generic; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class DictionaryExtensionTests - { - [Fact] - public void MergesDictionary() - { - var d1 = new Dictionary - { - {"k1", "v1"}, - {"k2", "v2"} - }; - - var d2 = new Dictionary - { - {"k1", "v1"}, - {"k3", "v3"} - }; - - var d3 = new Dictionary - { - {"k1", "v1"}, - {"k4", "v4"} - }; - - var merged = d1.Merge(d2, d3); - - merged.Count.Should().Be(4); - merged.Keys.Should().Contain("k1"); - merged.Keys.Should().Contain("k2"); - merged.Keys.Should().Contain("k3"); - merged.Keys.Should().Contain("k4"); - } - } -} diff --git a/src/DesperateDevs.Utils/tests/InterfaceTypeExtensionTests.cs b/src/DesperateDevs.Utils/tests/InterfaceTypeExtensionTests.cs deleted file mode 100644 index dfb1f8cc..00000000 --- a/src/DesperateDevs.Utils/tests/InterfaceTypeExtensionTests.cs +++ /dev/null @@ -1,38 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class InterfaceTypeExtensionTests - { - [Fact] - public void ReturnsFalseIfTypeDoesNotOmplementInterface() - { - typeof(object).ImplementsInterface().Should().BeFalse(); - } - - [Fact] - public void ReturnsFalseIfTypeIsSame() - { - typeof(ITestInterface).ImplementsInterface().Should().BeFalse(); - } - - [Fact] - public void ReturnFalseIfTypeIsInterface() - { - typeof(ITestSubInterface).ImplementsInterface().Should().BeFalse(); - } - - [Fact] - public void ReturnsTrueIfTypeImplementsInterface() - { - typeof(TestInterfaceClass).ImplementsInterface().Should().BeTrue(); - } - } - - public interface ITestInterface { } - - public interface ITestSubInterface : ITestInterface { } - - public class TestInterfaceClass : ITestInterface { } -} diff --git a/src/DesperateDevs.Utils/tests/ObjectCacheTests.cs b/src/DesperateDevs.Utils/tests/ObjectCacheTests.cs deleted file mode 100644 index 45561626..00000000 --- a/src/DesperateDevs.Utils/tests/ObjectCacheTests.cs +++ /dev/null @@ -1,72 +0,0 @@ -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class ObjectCacheTests - { - readonly ObjectCache _cache = new(); - - [Fact] - public void CreatesNewObjectPoolWhenRequested() - { - _cache.GetObjectPool().Should().NotBeNull(); - } - - [Fact] - public void ReturnsSameObjectPoolAlreadyCreated() - { - _cache.GetObjectPool().Should().BeSameAs(_cache.GetObjectPool()); - } - - [Fact] - public void ReturnsNewInstance() - { - _cache.Get().Should().NotBeNull(); - } - - [Fact] - public void ReturnsPooledInstance() - { - var obj = _cache.Get(); - _cache.Push(obj); - _cache.Get().Should().BeSameAs(obj); - } - - [Fact] - public void ReturnsCustomPushedInstance() - { - var obj = new EmptyTestClass(); - _cache.Push(obj); - _cache.Get().Should().BeSameAs(obj); - } - - [Fact] - public void RegistersCustomObjectPool() - { - var objectPool = new ObjectPool( - () => new TestClassWithField {Value = "test"}, - c => c.Value = null - ); - - _cache.RegisterCustomObjectPool(objectPool); - - _cache.GetObjectPool().Should().BeSameAs(objectPool); - - var obj = _cache.Get(); - obj.Value.Should().Be("test"); - - _cache.Push(obj); - obj.Value.Should().BeNull(); - } - - [Fact] - public void Resets() - { - var obj = _cache.Get(); - _cache.Push(obj); - _cache.Reset(); - _cache.Get().Should().NotBeSameAs(obj); - } - } -} diff --git a/src/DesperateDevs.Utils/tests/ObjectPoolTests.cs b/src/DesperateDevs.Utils/tests/ObjectPoolTests.cs deleted file mode 100644 index 4f3c608c..00000000 --- a/src/DesperateDevs.Utils/tests/ObjectPoolTests.cs +++ /dev/null @@ -1,69 +0,0 @@ -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class ObjectPoolTests - { - const string Value = "test"; - - ObjectPool _objectPool; - - public ObjectPoolTests() - { - _objectPool = new ObjectPool( - () => new TestClassWithField {Value = Value}, - c => { c.Value = null; } - ); - } - - [Fact] - public void GetsNewInstanceFromPool() - { - _objectPool.Get().Value.Should().Be(Value); - } - - [Fact] - public void GetsPooledInstance() - { - var obj = new TestClassWithField(); - _objectPool.Push(obj); - _objectPool.Get().Should().BeSameAs(obj); - } - - [Fact] - public void ResetsPushedInstance() - { - var obj = new TestClassWithField {Value = Value}; - _objectPool.Push(obj); - obj.Value.Should().BeNull(); - } - - [Fact] - public void DoesNotResetWhenResetMethodIsNull() - { - _objectPool = new ObjectPool(() => new TestClassWithField {Value = Value}); - var obj = new TestClassWithField {Value = Value}; - _objectPool.Push(obj); - obj.Value.Should().Be(Value); - } - - [Fact] - public void DrainsPool() - { - var obj = new TestClassWithField(); - _objectPool.Push(obj); - - var objects = _objectPool.Drain(); - objects.Length.Should().Be(1); - objects[0].Should().BeSameAs(obj); - - _objectPool.Get().Should().NotBeSameAs(obj); - } - } - - public class TestClassWithField - { - public string Value; - } -} diff --git a/src/DesperateDevs.Utils/tests/PublicMemberInfoTests.cs b/src/DesperateDevs.Utils/tests/PublicMemberInfoTests.cs deleted file mode 100644 index 830a2088..00000000 --- a/src/DesperateDevs.Utils/tests/PublicMemberInfoTests.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class PublicMemberInfoTests - { - [Fact] - public void CreatesEmptyInfoWhenClassHasNoFieldsOrProperties() - { - var infos = typeof(EmptyTestClass).GetPublicMemberInfos(); - infos.Should().BeEmpty(); - } - - [Fact] - public void CreatesMemberInfosForPublicFields() - { - var infos = typeof(TestClassWithFields).GetPublicMemberInfos(); - infos.Count.Should().Be(1); - var mi = infos[0]; - mi.type.Should().Be(typeof(string)); - mi.name.Should().Be("PublicField"); - mi.attributes.Length.Should().Be(1); - mi.attributes[0].memberInfos.Count.Should().Be(1); - var attrValue = mi.attributes[0].memberInfos[0].GetValue(mi.attributes[0].attribute); - attrValue.Should().Be("MyField"); - } - - [Fact] - public void CreatesMemberInfosForPublicProperties() - { - var infos = typeof(TestClassWithProperties).GetPublicMemberInfos(); - infos.Count.Should().Be(1); - var mi = infos[0]; - mi.type.Should().Be(typeof(string)); - mi.name.Should().Be("PublicProperty"); - mi.attributes.Length.Should().Be(1); - mi.attributes[0].memberInfos.Count.Should().Be(1); - var attrValue = mi.attributes[0].memberInfos[0].GetValue(mi.attributes[0].attribute); - attrValue.Should().Be("MyProperty"); - } - - [Fact] - public void CreatesMemberInfosForFieldsAndProperties() - { - var infos = typeof(TestClassWithFieldsAndProperties).GetPublicMemberInfos(); - infos.Count.Should().Be(2); - var mi1 = infos[0]; - var mi2 = infos[1]; - - mi1.type.Should().Be(typeof(string)); - mi1.name.Should().Be("PublicField"); - - mi2.type.Should().Be(typeof(string)); - mi2.name.Should().Be("PublicProperty"); - } - - [Fact] - public void GetsValuesForFieldsAndProperties() - { - var obj = new TestClassWithFieldsAndProperties - { - PublicField = "publicFieldValue", - PublicProperty = "publicPropertyValue" - }; - - var infos = obj.GetType().GetPublicMemberInfos(); - var mi1 = infos[0]; - var mi2 = infos[1]; - - mi1.GetValue(obj).Should().Be("publicFieldValue"); - mi2.GetValue(obj).Should().Be("publicPropertyValue"); - } - - [Fact] - public void SetsValuesForFieldsAndProperties() - { - var obj = new TestClassWithFieldsAndProperties(); - - var infos = obj.GetType().GetPublicMemberInfos(); - var mi1 = infos[0]; - var mi2 = infos[1]; - - mi1.SetValue(obj, "publicFieldValue"); - mi2.SetValue(obj, "publicPropertyValue"); - - obj.PublicField.Should().Be("publicFieldValue"); - obj.PublicProperty.Should().Be("publicPropertyValue"); - } - - [Fact] - public void ClonesObjectAndSetsPublicMembers() - { - var obj = new TestClassWithFieldsAndProperties - { - PublicField = "field", - PublicProperty = "property" - }; - - var clone = (TestClassWithFieldsAndProperties) obj.PublicMemberClone(); - - clone.Should().NotBeSameAs(obj); - clone.PublicField.Should().Be(obj.PublicField); - clone.PublicProperty.Should().Be(obj.PublicProperty); - } - - [Fact] - public void CopiesPublicMembersToOtherObject() - { - var obj = new TestClassWithFieldsAndProperties - { - PublicField = "field", - PublicProperty = "property" - }; - var newObj = new TestClassWithFieldsAndProperties(); - - obj.CopyPublicMemberValues(newObj); - - newObj.PublicField.Should().Be(obj.PublicField); - newObj.PublicProperty.Should().Be(obj.PublicProperty); - } - } - - public class EmptyTestClass { } - - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] - public class TestMemberAttribute : Attribute - { - public readonly string Value; - public TestMemberAttribute(string value) => Value = value; - } - - public class TestClassWithFields - { - [TestMember("MyField")] - public string PublicField; - - // Should be ignored -#pragma warning disable - public static bool PublicStaticField; - bool _privateField; - static bool _privateStaticField; - } - - public class TestClassWithProperties - { - [TestMember("MyProperty")] - public string PublicProperty { get; set; } - - // Should be ignored -#pragma warning disable - public static bool PublicStaticProperty { get; set; } - bool PrivateProperty { get; set; } - static bool PrivateStaticProperty { get; set; } - public string PublicPropertyGet => null; - - public string PublicPropertySet - { - set { } - } - } - - public class TestClassWithFieldsAndProperties - { - public string PublicField; - public string PublicProperty { get; set; } - } -} diff --git a/src/DesperateDevs.Utils/tests/SerializationTypeExtensionTests.cs b/src/DesperateDevs.Utils/tests/SerializationTypeExtensionTests.cs deleted file mode 100644 index 9bb873d9..00000000 --- a/src/DesperateDevs.Utils/tests/SerializationTypeExtensionTests.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Collections.Generic; -using FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class SerializationTypeExtensionTests - { - [Theory] - // built-in types, https://msdn.microsoft.com/en-us/library/ya5y69ds.aspx - [InlineData(typeof(bool), "bool")] - [InlineData(typeof(byte), "byte")] - [InlineData(typeof(sbyte), "sbyte")] - [InlineData(typeof(char), "char")] - [InlineData(typeof(decimal), "decimal")] - [InlineData(typeof(double), "double")] - [InlineData(typeof(float), "float")] - [InlineData(typeof(int), "int")] - [InlineData(typeof(uint), "uint")] - [InlineData(typeof(long), "long")] - [InlineData(typeof(ulong), "ulong")] - [InlineData(typeof(object), "object")] - [InlineData(typeof(short), "short")] - [InlineData(typeof(ushort), "ushort")] - [InlineData(typeof(string), "string")] - [InlineData(typeof(void), "void")] - // arrays - [InlineData(typeof(int[]), "int[]")] - [InlineData(typeof(int[,]), "int[,]")] - [InlineData(typeof(int[,,]), "int[,,]")] - [InlineData(typeof(int[][]), "int[][]")] - // generics - [InlineData(typeof(List), "System.Collections.Generic.List")] - [InlineData(typeof(HashSet), "System.Collections.Generic.HashSet")] - [InlineData(typeof(Dictionary), "System.Collections.Generic.Dictionary")] - // enum - [InlineData(typeof(TestEnum), "DesperateDevs.Utils.Tests.TestEnum")] - [InlineData(typeof(TestNestedEnumClass.NestedEnum), "DesperateDevs.Utils.Tests.TestNestedEnumClass.NestedEnum")] - // custom types - [InlineData(typeof(TestClass), "DesperateDevs.Utils.Tests.TestClass")] - [InlineData(typeof(TestNestedClass.TestInnerClass), "DesperateDevs.Utils.Tests.TestNestedClass.TestInnerClass")] - // mixed - [InlineData(typeof(List[,]), "System.Collections.Generic.List[,]")] - [InlineData(typeof(Dictionary[,], TestClass>[]), "System.Collections.Generic.Dictionary[,], DesperateDevs.Utils.Tests.TestClass>[]")] - public void ToCompilableString(Type type, string typeName) - { - type.ToCompilableString().Should().Be(typeName); - } - - [Theory] - // built-in types - [InlineData("bool", typeof(bool))] - [InlineData("byte", typeof(byte))] - [InlineData("sbyte", typeof(sbyte))] - [InlineData("char", typeof(char))] - [InlineData("decimal", typeof(decimal))] - [InlineData("double", typeof(double))] - [InlineData("float", typeof(float))] - [InlineData("int", typeof(int))] - [InlineData("uint", typeof(uint))] - [InlineData("long", typeof(long))] - [InlineData("ulong", typeof(ulong))] - [InlineData("object", typeof(object))] - [InlineData("short", typeof(short))] - [InlineData("ushort", typeof(ushort))] - [InlineData("string", typeof(string))] - [InlineData("void", typeof(void))] - // arrays - [InlineData("int[]", typeof(int[]))] - [InlineData("int[,]", typeof(int[,]))] - [InlineData("int[,,]", typeof(int[,,]))] - [InlineData("int[][]", typeof(int[][]))] - // generics - [InlineData("System.Collections.Generic.List", typeof(List))] - // [InlineData("System.Collections.Generic.HashSet", typeof(HashSet))] - // [InlineData("System.Collections.Generic.Dictionary", typeof(Dictionary))] - // enum - [InlineData("DesperateDevs.Utils.Tests.TestEnum", typeof(TestEnum))] - [InlineData("DesperateDevs.Utils.Tests.TestNestedEnumClass+NestedEnum", typeof(TestNestedEnumClass.NestedEnum))] - // custom types - [InlineData("DesperateDevs.Utils.Tests.TestClass", typeof(TestClass))] - [InlineData("DesperateDevs.Utils.Tests.TestNestedClass+TestInnerClass", typeof(TestNestedClass.TestInnerClass))] - // mixed - [InlineData("System.Collections.Generic.List[,]", typeof(List[,]))] - // [InlineData("System.Collections.Generic.Dictionary[,], DesperateDevs.Utils.Tests.TestClass>[]", typeof(Dictionary[,], TestClass>[]))] -// - public void ToType(string typeName, Type type) - { - typeName.ToType().Should().Be(type); - } - - [Fact] - public void ReturnsShortTypeNameForShortTypeName() - { - "MyClass".ShortTypeName().Should().Be("MyClass"); - } - - [Fact] - public void ReturnsShortTypeNameForFullTypeName() - { - "Namespace.Module.MyClass".ShortTypeName().Should().Be("MyClass"); - } - - [Fact] - public void ReturnsTypeNameForShortTypeName() - { - "MyClass".RemoveDots().Should().Be("MyClass"); - } - - [Fact] - public void ReturnsTypeNameWithoutDotsForFullTypeName() - { - "Namespace.Module.MyClass".RemoveDots().Should().Be("NamespaceModuleMyClass"); - } - } - - public class TestClass { } - - public class TestNestedClass - { - public class TestInnerClass { } - } - - public enum TestEnum { } - - public class TestNestedEnumClass - { - public enum NestedEnum { } - } -} diff --git a/src/DesperateDevs.Utils/tests/StringExtensionTests.cs b/src/DesperateDevs.Utils/tests/StringExtensionTests.cs deleted file mode 100644 index 045fc867..00000000 --- a/src/DesperateDevs.Utils/tests/StringExtensionTests.cs +++ /dev/null @@ -1,35 +0,0 @@ -ο»Ώusing FluentAssertions; -using Xunit; - -namespace DesperateDevs.Utils.Tests -{ - public class StringExtensionTests - { - [Fact] - public void UppercaseFirst() => "test".UppercaseFirst().Should().Be("Test"); - - [Fact] - public void UppercaseFirstHandlesEmptyString() => string.Empty.UppercaseFirst().Should().Be(string.Empty); - - [Fact] - public void LowercaseFirst() => "Test".LowercaseFirst().Should().Be("test"); - - [Fact] - public void LowercaseFirstHandlesEmptyString() => string.Empty.LowercaseFirst().Should().Be(string.Empty); - - [Fact] - public void ToUnixLineEndings() => "1\r\n2\r3\n".ToUnixLineEndings().Should().Be("1\n2\n3\n"); - - [Fact] - public void ToUnixPath() => "a/b\\c\\d/e".ToUnixPath().Should().Be("a/b/c/d/e"); - - [Fact] - public void ToCsv() => new[] {"1", "2", "3"}.ToCSV().Should().Be("1, 2, 3"); - - [Fact] - public void ArrayFromCsv() => "1,2, 3".ArrayFromCSV().Should().BeEquivalentTo("1", "2", "3"); - - [Fact] - public void ToSpacedCamelCase() => "ThisIsATest".ToSpacedCamelCase().Should().Be("This Is A Test"); - } -} diff --git a/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import b/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import new file mode 100755 index 00000000..af5de6be --- /dev/null +++ b/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import @@ -0,0 +1,6 @@ +#!/bin/bash +dir="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)" +cd $dir +./Jenny/Jenny auto-import -s +./Jenny/Jenny doctor +read -n 1 -srp "Press any key to continue" diff --git a/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import.bat b/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import.bat new file mode 100644 index 00000000..5be09163 --- /dev/null +++ b/src/Jenny.Generator.Cli/scripts/Jenny-Auto-Import.bat @@ -0,0 +1,5 @@ +pushd %~dp0 +.\Jenny\Jenny auto-import -s +.\Jenny\Jenny doctor +pause +popd diff --git a/src/Jenny.Generator.Cli/scripts/Jenny-Server b/src/Jenny.Generator.Cli/scripts/Jenny-Server new file mode 100755 index 00000000..5b513479 --- /dev/null +++ b/src/Jenny.Generator.Cli/scripts/Jenny-Server @@ -0,0 +1,4 @@ +#!/bin/bash +dir="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)" +cd $dir +./Jenny/Jenny server diff --git a/src/Jenny.Generator.Cli/scripts/Jenny-Server.bat b/src/Jenny.Generator.Cli/scripts/Jenny-Server.bat new file mode 100644 index 00000000..8df2830f --- /dev/null +++ b/src/Jenny.Generator.Cli/scripts/Jenny-Server.bat @@ -0,0 +1,3 @@ +pushd %~dp0 +.\Jenny\Jenny server +popd diff --git a/src/Jenny.Generator.Cli/src/AutoImportCommand.cs b/src/Jenny.Generator.Cli/src/AutoImportCommand.cs new file mode 100644 index 00000000..d9f3aa4b --- /dev/null +++ b/src/Jenny.Generator.Cli/src/AutoImportCommand.cs @@ -0,0 +1,30 @@ +ο»Ώusing DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class AutoImportCommand : AbstractPreferencesCommand + { + public override string Trigger => "auto-import"; + public override string Description => "Find and import all plugins"; + public override string Group => CommandGroups.Plugins; + public override string Example => "auto-import"; + + public AutoImportCommand() : base(typeof(AutoImportCommand).FullName) { } + + protected override void Run() + { + _logger.Debug(_preferences.ToString()); + AutoImport(); + new FixCommand().Run(_program, _rawArgs); + } + + void AutoImport() + { + var config = _preferences.CreateAndConfigure(); + var searchPaths = CodeGeneratorUtil.BuildSearchPaths(config.SearchPaths, new[] {"."}); + CodeGeneratorUtil.AutoImport(config, searchPaths); + _preferences.Save(); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/ClientCommand.cs b/src/Jenny.Generator.Cli/src/ClientCommand.cs new file mode 100644 index 00000000..65529791 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/ClientCommand.cs @@ -0,0 +1,52 @@ +ο»Ώusing System; +using System.Linq; +using System.Net.Sockets; +using System.Text; +using TCPeasy; +using DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class ClientCommand : AbstractPreferencesCommand + { + public override string Trigger => "client"; + public override string Description => "Start client mode"; + public override string Group => CommandGroups.CodeGeneration; + public override string Example => "client [command]"; + + string _command; + + public ClientCommand() : base(typeof(ClientCommand).FullName) { } + + protected override void Run() + { + _command = string.Join(" ", _rawArgs.Skip(1).ToArray()); + + var config = _preferences.CreateAndConfigure(); + var client = new TcpClientSocket(); + client.OnConnected += OnConnected; + client.OnReceived += OnReceived; + client.OnDisconnected += OnDisconnected; + client.Connect(config.Host, config.Port); + + while (true) { } + } + + void OnConnected(TcpClientSocket client) + { + client.Send(Encoding.UTF8.GetBytes(_command)); + } + + void OnReceived(AbstractTcpSocket socket, Socket client, byte[] bytes) + { + _logger.Info(Encoding.UTF8.GetString(bytes)); + socket.Disconnect(); + } + + void OnDisconnected(AbstractTcpSocket socket) + { + Environment.Exit(0); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/CommandGroups.cs b/src/Jenny.Generator.Cli/src/CommandGroups.cs new file mode 100644 index 00000000..ccc5cfa6 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/CommandGroups.cs @@ -0,0 +1,8 @@ +ο»Ώnamespace Jenny.Generator.Cli +{ + public static class CommandGroups + { + public const string Plugins = "Plugins"; + public const string CodeGeneration = "Code Generation"; + } +} diff --git a/src/Jenny.Generator.Cli/src/DoctorCommand.cs b/src/Jenny.Generator.Cli/src/DoctorCommand.cs new file mode 100644 index 00000000..507efeac --- /dev/null +++ b/src/Jenny.Generator.Cli/src/DoctorCommand.cs @@ -0,0 +1,63 @@ +using System; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; +using DesperateDevs.Reflection; + +namespace Jenny.Generator.Cli +{ + public class DoctorCommand : AbstractPreferencesCommand + { + public override string Trigger => "doctor"; + public override string Description => "Check the config for potential problems"; + public override string Group => CommandGroups.Plugins; + public override string Example => "doctor"; + + public DoctorCommand() : base(typeof(DoctorCommand).FullName) { } + + protected override void Run() + { + new StatusCommand().Run(_program, _rawArgs); + + Diagnose(); + + _logger.Info("Dry Run"); + CodeGeneratorUtil + .CodeGeneratorFromPreferences(_preferences) + .DryRun(); + + _logger.Info("πŸ‘¨β€πŸ”¬ No problems detected. Happy coding :)"); + } + + void Diagnose() + { + var doctors = AppDomain.CurrentDomain.GetInstancesOf().ToArray(); + foreach (var doctor in doctors.OfType()) + doctor.Configure(_preferences); + + var diagnoses = doctors + .Select(doctor => doctor.Diagnose()) + .ToArray(); + + foreach (var diagnosis in diagnoses.Where(d => d.Severity == DiagnosisSeverity.Hint)) + { + _logger.Info("πŸ‘¨β€βš•οΈ Symptoms: " + diagnosis.Symptoms); + _logger.Info("πŸ’Š Treatment: " + diagnosis.Treatment); + } + + foreach (var diagnosis in diagnoses.Where(d => d.Severity == DiagnosisSeverity.Warning)) + { + _logger.Warn("πŸ‘¨β€βš•οΈ Symptoms: " + diagnosis.Symptoms); + _logger.Warn("πŸ’Š Treatment: " + diagnosis.Treatment); + } + + var errors = string.Join("\n", diagnoses + .Where(d => d.Severity == DiagnosisSeverity.Error) + .Select(d => "πŸ‘¨β€βš•οΈ Symptoms: " + d.Symptoms + "\nπŸ’Š Treatment: " + d.Treatment) + .ToArray()); + + if (!string.IsNullOrEmpty(errors)) + throw new Exception(errors + "\nUse 'jenny fix' to apply treatments"); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/DryRunCommand.cs b/src/Jenny.Generator.Cli/src/DryRunCommand.cs new file mode 100644 index 00000000..5b09f17c --- /dev/null +++ b/src/Jenny.Generator.Cli/src/DryRunCommand.cs @@ -0,0 +1,25 @@ +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class DryRunCommand : AbstractPreferencesCommand + { + public override string Trigger => "dry"; + public override string Description => "Run the code generator in dry mode"; + public override string Group => CommandGroups.CodeGeneration; + public override string Example => "dry"; + + public DryRunCommand() : base(typeof(DryRunCommand).FullName) { } + + protected override void Run() + { + var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(_preferences); + codeGenerator.OnProgress += (title, info, progress) => + { + var p = (int)(progress * 100); + _logger.Debug($"{title}: {info} ({p}%)"); + }; + codeGenerator.DryRun(); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/EditMenuEntry.cs b/src/Jenny.Generator.Cli/src/EditMenuEntry.cs new file mode 100644 index 00000000..5ec70cd7 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/EditMenuEntry.cs @@ -0,0 +1,16 @@ +ο»Ώusing DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class EditMenuEntry : MenuEntry + { + public EditMenuEntry(CliProgram progam, CliMenu menu, string propertiesPath) : + base("Edit " + propertiesPath, null, false, () => + { + var command = new EditConfigCommand(); + command.Run(progam, new[] {command.Trigger, propertiesPath}); + menu.Stop(); + }) { } + } +} diff --git a/src/Jenny.Generator.Cli/src/FixCommand.cs b/src/Jenny.Generator.Cli/src/FixCommand.cs new file mode 100644 index 00000000..e13c8210 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/FixCommand.cs @@ -0,0 +1,492 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; +using DesperateDevs.Extensions; +using DesperateDevs.Reflection; + +namespace Jenny.Generator.Cli +{ + public class FixCommand : AbstractPreferencesCommand + { + public override string Trigger => "fix"; + public override string Description => "Add missing keys and add available or remove unavailable plugins interactively"; + public override string Group => CommandGroups.Plugins; + public override string Example => "fix"; + + static bool _silent; + + public FixCommand() : base(typeof(FixCommand).FullName) { } + + protected override void Run() + { + _silent = _rawArgs.IsSilent(); + + var config = _preferences.CreateAndConfigure(); + ForceAddMissingKeys(config.DefaultProperties, _preferences); + + var instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); + // A test to check if all types can be resolved and instantiated. + CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.PreProcessors); + CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.DataProviders); + CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.CodeGenerators); + CodeGeneratorUtil.GetEnabledInstancesOf(instances, config.PostProcessors); + + var askedRemoveKeys = new HashSet(); + var askedAddKeys = new HashSet(); + while (Fix(askedRemoveKeys, askedAddKeys, instances, config, _preferences)) { } + + RunDoctors(); + FixSearchPath(instances, config, _preferences); + } + + void RunDoctors() + { + var doctors = AppDomain.CurrentDomain.GetInstancesOf().ToArray(); + foreach (var doctor in doctors.OfType()) + doctor.Configure(_preferences); + + foreach (var doctor in doctors) + { + var diagnosis = doctor.Diagnose(); + if (diagnosis.Severity == DiagnosisSeverity.Error) + { + if (_silent) + { + if (doctor.ApplyFix()) + { + _preferences.Save(); + _logger.Info("πŸ’‰ Applied fix: " + diagnosis.Treatment); + } + } + else + { + Console.WriteLine("πŸ’‰ Apply fix: " + diagnosis.Treatment); + Console.WriteLine("to treat symptoms: " + diagnosis.Symptoms + " ? (y / n)"); + if (PreferencesExtension.GetUserDecision() && doctor.ApplyFix()) + _preferences.Save(); + } + } + } + } + + void FixSearchPath(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) + { + var requiredSearchPaths = instances + .Select(instance => Path.GetDirectoryName(instance.GetType().Assembly.Location.MakePathRelativeTo(Directory.GetCurrentDirectory()))) + .Distinct() + .Select(Path.GetFullPath) + .OrderBy(path => path) + .ToArray(); + + var unusedPaths = config.SearchPaths + .Where(path => !requiredSearchPaths.Contains(Path.GetFullPath(path))); + + foreach (var path in unusedPaths) + { + if (_silent) + { + preferences.RemoveValue( + path, + config.SearchPaths, + values => config.SearchPaths = values.ToArray() + ); + } + else + { + preferences.AskRemoveValue( + "Remove unused search path", + path, + config.SearchPaths, + values => config.SearchPaths = values.ToArray() + ); + } + } + + config.SearchPaths = config.SearchPaths.Distinct().ToArray(); + preferences.Save(); + } + + static void ForceAddMissingKeys(Dictionary requiredProperties, Preferences preferences) + { + var requiredKeys = requiredProperties.Keys.ToArray(); + var missingKeys = preferences.GetMissingKeys(requiredKeys); + + foreach (var key in missingKeys) + { + if (_silent) + preferences.AddKey(key, requiredProperties[key]); + else + preferences.NotifyForceAddKey("Will add missing key", key, requiredProperties[key]); + } + } + + bool Fix(HashSet askedRemoveKeys, HashSet askedAddKeys, ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) + { + var changed = FixPlugins(askedRemoveKeys, askedAddKeys, instances, config, preferences); + changed |= FixCollisions(askedAddKeys, config, preferences); + + ForceAddMissingKeys(CodeGeneratorUtil.GetDefaultProperties(instances, config), preferences); + + var requiredKeys = config.DefaultProperties + .Merge(CodeGeneratorUtil.GetDefaultProperties(instances, config)) + .Keys + .ToArray(); + + RemoveUnusedKeys(askedRemoveKeys, requiredKeys, preferences); + + return changed; + } + + static bool FixPlugins(HashSet askedRemoveKeys, HashSet askedAddKeys, ICodeGenerationPlugin[] instances, CodeGeneratorConfig config, Preferences preferences) + { + var changed = false; + + var unavailablePreProcessors = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.PreProcessors); + var unavailableDataProviders = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.DataProviders); + var unavailableCodeGenerators = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.CodeGenerators); + var unavailablePostProcessors = CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.PostProcessors); + + var availablePreProcessors = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.PreProcessors); + var availableDataProviders = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.DataProviders); + var availableCodeGenerators = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.CodeGenerators); + var availablePostProcessors = CodeGeneratorUtil.GetAvailableNamesOf(instances, config.PostProcessors); + + foreach (var value in unavailablePreProcessors) + { + if (!askedRemoveKeys.Contains(value)) + { + if (_silent) + { + preferences.RemoveValue( + value, + config.PreProcessors, + values => config.PreProcessors = values.ToArray() + ); + } + else + { + preferences.AskRemoveValue( + "Remove unavailable pre processor", + value, + config.PreProcessors, + values => config.PreProcessors = values.ToArray() + ); + } + + askedRemoveKeys.Add(value); + changed = true; + } + } + + foreach (var value in unavailableDataProviders) + { + if (!askedRemoveKeys.Contains(value)) + { + if (_silent) + { + preferences.RemoveValue( + value, + config.DataProviders, + values => config.DataProviders = values.ToArray() + ); + } + else + { + preferences.AskRemoveValue( + "Remove unavailable data provider", + value, + config.DataProviders, + values => config.DataProviders = values.ToArray() + ); + } + + askedRemoveKeys.Add(value); + changed = true; + } + } + + foreach (var value in unavailableCodeGenerators) + { + if (!askedRemoveKeys.Contains(value)) + { + if (_silent) + { + preferences.RemoveValue( + value, + config.CodeGenerators, + values => config.CodeGenerators = values.ToArray() + ); + } + else + { + preferences.AskRemoveValue( + "Remove unavailable code generator", + value, + config.CodeGenerators, + values => config.CodeGenerators = values.ToArray() + ); + } + + askedRemoveKeys.Add(value); + changed = true; + } + } + + foreach (var value in unavailablePostProcessors) + { + if (!askedRemoveKeys.Contains(value)) + { + if (_silent) + { + preferences.RemoveValue( + value, + config.PostProcessors, + values => config.PostProcessors = values.ToArray() + ); + } + else + { + preferences.AskRemoveValue( + "Remove unavailable post processor", + value, + config.PostProcessors, + values => config.PostProcessors = values.ToArray() + ); + } + + askedRemoveKeys.Add(value); + changed = true; + } + } + + foreach (var value in availablePreProcessors) + { + if (!askedAddKeys.Contains(value)) + { + if (_silent) + { + preferences.AddValue( + value, + config.PreProcessors, + values => config.PreProcessors = values.ToArray() + ); + } + else + { + preferences.AskAddValue( + "Add available pre processor", + value, + config.PreProcessors, + values => config.PreProcessors = values.ToArray() + ); + } + + askedAddKeys.Add(value); + changed = true; + } + } + + foreach (var value in availableDataProviders) + { + if (!askedAddKeys.Contains(value)) + { + if (_silent) + { + preferences.AddValue( + value, + config.DataProviders, + values => config.DataProviders = values.ToArray() + ); + } + else + { + preferences.AskAddValue( + "Add available data provider", + value, + config.DataProviders, + values => config.DataProviders = values.ToArray() + ); + } + + askedAddKeys.Add(value); + changed = true; + } + } + + foreach (var value in availableCodeGenerators) + { + if (!askedAddKeys.Contains(value)) + { + if (_silent) + { + preferences.AddValue( + value, + config.CodeGenerators, + values => config.CodeGenerators = values.ToArray() + ); + } + else + { + preferences.AskAddValue( + "Add available code generator", + value, + config.CodeGenerators, + values => config.CodeGenerators = values.ToArray() + ); + } + + askedAddKeys.Add(value); + changed = true; + } + } + + foreach (var value in availablePostProcessors) + { + if (!askedAddKeys.Contains(value)) + { + if (_silent) + { + preferences.AddValue( + value, + config.PostProcessors, + values => config.PostProcessors = values.ToArray() + ); + } + else + { + preferences.AskAddValue( + "Add available post processor", + value, + config.PostProcessors, + values => config.PostProcessors = values.ToArray() + ); + } + + askedAddKeys.Add(value); + changed = true; + } + } + + return changed; + } + + bool FixCollisions(HashSet askedAddKeys, CodeGeneratorConfig config, Preferences preferences) + { + var changed = FixDuplicates(askedAddKeys, config.PreProcessors, values => + { + config.PreProcessors = values; + return config.PreProcessors; + }, preferences); + + changed = FixDuplicates(askedAddKeys, config.DataProviders, values => + { + config.DataProviders = values; + return config.DataProviders; + }, preferences) | changed; + + changed = FixDuplicates(askedAddKeys, config.CodeGenerators, values => + { + config.CodeGenerators = values; + return config.CodeGenerators; + }, preferences) | changed; + + return FixDuplicates(askedAddKeys, config.PostProcessors, values => + { + config.PostProcessors = values; + return config.PostProcessors; + }, preferences) | changed; + } + + bool FixDuplicates(HashSet askedAddKeys, string[] values, Func updateAction, Preferences preferences) + { + var changed = false; + var duplicates = GetDuplicates(values); + + foreach (var duplicate in duplicates) + { + Console.WriteLine("⚠️ Potential plugin collision: " + duplicate); + Console.WriteLine("0: Keep all (no changes)"); + + var collisions = values + .Where(name => name.EndsWith(duplicate)) + .ToArray(); + + PrintCollisions(collisions); + var inputChars = GetInputChars(collisions); + var keyChar = PreferencesExtension.GetGenericUserDecision(inputChars); + if (keyChar != '0') + { + var index = int.Parse(keyChar.ToString()) - 1; + var keep = collisions[index]; + + foreach (var collision in collisions) + { + if (collision != keep) + { + preferences.RemoveValue( + collision, + values, + result => values = updateAction(result.ToArray()) + ); + askedAddKeys.Add(collision); + changed = true; + } + } + } + } + + return changed; + } + + static string[] GetDuplicates(string[] values) + { + var shortNames = values + .Select(name => name.ShortTypeName()) + .ToArray(); + + return values + .Where(name => shortNames.Count(n => n == name.ShortTypeName()) > 1) + .Select(name => name.ShortTypeName()) + .Distinct() + .OrderBy(name => name.ShortTypeName()) + .ToArray(); + } + + void PrintCollisions(string[] collisions) + { + for (var i = 0; i < collisions.Length; i++) + Console.WriteLine((i + 1) + ": Keep " + collisions[i]); + } + + static char[] GetInputChars(string[] collisions) + { + var chars = new char[collisions.Length + 1]; + for (var i = 0; i < collisions.Length; i++) + chars[i] = (i + 1).ToString()[0]; + + chars[chars.Length - 1] = '0'; + return chars; + } + + static void RemoveUnusedKeys(HashSet askedRemoveKeys, string[] requiredKeys, Preferences preferences) + { + var unusedKeys = preferences.GetUnusedKeys(requiredKeys); + foreach (var key in unusedKeys) + { + if (!askedRemoveKeys.Contains(key)) + { + if (_silent) + preferences.RemoveKey(key); + else + preferences.AskRemoveKey("Remove unused key", key); + + askedRemoveKeys.Add(key); + } + } + } + } +} diff --git a/src/Jenny.Generator.Cli/src/GenerateCommand.cs b/src/Jenny.Generator.Cli/src/GenerateCommand.cs new file mode 100644 index 00000000..79ed2e5b --- /dev/null +++ b/src/Jenny.Generator.Cli/src/GenerateCommand.cs @@ -0,0 +1,38 @@ +using System; +using System.Diagnostics; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class GenerateCommand : AbstractPreferencesCommand + { + public override string Trigger => "gen"; + public override string Description => "Generate files based on properties file"; + public override string Group => CommandGroups.CodeGeneration; + public override string Example => "gen"; + + public GenerateCommand() : base(typeof(GenerateCommand).FullName) { } + + protected override void Run() + { + _logger.Info("Generating using " + _preferences.PropertiesPath); + + var watch = new Stopwatch(); + watch.Start(); + + var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(_preferences); + + codeGenerator.OnProgress += (title, info, progress) => + { + var p = (int)(progress * 100); + _logger.Debug($"{title}: {info} ({p}%)"); + }; + + var files = codeGenerator.Generate(); + + watch.Stop(); + + _logger.Info("[" + DateTime.Now.ToLongTimeString() + "]" + " Generated " + files.Length + " files in " + (watch.ElapsedMilliseconds / 1000f).ToString("0.0") + " seconds"); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/HelpCommand.cs b/src/Jenny.Generator.Cli/src/HelpCommand.cs new file mode 100644 index 00000000..23b4e948 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/HelpCommand.cs @@ -0,0 +1,44 @@ +ο»Ώusing System; +using DesperateDevs.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class HelpCommand : AbstractCommand + { + public override string Trigger => "help"; + public override string Description => "Show help"; + public override string Group => null; + public override string Example => "help"; + + protected override void Run() + { + var pad = _program.GetCommandListPad(); + Console.WriteLine($@"usage: +{_program.GetFormattedCommandList()} +{"[-v]".PadRight(pad)} - verbose output +{"[-s]".PadRight(pad)} - silent (minimal output) + +Menus + + Down, Right, j, l - Select next + Up, Left, k, h - Select previous + Home, a - Select first + End, e - Select last + Enter, Space - Run selected menu entry + +Jenny automatically uses {CodeGenerator.DefaultPropertiesPath} and .userproperties +when no properties files are specified along with the command. + +EXAMPLE + jenny new Jenny.properties + jenny auto-import -s + jenny doctor + jenny edit + jenny fix + jenny gen + jenny gen Other.properties + jenny gen Other.properties Other.userproperties +"); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/Jenny.Generator.Cli.csproj b/src/Jenny.Generator.Cli/src/Jenny.Generator.Cli.csproj new file mode 100644 index 00000000..53bb3b3c --- /dev/null +++ b/src/Jenny.Generator.Cli/src/Jenny.Generator.Cli.csproj @@ -0,0 +1,16 @@ +ο»Ώ + + + Exe + $(DefaultNetTargetFramework) + 1.0.0 + + + + + + + + + + diff --git a/src/Jenny.Generator.Cli/src/Program.cs b/src/Jenny.Generator.Cli/src/Program.cs new file mode 100644 index 00000000..e69c7efa --- /dev/null +++ b/src/Jenny.Generator.Cli/src/Program.cs @@ -0,0 +1,14 @@ +ο»Ώusing DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + static class Program + { + public static void Main(string[] args) + { + AbstractPreferencesCommand.DefaultPropertiesPath = CodeGenerator.DefaultPropertiesPath; + new CliProgram("Jenny", typeof(WizardCommand), args).Run(); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/ScanCommand.cs b/src/Jenny.Generator.Cli/src/ScanCommand.cs new file mode 100644 index 00000000..58e07297 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/ScanCommand.cs @@ -0,0 +1,28 @@ +using System.Linq; +using DesperateDevs.Serialization.Cli.Utils; + +namespace Jenny.Generator.Cli +{ + public class ScanCommand : AbstractPreferencesCommand + { + public override string Trigger => "scan"; + public override string Description => "Scan and print available types found in specified plugins"; + public override string Group => CommandGroups.Plugins; + public override string Example => "scan"; + + public ScanCommand() : base(typeof(ScanCommand).FullName) { } + + protected override void Run() + { + var instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); + + var orderedTypes = instances + .Select(instance => instance.GetType()) + .OrderBy(type => type.Assembly.GetName().Name) + .ThenBy(type => type.FullName); + + foreach (var type in orderedTypes) + _logger.Info(type.Assembly.GetName().Name + ": " + type); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/ServerCommand.cs b/src/Jenny.Generator.Cli/src/ServerCommand.cs new file mode 100644 index 00000000..62c6e3b5 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/ServerCommand.cs @@ -0,0 +1,85 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Text; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; +using Sherlog; +using TCPeasy; + +namespace Jenny.Generator.Cli +{ + public class ServerCommand : AbstractPreferencesCommand + { + public override string Trigger => "server"; + public override string Description => "Start server mode"; + public override string Group => CommandGroups.CodeGeneration; + public override string Example => "server"; + + AbstractTcpSocket _socket; + readonly List _logBuffer = new List(); + + public ServerCommand() : base(typeof(ServerCommand).FullName) { } + + protected override void Run() + { + var config = _preferences.CreateAndConfigure(); + var server = new TcpServerSocket(); + _socket = server; + server.OnReceived += OnReceived; + server.Listen(config.Port); + Console.CancelKeyPress += OnCancel; + while (true) + server.Send(Encoding.UTF8.GetBytes(Console.ReadLine() ?? string.Empty)); + } + + void OnReceived(AbstractTcpSocket socket, Socket client, byte[] bytes) + { + var message = Encoding.UTF8.GetString(bytes); + _logger.Info(message); + + var args = GetArgsFromMessage(message); + + try + { + if (args[0] == Trigger) + { + throw new Exception("Server is already running!"); + } + + var command = _program.GetCommand(args.WithoutDefaultParameter().First()); + Logger.AddAppender(OnLog); + command.Run(_program, args); + Logger.RemoveAppender(OnLog); + var logBufferString = GetLogBufferString(); + var sendBytes = logBufferString.Length == 0 + ? new byte[] {0} + : Encoding.UTF8.GetBytes(logBufferString); + socket.Send(sendBytes); + } + catch (Exception exception) + { + _logger.Error(args.IsVerbose() + ? exception.ToString() + : exception.Message); + + socket.Send(Encoding.UTF8.GetBytes(GetLogBufferString() + exception.Message)); + } + + _logBuffer.Clear(); + } + + string[] GetArgsFromMessage(string command) => command + .Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries) + .Select(value => value.Trim()) + .ToArray(); + + void OnCancel(object sender, ConsoleCancelEventArgs e) => _socket.Disconnect(); + + string GetLogBufferString() => string.Join("\n", _logBuffer); + + void OnLog(Logger logger, LogLevel loglevel, string message) => _logBuffer.Add(message); + } +} diff --git a/src/Jenny.Generator.Cli/src/StatusCommand.cs b/src/Jenny.Generator.Cli/src/StatusCommand.cs new file mode 100644 index 00000000..00c19ad5 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/StatusCommand.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Serialization.Cli.Utils; +using DesperateDevs.Extensions; + +namespace Jenny.Generator.Cli +{ + public class StatusCommand : AbstractPreferencesCommand + { + public override string Trigger => "status"; + public override string Description => "List available and unavailable plugins"; + public override string Group => CommandGroups.Plugins; + public override string Example => "status"; + + public StatusCommand() : base(typeof(StatusCommand).FullName) { } + + protected override void Run() + { + var config = _preferences.CreateAndConfigure(); + + _logger.Debug(_preferences.ToString()); + + ICodeGenerationPlugin[] instances = null; + Dictionary defaultProperties = null; + + try + { + instances = CodeGeneratorUtil.LoadFromPlugins(_preferences); + defaultProperties = CodeGeneratorUtil.GetDefaultProperties(instances, config); + } + catch (Exception) + { + PrintKeyStatus( + config.DefaultProperties.Keys.ToArray(), + _preferences + ); + throw; + } + + var requiredKeys = config.DefaultProperties + .Merge(defaultProperties).Keys.ToArray(); + + PrintKeyStatus(requiredKeys, _preferences); + PrintPluginStatus(instances, config); + PrintCollisions(config); + } + + void PrintKeyStatus(string[] requiredKeys, Preferences preferences) + { + var unusedKeys = preferences.GetUnusedKeys(requiredKeys); + foreach (var key in unusedKeys) + _logger.Info("ℹ️️ Unused key: " + key); + + foreach (var key in preferences.GetMissingKeys(requiredKeys)) + _logger.Warn("⚠️ Missing key: " + key); + } + + void PrintPluginStatus(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config) + { + PrintUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.PreProcessors)); + PrintUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.DataProviders)); + PrintUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.CodeGenerators)); + PrintUnavailable(CodeGeneratorUtil.GetUnavailableNamesOf(instances, config.PostProcessors)); + + PrintAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.PreProcessors)); + PrintAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.DataProviders)); + PrintAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.CodeGenerators)); + PrintAvailable(CodeGeneratorUtil.GetAvailableNamesOf(instances, config.PostProcessors)); + } + + void PrintUnavailable(string[] names) + { + foreach (var name in names) + _logger.Warn("⚠️ Unavailable: " + name); + } + + void PrintAvailable(string[] names) + { + foreach (var name in names) + _logger.Info("ℹ️ Available: " + name); + } + + void PrintCollisions(CodeGeneratorConfig config) + { + PrintDuplicates(config.PreProcessors); + PrintDuplicates(config.DataProviders); + PrintDuplicates(config.CodeGenerators); + PrintDuplicates(config.PostProcessors); + } + + void PrintDuplicates(string[] names) + { + var shortNames = names + .Select(name => name.ShortTypeName()) + .ToArray(); + + var duplicates = names + .Where(name => shortNames.Count(n => n == name.ShortTypeName()) > 1) + .OrderBy(name => name.ShortTypeName()); + + foreach (var duplicate in duplicates) + _logger.Warn("⚠️ Potential collision detected: " + duplicate.ShortTypeName() + " -> " + duplicate); + } + } +} diff --git a/src/Jenny.Generator.Cli/src/Step1PropertiesMenu.cs b/src/Jenny.Generator.Cli/src/Step1PropertiesMenu.cs new file mode 100644 index 00000000..f55f172d --- /dev/null +++ b/src/Jenny.Generator.Cli/src/Step1PropertiesMenu.cs @@ -0,0 +1,85 @@ +ο»Ώusing System; +using System.IO; +using System.Linq; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization.Cli.Utils; +using DesperateDevs.Extensions; + +namespace Jenny.Generator.Cli +{ + public class Step1PropertiesMenu : CliMenu + { + public string Properties; + + public Step1PropertiesMenu(CliProgram program, string title, string[] properties) : base(BuildTitle(title, properties)) + { + foreach (var p in properties) + AddMenuEntry(new SelectPropertiesMenuEntry(this, p.MakePathRelativeTo(Directory.GetCurrentDirectory()))); + + if (!properties.Any(p => p.EndsWith(CodeGenerator.DefaultPropertiesPath))) + AddMenuEntry(new CreateDefaultPropertiesMenuEntry(program, this)); + + AddMenuEntry(new CreateCustomPropertiesMenuEntry(program, this)); + AddMenuEntry(new ExitMenuEntry("Quit", false)); + } + + static string BuildTitle(string title, string[] properties) + { + var header = title + "\n" + + "Step 1: Properties File\n" + + "=======================\n\n" + + "Jenny saves all its configuration in a *.properties file.\n"; + + if (properties.Length == 0) + { + return header + + "No properties file was found in " + Directory.GetCurrentDirectory() + "\n" + + "Let's create this file now!\n\n" + + "Please choose how you want to proceed and press enter"; + } + else + { + return header + + "These properties files were found in " + Directory.GetCurrentDirectory() + "\n" + + string.Join("\n", properties.Select(p => "- " + p.MakePathRelativeTo(Directory.GetCurrentDirectory()))) + "\n\n" + + "Please choose how you want to proceed and press enter"; + } + } + } + + public class SelectPropertiesMenuEntry : MenuEntry + { + public SelectPropertiesMenuEntry(Step1PropertiesMenu menu, string properties) : + base("Use " + properties, null, false, () => + { + menu.Properties = properties; + menu.Stop(); + }) { } + } + + public class CreateDefaultPropertiesMenuEntry : MenuEntry + { + public CreateDefaultPropertiesMenuEntry(CliProgram progam, Step1PropertiesMenu menu) : + base("Create new " + CodeGenerator.DefaultPropertiesPath, null, false, () => + { + var command = new NewPreferencesCommand(); + command.Run(progam, new[] {command.Trigger, "-s", CodeGenerator.DefaultPropertiesPath}); + menu.Properties = CodeGenerator.DefaultPropertiesPath; + menu.Stop(); + }) { } + } + + public class CreateCustomPropertiesMenuEntry : MenuEntry + { + public CreateCustomPropertiesMenuEntry(CliProgram progam, Step1PropertiesMenu menu) : + base("Create a new properties file with a custom name", null, false, () => + { + Console.WriteLine("Please enter a file name"); + var fileName = Console.ReadLine(); + var command = new NewPreferencesCommand(); + command.Run(progam, new[] {command.Trigger, "-s", fileName}); + menu.Properties = fileName; + menu.Stop(); + }) { } + } +} diff --git a/src/Jenny.Generator.Cli/src/Step2PluginsMenu.cs b/src/Jenny.Generator.Cli/src/Step2PluginsMenu.cs new file mode 100644 index 00000000..f9e01ba1 --- /dev/null +++ b/src/Jenny.Generator.Cli/src/Step2PluginsMenu.cs @@ -0,0 +1,146 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization; + +namespace Jenny.Generator.Cli +{ + public class Step2PluginsMenu : CliMenu + { + public bool ShouldAutoImport; + + readonly bool _isVerbose; + + public Step2PluginsMenu(CliProgram program, string title, Preferences preferences, bool isVerbose) : base(BuildTitle(title)) + { + _isVerbose = isVerbose; + Console.WriteLine(title); + var config = preferences.CreateAndConfigure(); + var allPlugins = AutoImport(config); + + var pluginEntries = new List(allPlugins.Length); + + if (allPlugins.Length > 0) + { + AddMenuEntry(new AutoSaveMenuEntry(this, preferences, config)); + AddMenuEntry(new ManualSaveMenuEntry(this, preferences, config)); + + AddMenuEntry(new SelectableMenuEntry("Select all", pluginEntries.All(e => e.IsSelected), isSelected => + { + foreach (var entry in pluginEntries) + entry.IsSelected = isSelected; + })); + } + else + { + AddMenuEntry(new EditMenuEntry(program, this, preferences.PropertiesPath)); + } + + foreach (var plugin in allPlugins) + { + var localPlugin = plugin; + var entry = new SelectableMenuEntry( + localPlugin, + config.Plugins.Contains(localPlugin), + isSelected => UpdateConfig(config, localPlugin, isSelected) + ); + AddMenuEntry(entry); + pluginEntries.Add(entry); + } + + AddMenuEntry(new ExitMenuEntry("Quit", false)); + } + + string[] AutoImport(CodeGeneratorConfig config) + { + var selectedPlugins = config.Plugins; + var searchPaths = CodeGeneratorUtil.BuildSearchPaths(config.SearchPaths, new[] {"."}); + var task = Task.Run(() => CodeGeneratorUtil.AutoImport(config, searchPaths)); + + if (!_isVerbose) + { + var top = Console.CursorTop; + var spinner = new Spinner(SpinnerStyles.MagicCat); + spinner.Append("Searching for plugins. Please wait..."); + spinner.WriteWhile(0, top, () => !task.IsCompleted); + } + else + { + while (!task.IsCompleted) { } + } + + var allPlugins = config.Plugins; + config.Plugins = selectedPlugins; + return allPlugins; + } + + void UpdateConfig(CodeGeneratorConfig config, string plugin, bool isSelected) + { + var list = config.Plugins.ToList(); + if (isSelected) + list.Add(plugin); + else + list.Remove(plugin); + + config.Plugins = list + .Distinct() + .OrderBy(p => p) + .ToArray(); + } + + static string BuildTitle(string title) => + title + "\n" + + "Step 2: Plugins\n" + + "===============\n\n" + + "Plugins can contain one or more\n" + + "- PreProcessors - prepare the data source if needed\n" + + "- DataProviders - process the data source and create the model\n" + + "- CodeGenerators - read the model and generate CodeGenFiles in memory\n" + + "- PostProcessors - process the CodeGenFiles, e.g. writing to disc\n" + + "- Doctors - diagnose and fix problems\n\n" + + "FAQ:\n" + + "- No plugins found: Make sure to specify the paths to plugins in " + CodeGeneratorConfig.SearchPathsKey + + "\n\n" + + "Please select the plugins you want to activate"; + } + + public class AutoSaveMenuEntry : MenuEntry + { + public AutoSaveMenuEntry(Step2PluginsMenu menu, Preferences preferences, CodeGeneratorConfig config) : + base("Save and continue (auto import)", null, false, () => + { + config.SearchPaths = config.SearchPaths + .OrderBy(path => path) + .ToArray(); + + config.Plugins = config.Plugins + .OrderBy(path => path) + .ToArray(); + + preferences.Save(); + menu.ShouldAutoImport = true; + menu.Stop(); + }) { } + } + + public class ManualSaveMenuEntry : MenuEntry + { + public ManualSaveMenuEntry(Step2PluginsMenu menu, Preferences preferences, CodeGeneratorConfig config) : + base("Save and continue (manual import)", null, false, () => + { + config.SearchPaths = config.SearchPaths + .OrderBy(path => path) + .ToArray(); + + config.Plugins = config.Plugins + .OrderBy(path => path) + .ToArray(); + + preferences.Save(); + menu.ShouldAutoImport = false; + menu.Stop(); + }) { } + } +} diff --git a/src/Jenny.Generator.Cli/src/WizardCommand.cs b/src/Jenny.Generator.Cli/src/WizardCommand.cs new file mode 100644 index 00000000..d278bd4c --- /dev/null +++ b/src/Jenny.Generator.Cli/src/WizardCommand.cs @@ -0,0 +1,72 @@ +ο»Ώusing System; +using System.IO; +using DesperateDevs.Cli.Utils; +using DesperateDevs.Serialization; +using Sherlog; + +namespace Jenny.Generator.Cli +{ + public class WizardCommand : AbstractCommand + { + public override string Trigger => "wiz"; + public override string Description => "Setup Jenny, guided by a wizard"; + public override string Group => null; + public override string Example => "wiz"; + + readonly Logger _logger = Logger.GetLogger(typeof(WizardCommand)); + + protected override void Run() + { + const string title = ""; +// const string title = @" +// gg +// dP8, +// dP Yb +// ,8 `8, +// I8 Yb +// `8b, `8, ,ggg, ,ggg,,ggg, ,ggg,,ggg, gg gg +// `'Y88888 i8' '8i ,8' '8P' '8, ,8' '8P' '8, I8 8I +// 'Y8 I8, ,8I I8 8I 8I I8 8I 8I I8, ,8I +// ,88, `YbadP' ,dP 8I Yb,,dP 8I Yb,,d8b, ,d8I +// ,ad88888888P'Y8888P' 8I `Y88P' 8I `Y8P''Y88P'888 +// ,dP'' Yb ,d8I' +// ,8' I8 ,dP'8I +//,8' I8 ,8' 8I +//I8, ,8' A lovely .NET Code Generator I8 8I +//`Y8,___,d8' `8, ,8I +// 'Y888P' `Y8P' +//"; + + const string indent = "β†’ "; + + // Step 1: Properties + var allPreferences = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.properties", SearchOption.TopDirectoryOnly); + var propertiesMenu = new Step1PropertiesMenu(_program, title, allPreferences) + { + Indent = indent + }; + propertiesMenu.Start(); + + var preferences = new Preferences(propertiesMenu.Properties, Preferences.DefaultUserPropertiesPath); + + // Step 2: Plugins + var pluginsMenu = new Step2PluginsMenu(_program, title, preferences, _rawArgs.IsVerbose()) + { + Indent = indent + }; + pluginsMenu.Start(); + + var fixArgs = pluginsMenu.ShouldAutoImport + ? "-s" + : string.Empty; + + var fixCommand = new FixCommand(); + fixCommand.Run(_program, new[] {fixCommand.Trigger, preferences.PropertiesPath, fixArgs}); + + Console.Clear(); + + var doctorCommand = new DoctorCommand(); + doctorCommand.Run(_program, new[] {doctorCommand.Trigger, preferences.PropertiesPath}); + } + } +} diff --git a/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorMenuItems.cs b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorMenuItems.cs new file mode 100644 index 00000000..16d3c500 --- /dev/null +++ b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorMenuItems.cs @@ -0,0 +1,16 @@ +ο»Ώnamespace Jenny.Generator.Unity.Editor +{ + public static class CodeGeneratorMenuItems + { + public const string Preferences = "Tools/Jenny/Preferences... #%j"; + public const string Generate = "Tools/Jenny/Generate #%g"; + public const string GenerateServer = "Tools/Jenny/Generate with Server %&g"; + } + + public static class CodeGeneratorMenuItemPriorities + { + public const int Preferences = 1; + public const int Generate = 2; + public const int GenerateServer = 3; + } +} diff --git a/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs new file mode 100644 index 00000000..59c0c155 --- /dev/null +++ b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesDrawer.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Unity.Editor; +using DesperateDevs.Extensions; +using UnityEditor; +using UnityEngine; + +namespace Jenny.Generator.Unity.Editor +{ + public class CodeGeneratorPreferencesDrawer : AbstractPreferencesDrawer + { + public override string Title => "Jenny"; + + string[] _availablePreProcessorTypes; + string[] _availableDataProviderTypes; + string[] _availableGeneratorTypes; + string[] _availablePostProcessorTypes; + + string[] _availablePreProcessorNames; + string[] _availableDataProviderNames; + string[] _availableGeneratorNames; + string[] _availablePostProcessorNames; + + Texture2D _headerTexture; + ICodeGenerationPlugin[] _instances; + + CodeGeneratorConfig _codeGeneratorConfig; + Dictionary _defaultProperties; + + public static readonly string PropertiesPathKey = $"{Application.identifier}-{typeof(CodeGeneratorPreferencesDrawer).Namespace}.PropertiesPath"; + public static readonly string UseExternalCodeGeneratorKey = $"{typeof(CodeGeneratorPreferencesDrawer).Namespace}.UseExternalCodeGenerator"; + + bool _useExternalCodeGenerator; + bool _doDryRun; + + public override void Initialize(Preferences preferences) + { + _headerTexture = EditorLayout.LoadTexture("l:Jenny-Header"); + _codeGeneratorConfig = preferences.CreateAndConfigure(); + preferences.Properties.AddProperties(_codeGeneratorConfig.DefaultProperties, false); + + _instances = CodeGeneratorUtil.LoadFromPlugins(preferences); + + SetTypesAndNames(_instances, out _availablePreProcessorTypes, out _availablePreProcessorNames); + SetTypesAndNames(_instances, out _availableDataProviderTypes, out _availableDataProviderNames); + SetTypesAndNames(_instances, out _availableGeneratorTypes, out _availableGeneratorNames); + SetTypesAndNames(_instances, out _availablePostProcessorTypes, out _availablePostProcessorNames); + + _defaultProperties = CodeGeneratorUtil.GetDefaultProperties(_instances, _codeGeneratorConfig); + preferences.Properties.AddProperties(_defaultProperties, false); + preferences.Save(); + preferences.Reload(); + + _useExternalCodeGenerator = EditorPrefs.GetBool(UseExternalCodeGeneratorKey); + _doDryRun = EditorPrefs.GetBool(UnityCodeGenerator.DryRunKey, true); + } + + public override void DrawHeader(Preferences preferences) + { + var rect = EditorLayout.DrawTexture(_headerTexture); + var propertiesPath = Path.GetFileName(preferences.PropertiesPath); + + var buttonWidth = 60 + propertiesPath.Length * 5; + const int buttonHeight = 15; + const int padding = 4; + var buttonRect = new Rect( + rect.width - buttonWidth - padding, + rect.y + rect.height - buttonHeight - padding, + buttonWidth, + buttonHeight + ); + + if (GUI.Button(buttonRect, "Edit " + propertiesPath, EditorStyles.miniButton)) + { + EditorWindow.focusedWindow.Close(); + System.Diagnostics.Process.Start(preferences.PropertiesPath); + } + } + + protected override void OnDrawContent(Preferences preferences) + { + var path = EditorLayout.ObjectFieldOpenFilePanel( + "Properties", + preferences.PropertiesPath, + preferences.PropertiesPath, + "properties" + ); + if (!string.IsNullOrEmpty(path)) + { + EditorPrefs.SetString(PropertiesPathKey, path); + EditorWindow.focusedWindow.Close(); + CodeGeneratorPreferencesWindow.OpenPreferences(); + } + + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.LabelField("Auto Import Plugins"); + if (EditorLayout.MiniButton("Auto Import")) + AutoImport(preferences); + } + EditorGUILayout.EndHorizontal(); + + EditorGUI.BeginChangeCheck(); + { + _codeGeneratorConfig.PreProcessors = DrawMaskField("Pre Processors", _availablePreProcessorTypes, _availablePreProcessorNames, _codeGeneratorConfig.PreProcessors); + _codeGeneratorConfig.DataProviders = DrawMaskField("Data Providers", _availableDataProviderTypes, _availableDataProviderNames, _codeGeneratorConfig.DataProviders); + _codeGeneratorConfig.CodeGenerators = DrawMaskField("Code Generators", _availableGeneratorTypes, _availableGeneratorNames, _codeGeneratorConfig.CodeGenerators); + _codeGeneratorConfig.PostProcessors = DrawMaskField("Post Processors", _availablePostProcessorTypes, _availablePostProcessorNames, _codeGeneratorConfig.PostProcessors); + } + var changed = EditorGUI.EndChangeCheck(); + if (changed) + { + _defaultProperties = CodeGeneratorUtil.GetDefaultProperties(_instances, _codeGeneratorConfig); + preferences.Properties.AddProperties(_defaultProperties, false); + preferences.Save(); + preferences.Reload(); + } + + DrawConfigurables(preferences); + + EditorGUILayout.Space(); + DrawGenerateButtons(); + } + + void AutoImport(Preferences preferences) + { + var propertiesPath = Path.GetFileName(preferences.PropertiesPath); + if (EditorUtility.DisplayDialog("Jenny - Auto Import", + "Auto Import will automatically find and set all plugins for you. " + + "It will search in folders and sub folders specified in " + propertiesPath + + " under the key '" + CodeGeneratorConfig.SearchPathsKey + "'." + + "\n\nThis will overwrite your current plugin settings." + + "\n\nDo you want to continue?", + "Continue and Overwrite", + "Cancel" + )) + { + var searchPaths = CodeGeneratorUtil.BuildSearchPaths( + _codeGeneratorConfig.SearchPaths, + new[] {"./Assets", "./Library/ScriptAssemblies"} + ); + + CodeGeneratorUtil.AutoImport(_codeGeneratorConfig, searchPaths); + preferences.Save(); + + Initialize(preferences); + _codeGeneratorConfig.PreProcessors = _availablePreProcessorTypes; + _codeGeneratorConfig.DataProviders = _availableDataProviderTypes; + _codeGeneratorConfig.CodeGenerators = _availableGeneratorTypes; + _codeGeneratorConfig.PostProcessors = _availablePostProcessorTypes; + } + } + + void DrawConfigurables(Preferences preferences) + { + if (_defaultProperties.Count != 0) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Plugins Configuration", EditorStyles.boldLabel); + } + + foreach (var kvp in _defaultProperties.OrderBy(kvp => kvp.Key)) + preferences[kvp.Key] = EditorGUILayout.TextField(kvp.Key.ShortTypeName().ToSpacedCamelCase(), preferences[kvp.Key]); + } + + static void SetTypesAndNames(ICodeGenerationPlugin[] instances, out string[] availableTypes, out string[] availableNames) where T : ICodeGenerationPlugin + { + var orderedInstances = CodeGeneratorUtil.GetOrderedInstancesOf(instances); + + availableTypes = orderedInstances + .Select(instance => instance.GetType().ToCompilableString()) + .ToArray(); + + availableNames = orderedInstances + .Select(instance => instance.Name) + .ToArray(); + } + + static readonly List _selected = new List(); + + static string[] DrawMaskField(string title, string[] types, string[] names, string[] input) + { + var mask = 0; + + for (var i = 0; i < types.Length; i++) + if (input.Contains(types[i])) + mask += (1 << i); + + if (names.Length != 0) + { + var everything = (int)Math.Pow(2, types.Length) - 1; + if (mask == everything) + mask = -1; + + mask = EditorGUILayout.MaskField(title, mask, names); + } + else + { + EditorGUILayout.LabelField(title, "No " + title + " available"); + } + + _selected.Clear(); + for (var i = 0; i < types.Length; i++) + { + var index = 1 << i; + if ((index & mask) == index) + _selected.Add(types[i]); + } + + // Re-add unavailable types + _selected.AddRange(input.Where(type => !types.Contains(type))); + + return _selected.ToArray(); + } + + void DrawGenerateButtons() + { + EditorGUILayout.BeginVertical(); + { + EditorGUI.BeginChangeCheck(); + { + _useExternalCodeGenerator = EditorGUILayout.Toggle("Use Jenny Server", _useExternalCodeGenerator); + } + var useExternalCodeGeneratorChanged = EditorGUI.EndChangeCheck(); + if (useExternalCodeGeneratorChanged) + EditorPrefs.SetBool(UseExternalCodeGeneratorKey, _useExternalCodeGenerator); + + if (_useExternalCodeGenerator) + { + _codeGeneratorConfig.Port = EditorGUILayout.IntField("Port", _codeGeneratorConfig.Port); + _codeGeneratorConfig.Host = EditorGUILayout.TextField("Host", _codeGeneratorConfig.Host); + } + else + { + EditorGUI.BeginChangeCheck(); + { + _doDryRun = EditorGUILayout.Toggle("Safe Mode (Dry Run first)", _doDryRun); + } + var doDryRunChanged = EditorGUI.EndChangeCheck(); + if (doDryRunChanged) + EditorPrefs.SetBool(UnityCodeGenerator.DryRunKey, _doDryRun); + } + + var bgColor = GUI.backgroundColor; + GUI.backgroundColor = Color.green; + if (GUILayout.Button("Generate", GUILayout.Height(32))) + { + if (_useExternalCodeGenerator) + UnityCodeGenerator.GenerateExternal(); + else + UnityCodeGenerator.Generate(); + } + + GUI.backgroundColor = bgColor; + } + EditorGUILayout.EndVertical(); + } + } +} diff --git a/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs new file mode 100644 index 00000000..29d4a7c6 --- /dev/null +++ b/src/Jenny.Generator.Unity.Editor/src/CodeGeneratorPreferencesWindow.cs @@ -0,0 +1,24 @@ +ο»Ώusing DesperateDevs.Serialization; +using DesperateDevs.Unity.Editor; +using UnityEditor; +using UnityEngine; + +namespace Jenny.Generator.Unity.Editor +{ + public class CodeGeneratorPreferencesWindow : PreferencesWindow + { + [MenuItem(CodeGeneratorMenuItems.Preferences, false, CodeGeneratorMenuItemPriorities.Preferences)] + public static void OpenPreferences() + { + var window = GetWindow(true, "Jenny"); + window.minSize = new Vector2(415f, 366f); + window.Initialize( + EditorPrefs.GetString(CodeGeneratorPreferencesDrawer.PropertiesPathKey, CodeGenerator.DefaultPropertiesPath), + Preferences.DefaultUserPropertiesPath, + typeof(CodeGeneratorPreferencesDrawer).FullName + ); + + window.Show(); + } + } +} diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images/Jenny-Header.png b/src/Jenny.Generator.Unity.Editor/src/Images/Jenny-Header.png similarity index 100% rename from src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images/Jenny-Header.png rename to src/Jenny.Generator.Unity.Editor/src/Images/Jenny-Header.png diff --git a/src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images/Jenny-Header.png.meta b/src/Jenny.Generator.Unity.Editor/src/Images/Jenny-Header.png.meta similarity index 100% rename from src/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor/src/Images/Jenny-Header.png.meta rename to src/Jenny.Generator.Unity.Editor/src/Images/Jenny-Header.png.meta diff --git a/src/Jenny.Generator.Unity.Editor/src/Jenny.Generator.Unity.Editor.csproj b/src/Jenny.Generator.Unity.Editor/src/Jenny.Generator.Unity.Editor.csproj new file mode 100644 index 00000000..1ea3fb7d --- /dev/null +++ b/src/Jenny.Generator.Unity.Editor/src/Jenny.Generator.Unity.Editor.csproj @@ -0,0 +1,20 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + + + + + + + + diff --git a/src/Jenny.Generator.Unity.Editor/src/UnityCodeGenerator.cs b/src/Jenny.Generator.Unity.Editor/src/UnityCodeGenerator.cs new file mode 100644 index 00000000..7e185433 --- /dev/null +++ b/src/Jenny.Generator.Unity.Editor/src/UnityCodeGenerator.cs @@ -0,0 +1,98 @@ +ο»Ώusing System; +using System.Linq; +using System.Net.Sockets; +using System.Text; +using DesperateDevs.Serialization; +using TCPeasy; +using UnityEditor; +using UnityEngine; + +namespace Jenny.Generator.Unity.Editor +{ + public static class UnityCodeGenerator + { + public static readonly string DryRunKey = $"{typeof(UnityCodeGenerator).Namespace}.DryRun"; + + public static Preferences GetPreferences() => new Preferences( + EditorPrefs.GetString(CodeGeneratorPreferencesDrawer.PropertiesPathKey, CodeGenerator.DefaultPropertiesPath), + Preferences.DefaultUserPropertiesPath + ); + + [MenuItem(CodeGeneratorMenuItems.Generate, false, CodeGeneratorMenuItemPriorities.Generate)] + public static void Generate() + { + Debug.Log("Generating..."); + + var codeGenerator = CodeGeneratorUtil.CodeGeneratorFromPreferences(GetPreferences()); + + var progressOffset = 0f; + + codeGenerator.OnProgress += (title, info, progress) => + { + var cancel = EditorUtility.DisplayCancelableProgressBar(title, info, progressOffset + progress / 2); + if (cancel) codeGenerator.Cancel(); + }; + + CodeGenFile[] dryFiles = null; + CodeGenFile[] files = null; + + try + { + dryFiles = EditorPrefs.GetBool(DryRunKey, true) ? codeGenerator.DryRun() : Array.Empty(); + progressOffset = 0.5f; + files = codeGenerator.Generate(); + } + catch (Exception exception) + { + dryFiles = Array.Empty(); + files = Array.Empty(); + + EditorUtility.DisplayDialog("Error", exception.Message, "Ok"); + } + + EditorUtility.ClearProgressBar(); + + var totalGeneratedFiles = files.Select(file => file.FileName).Distinct().Count(); + var sloc = dryFiles.Sum(file => file.FileContent.Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries).Length); + var loc = files.Sum(file => file.FileContent.Split('\n').Length); + Debug.Log("Generated " + totalGeneratedFiles + " files (" + sloc + " sloc, " + loc + " loc)"); + + AssetDatabase.Refresh(); + } + + static string _propertiesPath; + + [MenuItem(CodeGeneratorMenuItems.GenerateServer, false, CodeGeneratorMenuItemPriorities.GenerateServer)] + public static void GenerateExternal() + { + Debug.Log("Connecting..."); + + var preferences = GetPreferences(); + _propertiesPath = preferences.PropertiesPath; + var config = preferences.CreateAndConfigure(); + var client = new TcpClientSocket(); + client.OnConnected += OnConnected; + client.OnReceived += OnReceive; + client.OnDisconnected += OnDisconnect; + client.Connect(config.Host, config.Port); + } + + static void OnConnected(TcpClientSocket client) + { + Debug.Log("Connected"); + Debug.Log("Generating..."); + client.Send(Encoding.UTF8.GetBytes("gen " + _propertiesPath)); + } + + static void OnReceive(AbstractTcpSocket socket, Socket client, byte[] bytes) + { + Debug.Log("Generated"); + socket.Disconnect(); + } + + static void OnDisconnect(AbstractTcpSocket socket) + { + Debug.Log("Disconnected"); + } + } +} diff --git a/src/Jenny.Generator/src/CodeGenerator.cs b/src/Jenny.Generator/src/CodeGenerator.cs new file mode 100644 index 00000000..4dd7d748 --- /dev/null +++ b/src/Jenny.Generator/src/CodeGenerator.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Jenny.Generator +{ + public delegate void GeneratorProgress(string title, string info, float progress); + + public class CodeGenerator + { + public static string DefaultPropertiesPath => "Jenny.properties"; + + public event GeneratorProgress OnProgress; + + readonly IPreProcessor[] _preProcessors; + readonly IDataProvider[] _dataProviders; + readonly ICodeGenerator[] _codeGenerators; + readonly IPostProcessor[] _postProcessors; + + readonly Dictionary _objectCache; + + bool _cancel; + + public CodeGenerator( + IPreProcessor[] preProcessors, + IDataProvider[] dataProviders, + ICodeGenerator[] codeGenerators, + IPostProcessor[] postProcessors) + { + _preProcessors = preProcessors.OrderBy(i => i.Order).ToArray(); + _dataProviders = dataProviders.OrderBy(i => i.Order).ToArray(); + _codeGenerators = codeGenerators.OrderBy(i => i.Order).ToArray(); + _postProcessors = postProcessors.OrderBy(i => i.Order).ToArray(); + _objectCache = new Dictionary(); + } + + public CodeGenFile[] DryRun() => Generate( + "[Dry Run] ", + _preProcessors.Where(i => i.RunInDryMode).ToArray(), + _dataProviders.Where(i => i.RunInDryMode).ToArray(), + _codeGenerators.Where(i => i.RunInDryMode).ToArray(), + _postProcessors.Where(i => i.RunInDryMode).ToArray() + ); + + public CodeGenFile[] Generate() => Generate( + string.Empty, + _preProcessors, + _dataProviders, + _codeGenerators, + _postProcessors + ); + + CodeGenFile[] Generate(string messagePrefix, + IPreProcessor[] preProcessors, + IDataProvider[] dataProviders, + ICodeGenerator[] codeGenerators, + IPostProcessor[] postProcessors) + { + _cancel = false; + + _objectCache.Clear(); + + var cachables = ((ICodeGenerationPlugin[])preProcessors) + .Concat(dataProviders) + .Concat(codeGenerators) + .Concat(postProcessors) + .OfType(); + + foreach (var cachable in cachables) + cachable.ObjectCache = _objectCache; + + var total = preProcessors.Length + dataProviders.Length + codeGenerators.Length + postProcessors.Length; + var progress = 0; + + foreach (var preProcessor in preProcessors) + { + if (_cancel) return Array.Empty(); + progress += 1; + OnProgress?.Invoke(messagePrefix + "Pre Processing", preProcessor.Name, (float)progress / total); + preProcessor.PreProcess(); + } + + var data = new List(); + foreach (var dataProvider in dataProviders) + { + if (_cancel) return Array.Empty(); + progress += 1; + OnProgress?.Invoke(messagePrefix + "Creating model", dataProvider.Name, (float)progress / total); + data.AddRange(dataProvider.GetData()); + } + + var files = new List(); + var dataArray = data.ToArray(); + foreach (var generator in codeGenerators) + { + if (_cancel) return Array.Empty(); + progress += 1; + OnProgress?.Invoke(messagePrefix + "Creating files", generator.Name, (float)progress / total); + files.AddRange(generator.Generate(dataArray)); + } + + var generatedFiles = files.ToArray(); + foreach (var postProcessor in postProcessors) + { + if (_cancel) return Array.Empty(); + progress += 1; + OnProgress?.Invoke(messagePrefix + "Post Processing", postProcessor.Name, (float)progress / total); + generatedFiles = postProcessor.PostProcess(generatedFiles); + } + + return generatedFiles; + } + + public void Cancel() => _cancel = true; + } +} diff --git a/src/Jenny.Generator/src/CodeGeneratorConfig.cs b/src/Jenny.Generator/src/CodeGeneratorConfig.cs new file mode 100644 index 00000000..b5e373bc --- /dev/null +++ b/src/Jenny.Generator/src/CodeGeneratorConfig.cs @@ -0,0 +1,92 @@ +ο»Ώusing System.Collections.Generic; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Extensions; + +namespace Jenny.Generator +{ + public class CodeGeneratorConfig : AbstractConfigurableConfig + { + public const string SearchPathsKey = "Jenny.SearchPaths"; + public const string PluginsPathsKey = "Jenny.Plugins"; + + public const string PreProcessorsKey = "Jenny.PreProcessors"; + public const string DataProvidersKey = "Jenny.DataProviders"; + public const string CodeGeneratorsKey = "Jenny.CodeGenerators"; + public const string PostProcessorsKey = "Jenny.PostProcessors"; + + public const string PortKey = "Jenny.Server.Port"; + public const string HostKey = "Jenny.Client.Host"; + + public override Dictionary DefaultProperties => new Dictionary + { + {SearchPathsKey, string.Empty}, + {PluginsPathsKey, string.Empty}, + {PreProcessorsKey, string.Empty}, + {DataProvidersKey, string.Empty}, + {CodeGeneratorsKey, string.Empty}, + {PostProcessorsKey, string.Empty}, + {PortKey, "3333"}, + {HostKey, "localhost"} + }; + + readonly bool _minified; + readonly bool _removeEmptyEntries; + + public CodeGeneratorConfig() : this(false, true) { } + + public CodeGeneratorConfig(bool minified, bool removeEmptyEntries) + { + _minified = minified; + _removeEmptyEntries = removeEmptyEntries; + } + + public string[] SearchPaths + { + get => _preferences[SearchPathsKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[SearchPathsKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public string[] Plugins + { + get => _preferences[PluginsPathsKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[PluginsPathsKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public string[] PreProcessors + { + get => _preferences[PreProcessorsKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[PreProcessorsKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public string[] DataProviders + { + get => _preferences[DataProvidersKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[DataProvidersKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public string[] CodeGenerators + { + get => _preferences[CodeGeneratorsKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[CodeGeneratorsKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public string[] PostProcessors + { + get => _preferences[PostProcessorsKey].FromCSV(_removeEmptyEntries).ToArray(); + set => _preferences[PostProcessorsKey] = value.ToCSV(_minified, _removeEmptyEntries); + } + + public int Port + { + get => int.Parse(_preferences[PortKey]); + set => _preferences[PortKey] = value.ToString(); + } + + public string Host + { + get => _preferences[HostKey]; + set => _preferences[HostKey] = value; + } + } +} diff --git a/src/Jenny.Generator/src/CodeGeneratorUtil.cs b/src/Jenny.Generator/src/CodeGeneratorUtil.cs new file mode 100644 index 00000000..ccc2a2df --- /dev/null +++ b/src/Jenny.Generator/src/CodeGeneratorUtil.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Extensions; +using DesperateDevs.Reflection; +using Sherlog; + +namespace Jenny.Generator +{ + public static class CodeGeneratorUtil + { + static readonly Logger _logger = Logger.GetLogger(typeof(CodeGeneratorUtil).FullName); + + public static CodeGenerator CodeGeneratorFromPreferences(Preferences preferences) + { + var instances = LoadFromPlugins(preferences); + var config = preferences.CreateAndConfigure(); + + var preProcessors = GetEnabledInstancesOf(instances, config.PreProcessors); + var dataProviders = GetEnabledInstancesOf(instances, config.DataProviders); + var codeGenerators = GetEnabledInstancesOf(instances, config.CodeGenerators); + var postProcessors = GetEnabledInstancesOf(instances, config.PostProcessors); + + Configure(preProcessors, preferences); + Configure(dataProviders, preferences); + Configure(codeGenerators, preferences); + Configure(postProcessors, preferences); + + return new CodeGenerator(preProcessors, dataProviders, codeGenerators, postProcessors); + } + + static void Configure(ICodeGenerationPlugin[] plugins, Preferences preferences) + { + foreach (var plugin in plugins.OfType()) + plugin.Configure(preferences); + } + + public static ICodeGenerationPlugin[] LoadFromPlugins(Preferences preferences) + { + var config = preferences.CreateAndConfigure(); + var resolver = new AssemblyResolver(config.SearchPaths); + foreach (var path in config.Plugins) + resolver.Load(path); + + resolver.Dispose(); + + return resolver.GetTypes() + .GetNonAbstractTypes() + .Select(type => + { + try + { + return (ICodeGenerationPlugin)Activator.CreateInstance(type); + } + catch (TypeLoadException exception) + { + _logger.Warn(exception.Message); + } + + return null; + }) + .Where(instance => instance != null) + .ToArray(); + } + + public static T[] GetOrderedInstancesOf(ICodeGenerationPlugin[] instances) where T : ICodeGenerationPlugin => instances + .OfType() + .OrderBy(instance => instance.Order) + .ThenBy(instance => instance.GetType().ToCompilableString()) + .ToArray(); + + public static string[] GetOrderedTypeNamesOf(ICodeGenerationPlugin[] instances) where T : ICodeGenerationPlugin => + GetOrderedInstancesOf(instances) + .Select(instance => instance.GetType().ToCompilableString()) + .ToArray(); + + public static T[] GetEnabledInstancesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin => + GetOrderedInstancesOf(instances) + .Where(instance => typeNames.Contains(instance.GetType().ToCompilableString())) + .ToArray(); + + public static string[] GetAvailableNamesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin => + GetOrderedTypeNamesOf(instances) + .Where(typeName => !typeNames.Contains(typeName)) + .ToArray(); + + public static string[] GetUnavailableNamesOf(ICodeGenerationPlugin[] instances, string[] typeNames) where T : ICodeGenerationPlugin + { + var orderedTypeNames = GetOrderedTypeNamesOf(instances); + return typeNames + .Where(typeName => !orderedTypeNames.Contains(typeName)) + .ToArray(); + } + + public static Dictionary GetDefaultProperties(ICodeGenerationPlugin[] instances, CodeGeneratorConfig config) => + new Dictionary().Merge( + GetEnabledInstancesOf(instances, config.PreProcessors).OfType() + .Concat(GetEnabledInstancesOf(instances, config.DataProviders).OfType()) + .Concat(GetEnabledInstancesOf(instances, config.CodeGenerators).OfType()) + .Concat(GetEnabledInstancesOf(instances, config.PostProcessors).OfType()) + .Select(instance => instance.DefaultProperties)); + + public static string[] BuildSearchPaths(string[] searchPaths, string[] additionalSearchPaths) => searchPaths + .Concat(additionalSearchPaths) + .Where(Directory.Exists) + .ToArray(); + + public static void AutoImport(CodeGeneratorConfig config, params string[] searchPaths) + { + var assemblyPaths = AssemblyResolver + .LoadAssemblies(true, searchPaths) + .GetTypes() + .GetNonAbstractTypes() + .Select(type => type.Assembly) + .Distinct() + .Select(assembly => assembly.CodeBase.MakePathRelativeTo(Directory.GetCurrentDirectory())) + .ToArray(); + + var currentFullPaths = new HashSet(config.SearchPaths.Select(Path.GetFullPath)); + var newPaths = assemblyPaths + .Select(Path.GetDirectoryName) + .Where(path => !currentFullPaths.Contains(path)); + + config.SearchPaths = config.SearchPaths + .Concat(newPaths) + .Distinct() + .OrderBy(path => path) + .ToArray(); + + config.Plugins = assemblyPaths + .Select(Path.GetFileNameWithoutExtension) + .Distinct() + .OrderBy(plugin => plugin) + .ToArray(); + } + } +} diff --git a/src/Jenny.Generator/src/Jenny.Generator.csproj b/src/Jenny.Generator/src/Jenny.Generator.csproj new file mode 100644 index 00000000..09c857fc --- /dev/null +++ b/src/Jenny.Generator/src/Jenny.Generator.csproj @@ -0,0 +1,15 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + + + diff --git a/src/Jenny.Generator/tests/CodeGeneratorTests.cs b/src/Jenny.Generator/tests/CodeGeneratorTests.cs new file mode 100644 index 00000000..dc46587e --- /dev/null +++ b/src/Jenny.Generator/tests/CodeGeneratorTests.cs @@ -0,0 +1,526 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions; +using Jenny; +using Xunit; + +namespace Jenny.Generator.Tests +{ + public class CodeGeneratorTests + { + [Fact] + public void ExecutesPreProcessorsDataProvidersGeneratorsAndPostProcessors() + { + var preStr = new List(); + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(preStr)}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + var files = generator.Generate(); + + preStr.Should().HaveCount(1); + preStr[0].Should().Be("Pre1"); + + files.Should().HaveCount(2); + + files[0].FileName.Should().Be("Test1File0-Processed1"); + files[0].FileContent.Should().Be("data1"); + + files[1].FileName.Should().Be("Test1File1-Processed1"); + files[1].FileContent.Should().Be("data2"); + } + + [Fact] + public void UsesReturnedCodeGenFiles() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor(), new NoFilesPostProcessor()} + ); + + var files = generator.Generate(); + files.Should().HaveCount(1); + files[0].FileName.Should().Be("Test1File0-Processed1"); + } + + [Fact] + public void SkipsPluginsWhichDoNotRunInDryRun() + { + var preStr = new List(); + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(preStr), new DisabledPreProcessor(preStr)}, + new IDataProvider[] {new Data_1_2_Provider(), new DisabledDataProvider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator(), new DisabledCodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor(), new DisabledPostProcessor()} + ); + + var files = generator.DryRun(); + + preStr.Should().HaveCount(1); + preStr[0].Should().Be("Pre1"); + + files.Should().HaveCount(2); + + files[0].FileName.Should().Be("Test1File0-Processed1"); + files[1].FileName.Should().Be("Test1File1-Processed1"); + } + + [Fact] + public void RunsPreProcessorsBasedOnOrder() + { + var preStr = new List(); + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre2PreProcessor(preStr), new Pre1PreProcessor(preStr)}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + generator.Generate(); + + preStr.Should().HaveCount(2); + preStr[0].Should().Be("Pre1"); + preStr[1].Should().Be("Pre2"); + } + + [Fact] + public void RunsDataProviderBasedOnOrder() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_3_4_Provider(), new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + var files = generator.Generate(); + + files.Should().HaveCount(4); + + files[0].FileName.Should().Be("Test1File0-Processed1"); + files[0].FileContent.Should().Be("data1"); + + files[1].FileName.Should().Be("Test1File1-Processed1"); + files[1].FileContent.Should().Be("data2"); + + files[2].FileName.Should().Be("Test1File2-Processed1"); + files[2].FileContent.Should().Be("data3"); + + files[3].FileName.Should().Be("Test1File3-Processed1"); + files[3].FileContent.Should().Be("data4"); + } + + [Fact] + public void RunsCodeGeneratorsBasedOnOrder() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile2CodeGenerator(), new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + var files = generator.Generate(); + + files.Should().HaveCount(4); + + files[0].FileName.Should().Be("Test1File0-Processed1"); + files[1].FileName.Should().Be("Test1File1-Processed1"); + files[2].FileName.Should().Be("Test2File0-Processed1"); + files[3].FileName.Should().Be("Test2File1-Processed1"); + } + + [Fact] + public void RunsPostProcessorsBasedOnOrder() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed2PostProcessor(), new Processed1PostProcessor()} + ); + + var files = generator.Generate(); + + files.Should().HaveCount(2); + + files[0].FileName.Should().Be("Test1File0-Processed1-Processed2"); + files[1].FileName.Should().Be("Test1File1-Processed1-Processed2"); + } + + [Fact] + public void CancelsRun() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + generator.OnProgress += delegate { generator.Cancel(); }; + + var files = generator.Generate(); + + files.Should().HaveCount(0); + } + + [Fact] + public void CancelsDryRun() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + generator.OnProgress += delegate { generator.Cancel(); }; + + var files = generator.DryRun(); + + files.Should().HaveCount(0); + } + + [Fact] + public void CanGenerateAgainAfterCancel() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + void OnProgress(string title, string info, float progress) => generator.Cancel(); + + generator.OnProgress += OnProgress; + + generator.Generate(); + + generator.OnProgress -= OnProgress; + + var files = generator.Generate(); + + files.Should().HaveCount(2); + } + + [Fact] + public void CanDoDryRunAgainAfterCancel() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new Data_1_2_Provider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + void OnProgress(string title, string info, float progress) => generator.Cancel(); + + generator.OnProgress += OnProgress; + + generator.Generate(); + + generator.OnProgress -= OnProgress; + + var files = generator.DryRun(); + + files.Should().HaveCount(2); + } + + [Fact] + public void RegistersObjectInSharedCache() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new CachableProvider(), new CachableProvider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + var files = generator.Generate(); + files.Should().HaveCount(2); + files[0].FileContent.Should().Be(files[1].FileContent); + } + + [Fact] + public void ResetsCacheBeforeEachNewRun() + { + var generator = new CodeGenerator( + new IPreProcessor[] {new Pre1PreProcessor(new List())}, + new IDataProvider[] {new CachableProvider(), new CachableProvider()}, + new ICodeGenerator[] {new DataFile1CodeGenerator()}, + new IPostProcessor[] {new Processed1PostProcessor()} + ); + + var result1 = generator.Generate()[0].FileContent; + var result2 = generator.Generate()[0].FileContent; + result1.Should().NotBe(result2); + } + } +} + +public class Data_1_2_Provider : IDataProvider +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => true; + + public CodeGeneratorData[] GetData() + { + var data1 = new CodeGeneratorData(); + data1.Add("testKey", "data1"); + + var data2 = new CodeGeneratorData(); + data2.Add("testKey", "data2"); + + return new[] + { + data1, + data2 + }; + } +} + +public class Data_3_4_Provider : IDataProvider +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => true; + + public CodeGeneratorData[] GetData() + { + var data1 = new CodeGeneratorData(); + data1.Add("testKey", "data3"); + + var data2 = new CodeGeneratorData(); + data2.Add("testKey", "data4"); + + return new[] + { + data1, + data2 + }; + } +} + +public class DisabledDataProvider : IDataProvider +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => false; + + public CodeGeneratorData[] GetData() + { + var data1 = new CodeGeneratorData(); + data1.Add("testKey", "data5"); + + var data2 = new CodeGeneratorData(); + data2.Add("testKey", "data6"); + + return new[] + { + data1, + data2 + }; + } +} + +public class DataFile1CodeGenerator : ICodeGenerator +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => true; + + public CodeGenFile[] Generate(CodeGeneratorData[] data) + { + return data + .Select((d, i) => new CodeGenFile( + "Test1File" + i, + d["testKey"].ToString(), + "Test1CodeGenerator" + )).ToArray(); + } +} + +public class DataFile2CodeGenerator : ICodeGenerator +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => true; + + public CodeGenFile[] Generate(CodeGeneratorData[] data) + { + return data + .Select((d, i) => new CodeGenFile( + "Test2File" + i, + d["testKey"].ToString(), + "Test2CodeGenerator" + )).ToArray(); + } +} + +public class DisabledCodeGenerator : ICodeGenerator +{ + public string Name => ""; + public int Order => -5; + public bool RunInDryMode => false; + + public CodeGenFile[] Generate(CodeGeneratorData[] data) + { + return data + .Select((d, i) => new CodeGenFile( + "Test3File" + i, + d["testKey"].ToString(), + "DisabledCodeGenerator" + )).ToArray(); + } +} + +public class Processed1PostProcessor : IPostProcessor +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + { + file.FileName += "-Processed1"; + } + + return files; + } +} + +public class Processed2PostProcessor : IPostProcessor +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + { + file.FileName += "-Processed2"; + } + + return files; + } +} + +public class DisabledPostProcessor : IPostProcessor +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => false; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + { + file.FileName += "-Disabled"; + } + + return files; + } +} + +public class NoFilesPostProcessor : IPostProcessor +{ + public string Name => ""; + public int Order => -5; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + return new[] {files[0]}; + } +} + +public class CachableProvider : IDataProvider, ICachable +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => true; + + public Dictionary ObjectCache { get; set; } + + public CodeGeneratorData[] GetData() + { + object o; + if (!ObjectCache.TryGetValue("myObject", out o)) + { + o = new object(); + ObjectCache.Add("myObject", o); + } + + var data = new CodeGeneratorData(); + data.Add("testKey", o.GetHashCode()); + return new[] {data}; + } +} + +public class Pre1PreProcessor : IPreProcessor +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => true; + + List _strings; + + public Pre1PreProcessor(List strings) + { + _strings = strings; + } + + public void PreProcess() + { + _strings.Add("Pre1"); + } +} + +public class Pre2PreProcessor : IPreProcessor +{ + public string Name => ""; + public int Order => 5; + public bool RunInDryMode => true; + + List _strings; + + public Pre2PreProcessor(List strings) + { + _strings = strings; + } + + public void PreProcess() + { + _strings.Add("Pre2"); + } +} + +public class DisabledPreProcessor : IPreProcessor +{ + public string Name => ""; + public int Order => 0; + public bool RunInDryMode => false; + + List _strings; + + public DisabledPreProcessor(List strings) + { + _strings = strings; + } + + public void PreProcess() + { + _strings.Add("DisabledPre"); + } +} diff --git a/src/Jenny.Generator/tests/CodeGeneratorUtilTests.cs b/src/Jenny.Generator/tests/CodeGeneratorUtilTests.cs new file mode 100644 index 00000000..de352444 --- /dev/null +++ b/src/Jenny.Generator/tests/CodeGeneratorUtilTests.cs @@ -0,0 +1,45 @@ +ο»Ώusing System.IO; +using DesperateDevs.Serialization.Tests.Fixtures; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace Jenny.Generator.Tests +{ + public class CodeGeneratorUtilTests + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + + static readonly string SearchPaths = Path.Combine( + "src", "Jenny.Generator", "tests", "fixtures" + ); + + readonly CodeGeneratorConfig _config; + + public CodeGeneratorUtilTests() + { + _config = new CodeGeneratorConfig(); + var preferences = new TestPreferences(string.Empty); + preferences.Properties.AddProperties(_config.DefaultProperties, true); + _config.Configure(preferences); + } + + [Fact(Skip = "Add project to build test plugin dlls")] + public void UpdatesSearchPathsInCodeGeneratorConfig() + { + CodeGeneratorUtil.AutoImport(_config, Path.Combine(ProjectRoot, SearchPaths, "/TestPlugins")); + _config.SearchPaths.Should().HaveCount(2); + _config.SearchPaths[0].Should().Be(SearchPaths + "/TestPlugins/One"); + _config.SearchPaths[1].Should().Be(SearchPaths + "/TestPlugins/Two"); + } + + [Fact(Skip = "Add project to build test plugin dlls")] + public void UpdatesSearchPathsWhenPathContainsSpaces() + { + CodeGeneratorUtil.AutoImport(_config, Path.Combine(ProjectRoot, SearchPaths, "/Test Plugins")); + _config.SearchPaths.Should().HaveCount(2); + _config.SearchPaths[0].Should().Be(SearchPaths + "/Test Plugins/One"); + _config.SearchPaths[1].Should().Be(SearchPaths + "/Test Plugins/Two"); + } + } +} diff --git a/src/Jenny.Generator/tests/Jenny.Generator.Tests.csproj b/src/Jenny.Generator/tests/Jenny.Generator.Tests.csproj new file mode 100644 index 00000000..ef63cf3f --- /dev/null +++ b/src/Jenny.Generator/tests/Jenny.Generator.Tests.csproj @@ -0,0 +1,24 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + + diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.Plugins.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.Plugins.dll new file mode 100644 index 00000000..f84da5ca Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.Plugins.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.dll new file mode 100644 index 00000000..fff80316 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.CodeGen.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Extensions.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Extensions.dll new file mode 100644 index 00000000..c590eda9 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Extensions.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Logging.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Logging.dll new file mode 100644 index 00000000..2c5575d0 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Logging.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Serialization.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Serialization.dll new file mode 100644 index 00000000..fc58fc47 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/One/DesperateDevs.Serialization.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll new file mode 100644 index 00000000..8ff92100 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll new file mode 100644 index 00000000..b02a12f4 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.dll new file mode 100644 index 00000000..fff80316 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.CodeGen.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Extensions.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Extensions.dll new file mode 100644 index 00000000..c590eda9 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Extensions.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Logging.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Logging.dll new file mode 100644 index 00000000..2c5575d0 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Logging.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Reflection.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Reflection.dll new file mode 100644 index 00000000..ce9e4e38 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Reflection.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll new file mode 100644 index 00000000..fc58fc47 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/Test Plugins/Two/DesperateDevs.Serialization.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.Plugins.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.Plugins.dll new file mode 100644 index 00000000..f84da5ca Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.Plugins.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.dll new file mode 100644 index 00000000..fff80316 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.CodeGen.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Extensions.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Extensions.dll new file mode 100644 index 00000000..c590eda9 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Extensions.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Logging.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Logging.dll new file mode 100644 index 00000000..2c5575d0 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Logging.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Serialization.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Serialization.dll new file mode 100644 index 00000000..fc58fc47 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/One/DesperateDevs.Serialization.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll new file mode 100644 index 00000000..8ff92100 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.CodeGenerator.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll new file mode 100644 index 00000000..b02a12f4 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.Unity.Plugins.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.dll new file mode 100644 index 00000000..fff80316 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.CodeGen.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Extensions.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Extensions.dll new file mode 100644 index 00000000..c590eda9 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Extensions.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Logging.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Logging.dll new file mode 100644 index 00000000..2c5575d0 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Logging.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Reflection.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Reflection.dll new file mode 100644 index 00000000..ce9e4e38 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Reflection.dll differ diff --git a/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll new file mode 100644 index 00000000..fc58fc47 Binary files /dev/null and b/src/Jenny.Generator/tests/fixtures/TestPlugins/Two/DesperateDevs.Serialization.dll differ diff --git a/src/Jenny.Plugins.Roslyn/src/Jenny.Plugins.Roslyn.csproj b/src/Jenny.Plugins.Roslyn/src/Jenny.Plugins.Roslyn.csproj new file mode 100644 index 00000000..2d5ec5d8 --- /dev/null +++ b/src/Jenny.Plugins.Roslyn/src/Jenny.Plugins.Roslyn.csproj @@ -0,0 +1,13 @@ +ο»Ώ + + + $(DefaultNetTargetFramework) + 1.0.0 + true + + + + + + + diff --git a/src/Jenny.Plugins.Roslyn/src/PluginUtil.cs b/src/Jenny.Plugins.Roslyn/src/PluginUtil.cs new file mode 100644 index 00000000..a62fc433 --- /dev/null +++ b/src/Jenny.Plugins.Roslyn/src/PluginUtil.cs @@ -0,0 +1,21 @@ +ο»Ώusing System.Collections.Generic; +using DesperateDevs.Roslyn; + +namespace Jenny.Plugins.Roslyn +{ + public static class PluginUtil + { + public static readonly string ProjectParserKey = $"{typeof(PluginUtil).Namespace}.ProjectParser"; + + public static ProjectParser GetCachedProjectParser(Dictionary objectCache, string projectPath) + { + if (!objectCache.TryGetValue(ProjectParserKey, out var cachedProjectParser)) + { + cachedProjectParser = new ProjectParser(projectPath); + objectCache.Add(ProjectParserKey, cachedProjectParser); + } + + return (ProjectParser)cachedProjectParser; + } + } +} diff --git a/src/Jenny.Plugins.Unity/src/DebugLogDoctor.cs b/src/Jenny.Plugins.Unity/src/DebugLogDoctor.cs new file mode 100644 index 00000000..ba0add9a --- /dev/null +++ b/src/Jenny.Plugins.Unity/src/DebugLogDoctor.cs @@ -0,0 +1,62 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Reflection; +using Jenny.Generator; + +namespace Jenny.Plugins.Unity +{ + public class DebugLogDoctor : IDoctor, IConfigurable + { + public string Name => "Debug.Log"; + public int Order => 0; + public bool RunInDryMode => true; + + public Dictionary DefaultProperties => new Dictionary(); + + readonly CodeGeneratorConfig _codeGeneratorConfig = new CodeGeneratorConfig(); + + public void Configure(Preferences preferences) + { + _codeGeneratorConfig.Configure(preferences); + } + + public Diagnosis Diagnose() + { + var isStandalone = AppDomain.CurrentDomain + .GetAllTypes() + .Any(type => type.FullName == "Jenny.Generator.Cli.Program"); + + if (isStandalone) + { + var typeName = typeof(DebugLogPostProcessor).FullName; + if (_codeGeneratorConfig.PostProcessors.Contains(typeName)) + { + return new Diagnosis( + typeName + " uses Unity APIs but is used outside of Unity!", + "Remove " + typeName + " from CodeGenerator.PostProcessors", + DiagnosisSeverity.Error + ); + } + } + + return Diagnosis.Healthy; + } + + public bool ApplyFix() + { + var postProcessorList = _codeGeneratorConfig.PostProcessors.ToList(); + var removed = postProcessorList.Remove(typeof(DebugLogPostProcessor).FullName); + if (removed) + { + _codeGeneratorConfig.PostProcessors = postProcessorList.ToArray(); + return true; + } + else + { + return false; + } + } + } +} diff --git a/src/Jenny.Plugins.Unity/src/DebugLogPostProcessor.cs b/src/Jenny.Plugins.Unity/src/DebugLogPostProcessor.cs new file mode 100644 index 00000000..b97710e3 --- /dev/null +++ b/src/Jenny.Plugins.Unity/src/DebugLogPostProcessor.cs @@ -0,0 +1,22 @@ +using System.Linq; +using UnityEngine; + +namespace Jenny.Plugins.Unity +{ + public class DebugLogPostProcessor : IPostProcessor + { + public string Name => "Debug.Log generated files"; + public int Order => 200; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + Debug.Log(files.Aggregate( + string.Empty, + (acc, file) => $"{acc}{file.FileName} - {file.GeneratorName}\n") + ); + + return files; + } + } +} diff --git a/src/Jenny.Plugins.Unity/src/Jenny.Plugins.Unity.csproj b/src/Jenny.Plugins.Unity/src/Jenny.Plugins.Unity.csproj new file mode 100644 index 00000000..c3f8e7cd --- /dev/null +++ b/src/Jenny.Plugins.Unity/src/Jenny.Plugins.Unity.csproj @@ -0,0 +1,17 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + + + + + diff --git a/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsDoctor.cs b/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsDoctor.cs new file mode 100644 index 00000000..8f0f6999 --- /dev/null +++ b/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsDoctor.cs @@ -0,0 +1,62 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Reflection; +using Jenny.Generator; + +namespace Jenny.Plugins.Unity +{ + public class WarnIfCompilationErrorsDoctor : IDoctor, IConfigurable + { + public string Name => "Warn If Compilation Errors"; + public int Order => 0; + public bool RunInDryMode => true; + + public Dictionary DefaultProperties => new Dictionary(); + + readonly CodeGeneratorConfig _codeGeneratorConfig = new CodeGeneratorConfig(); + + public void Configure(Preferences preferences) + { + _codeGeneratorConfig.Configure(preferences); + } + + public Diagnosis Diagnose() + { + var isStandalone = AppDomain.CurrentDomain + .GetAllTypes() + .Any(type => type.FullName == "Jenny.Generator.Cli.Program"); + + if (isStandalone) + { + var typeName = typeof(WarnIfCompilationErrorsPreProcessor).FullName; + if (_codeGeneratorConfig.PreProcessors.Contains(typeName)) + { + return new Diagnosis( + typeName + " uses Unity APIs but is used outside of Unity!", + "Remove " + typeName + " from CodeGenerator.PreProcessors", + DiagnosisSeverity.Error + ); + } + } + + return Diagnosis.Healthy; + } + + public bool ApplyFix() + { + var preProcessorList = _codeGeneratorConfig.PreProcessors.ToList(); + var removed = preProcessorList.Remove(typeof(WarnIfCompilationErrorsPreProcessor).FullName); + if (removed) + { + _codeGeneratorConfig.PreProcessors = preProcessorList.ToArray(); + return true; + } + else + { + return false; + } + } + } +} diff --git a/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsPreProcessor.cs b/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsPreProcessor.cs new file mode 100644 index 00000000..784da515 --- /dev/null +++ b/src/Jenny.Plugins.Unity/src/WarnIfCompilationErrorsPreProcessor.cs @@ -0,0 +1,34 @@ +ο»Ώusing System; +using UnityEditor; + +namespace Jenny.Plugins.Unity +{ + public class WarnIfCompilationErrorsPreProcessor : IPreProcessor + { + public string Name => "Warn If Compilation Errors"; + public int Order => -5; + public bool RunInDryMode => true; + + public void PreProcess() + { + string errorMessage = null; + if (EditorApplication.isCompiling) + { + errorMessage = "Cannot generate because Unity is still compiling. Please wait..."; + } + + var assembly = typeof(Editor).Assembly; + + var logEntries = assembly.GetType("UnityEditorInternal.LogEntries") + ?? assembly.GetType("UnityEditor.LogEntries"); + + logEntries.GetMethod("Clear").Invoke(new object(), null); + var canCompile = (int)logEntries.GetMethod("GetCount").Invoke(new object(), null) == 0; + if (!canCompile) + errorMessage = "There are compilation errors! Please fix all errors first."; + + if (errorMessage != null) + throw new Exception($"{errorMessage}\n\nYou can disable this warning by removing '{Name}' from the Pre Processors."); + } + } +} diff --git a/src/Jenny.Plugins/src/AddFileHeaderPostProcessor.cs b/src/Jenny.Plugins/src/AddFileHeaderPostProcessor.cs new file mode 100644 index 00000000..084a2ecb --- /dev/null +++ b/src/Jenny.Plugins/src/AddFileHeaderPostProcessor.cs @@ -0,0 +1,28 @@ +namespace Jenny.Plugins +{ + public class AddFileHeaderPostProcessor : IPostProcessor + { + public string Name => "Add file header"; + public int Order => 0; + public bool RunInDryMode => true; + + public const string AutoGeneratedHeaderFormat = + @"//------------------------------------------------------------------------------ +// +// This code was generated by {0}. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +"; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + file.FileContent = string.Format(AutoGeneratedHeaderFormat, file.GeneratorName) + file.FileContent; + + return files; + } + } +} diff --git a/src/Jenny.Plugins/src/CleanTargetDirectoryPostProcessor.cs b/src/Jenny.Plugins/src/CleanTargetDirectoryPostProcessor.cs new file mode 100644 index 00000000..20a57344 --- /dev/null +++ b/src/Jenny.Plugins/src/CleanTargetDirectoryPostProcessor.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using System.IO; +using DesperateDevs.Serialization; +using Sherlog; + +namespace Jenny.Plugins +{ + public class CleanTargetDirectoryPostProcessor : IPostProcessor, IConfigurable + { + public string Name => "Clean target directory"; + public int Order => 0; + public bool RunInDryMode => false; + + public Dictionary DefaultProperties => _targetDirectoryConfig.DefaultProperties; + + readonly Logger _logger = Logger.GetLogger(typeof(CleanTargetDirectoryPostProcessor)); + + readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); + + public void Configure(Preferences preferences) + { + _targetDirectoryConfig.Configure(preferences); + } + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + CleanDir(); + return files; + } + + void CleanDir() + { + if (Directory.Exists(_targetDirectoryConfig.TargetDirectory)) + { + var files = new DirectoryInfo(_targetDirectoryConfig.TargetDirectory).GetFiles("*.cs", SearchOption.AllDirectories); + foreach (var file in files) + { + try + { + File.Delete(file.FullName); + } + catch + { + _logger.Error("Could not delete file " + file); + } + } + } + else + { + Directory.CreateDirectory(_targetDirectoryConfig.TargetDirectory); + } + } + } +} diff --git a/src/Jenny.Plugins/src/ConsoleWriteLinePostProcessor.cs b/src/Jenny.Plugins/src/ConsoleWriteLinePostProcessor.cs new file mode 100644 index 00000000..2d088cf9 --- /dev/null +++ b/src/Jenny.Plugins/src/ConsoleWriteLinePostProcessor.cs @@ -0,0 +1,22 @@ +using System; +using System.Linq; + +namespace Jenny.Plugins +{ + public class ConsoleWriteLinePostProcessor : IPostProcessor + { + public string Name => "Console.WriteLine generated files"; + public int Order => 200; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + Console.WriteLine(files.Aggregate( + string.Empty, + (acc, file) => $"{acc}{file.FileName} - {file.GeneratorName}\n") + ); + + return files; + } + } +} diff --git a/src/Jenny.Plugins/src/Jenny.Plugins.csproj b/src/Jenny.Plugins/src/Jenny.Plugins.csproj new file mode 100644 index 00000000..a3d366e5 --- /dev/null +++ b/src/Jenny.Plugins/src/Jenny.Plugins.csproj @@ -0,0 +1,14 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + + diff --git a/src/Jenny.Plugins/src/MergeFilesPostProcessor.cs b/src/Jenny.Plugins/src/MergeFilesPostProcessor.cs new file mode 100644 index 00000000..7aa93011 --- /dev/null +++ b/src/Jenny.Plugins/src/MergeFilesPostProcessor.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Jenny.Plugins +{ + public class MergeFilesPostProcessor : IPostProcessor + { + public string Name => "Merge files"; + public int Order => 90; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + var pathToFile = new Dictionary(); + for (var i = 0; i < files.Length; i++) + { + var file = files[i]; + if (!pathToFile.ContainsKey(file.FileName)) + { + pathToFile.Add(file.FileName, file); + } + else + { + pathToFile[file.FileName].FileContent += "\n" + file.FileContent; + pathToFile[file.FileName].GeneratorName += ", " + file.GeneratorName; + files[i] = null; + } + } + + return files + .Where(file => file != null) + .ToArray(); + } + } +} diff --git a/src/Jenny.Plugins/src/NewLinePostProcessor.cs b/src/Jenny.Plugins/src/NewLinePostProcessor.cs new file mode 100644 index 00000000..10adf1ad --- /dev/null +++ b/src/Jenny.Plugins/src/NewLinePostProcessor.cs @@ -0,0 +1,17 @@ +namespace Jenny.Plugins +{ + public class NewLinePostProcessor : IPostProcessor + { + public string Name => "Convert to Windows newlines"; + public int Order => 95; + public bool RunInDryMode => true; + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + file.FileContent = file.FileContent.Replace("\n", "\r\n"); + + return files; + } + } +} diff --git a/src/Jenny.Plugins/src/ProjectPathConfig.cs b/src/Jenny.Plugins/src/ProjectPathConfig.cs new file mode 100644 index 00000000..871eb104 --- /dev/null +++ b/src/Jenny.Plugins/src/ProjectPathConfig.cs @@ -0,0 +1,17 @@ +ο»Ώusing System.Collections.Generic; +using DesperateDevs.Serialization; + +namespace Jenny.Plugins +{ + public class ProjectPathConfig : AbstractConfigurableConfig + { + readonly string _projectPathKey = $"{typeof(ProjectPathConfig).Namespace}.ProjectPath"; + + public override Dictionary DefaultProperties => new Dictionary + { + {_projectPathKey, "Assembly-CSharp.csproj"} + }; + + public string ProjectPath => _preferences[_projectPathKey]; + } +} diff --git a/src/Jenny.Plugins/src/TargetDirectoryConfig.cs b/src/Jenny.Plugins/src/TargetDirectoryConfig.cs new file mode 100644 index 00000000..fd82df19 --- /dev/null +++ b/src/Jenny.Plugins/src/TargetDirectoryConfig.cs @@ -0,0 +1,35 @@ +ο»Ώusing System; +using System.Collections.Generic; +using DesperateDevs.Serialization; + +namespace Jenny.Plugins +{ + public class TargetDirectoryConfig : AbstractConfigurableConfig + { + readonly string _targetDirectoryKey = $"{typeof(TargetDirectoryConfig).Namespace}.TargetDirectory"; + + public override Dictionary DefaultProperties => new Dictionary + { + {_targetDirectoryKey, "Assets"} + }; + + public string TargetDirectory => _preferences[_targetDirectoryKey].ToSafeDirectory(); + } + + public static class TargetDirectoryStringExtension + { + public static string ToSafeDirectory(this string directory) + { + if (string.IsNullOrEmpty(directory) || directory == ".") + return "Generated"; + + if (directory.EndsWith("/", StringComparison.Ordinal)) + directory = directory.Substring(0, directory.Length - 1); + + if (!directory.EndsWith("/Generated", StringComparison.OrdinalIgnoreCase)) + directory += "/Generated"; + + return directory; + } + } +} diff --git a/src/Jenny.Plugins/src/TargetFrameworkProfilePreProcessor.cs b/src/Jenny.Plugins/src/TargetFrameworkProfilePreProcessor.cs new file mode 100644 index 00000000..6c2119cc --- /dev/null +++ b/src/Jenny.Plugins/src/TargetFrameworkProfilePreProcessor.cs @@ -0,0 +1,31 @@ +ο»Ώusing System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using DesperateDevs.Serialization; + +namespace Jenny.Plugins +{ + public class TargetFrameworkProfilePreProcessor : IPreProcessor, IConfigurable + { + public string Name => "Fix Target Framework Profile"; + public int Order => 0; + public bool RunInDryMode => true; + + public Dictionary DefaultProperties => _projectPathConfig.DefaultProperties; + + readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); + + public void Configure(Preferences preferences) + { + _projectPathConfig.Configure(preferences); + } + + public void PreProcess() + { + var project = File.ReadAllText(_projectPathConfig.ProjectPath); + project = Regex.Replace(project, @"\s*Unity Subset v3.5", string.Empty); + project = Regex.Replace(project, @"\s*Unity Full v3.5", string.Empty); + File.WriteAllText(_projectPathConfig.ProjectPath, project); + } + } +} diff --git a/src/Jenny.Plugins/src/UpdateCsprojPostProcessor.cs b/src/Jenny.Plugins/src/UpdateCsprojPostProcessor.cs new file mode 100644 index 00000000..1fcb67fe --- /dev/null +++ b/src/Jenny.Plugins/src/UpdateCsprojPostProcessor.cs @@ -0,0 +1,64 @@ +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using System.Linq; +using DesperateDevs.Serialization; +using DesperateDevs.Extensions; + +namespace Jenny.Plugins +{ + public class UpdateCsprojPostProcessor : IPostProcessor, IConfigurable + { + public string Name => "Update .csproj"; + public int Order => 96; + public bool RunInDryMode => false; + + public Dictionary DefaultProperties => + _projectPathConfig.DefaultProperties.Merge(_targetDirectoryConfig.DefaultProperties); + + readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); + readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); + + public void Configure(Preferences preferences) + { + _projectPathConfig.Configure(preferences); + _targetDirectoryConfig.Configure(preferences); + } + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + var project = File.ReadAllText(_projectPathConfig.ProjectPath); + project = RemoveExistingGeneratedEntries(project); + project = AddGeneratedEntries(project, files); + File.WriteAllText(_projectPathConfig.ProjectPath, project); + return files; + } + + string RemoveExistingGeneratedEntries(string project) + { + var escapedTargetDirectory = _targetDirectoryConfig.TargetDirectory + .Replace("/", "\\") + .Replace("\\", "\\\\"); + + var unixTargetDirectory = _targetDirectoryConfig.TargetDirectory.ToUnixPath(); + + project = Regex.Replace(project, $@"\s*", string.Empty); + project = Regex.Replace(project, $@"\s*", string.Empty); + return Regex.Replace(project, @"\s*\s*<\/ItemGroup>", string.Empty); + } + + string AddGeneratedEntries(string project, CodeGenFile[] files) + { + var entries = string.Join("\r\n", files.Select(file => + { + var path = Path.Combine(_targetDirectoryConfig.TargetDirectory, file.FileName).ToUnixPath(); + return $@" "; + })); + + return new Regex(@"<\/ItemGroup>").Replace(project, $@" + +{entries} + ", 1); + } + } +} diff --git a/src/Jenny.Plugins/src/ValidateProjectPathPreProcessor.cs b/src/Jenny.Plugins/src/ValidateProjectPathPreProcessor.cs new file mode 100644 index 00000000..d27c2536 --- /dev/null +++ b/src/Jenny.Plugins/src/ValidateProjectPathPreProcessor.cs @@ -0,0 +1,34 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.IO; +using DesperateDevs.Serialization; + +namespace Jenny.Plugins +{ + public class ValidateProjectPathPreProcessor : IPreProcessor, IConfigurable + { + public string Name => "Validate Project Path"; + public int Order => -10; + public bool RunInDryMode => true; + + public Dictionary DefaultProperties => _projectPathConfig.DefaultProperties; + + readonly ProjectPathConfig _projectPathConfig = new ProjectPathConfig(); + + public void Configure(Preferences preferences) + { + _projectPathConfig.Configure(preferences); + } + + public void PreProcess() + { + if (!File.Exists(_projectPathConfig.ProjectPath)) + { + throw new Exception( + @"Could not find file '" + _projectPathConfig.ProjectPath + "\'\n" + + "Press \"Assets -> Open C# Project\" to create the project and make sure that \"Project Path\" is set to the created *.csproj." + ); + } + } + } +} diff --git a/src/Jenny.Plugins/src/WriteToDiskPostProcessor.cs b/src/Jenny.Plugins/src/WriteToDiskPostProcessor.cs new file mode 100644 index 00000000..03454fa8 --- /dev/null +++ b/src/Jenny.Plugins/src/WriteToDiskPostProcessor.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.IO; +using DesperateDevs.Serialization; + +namespace Jenny.Plugins +{ + public class WriteToDiskPostProcessor : IPostProcessor, IConfigurable + { + public string Name => "Write to disk"; + public int Order => 100; + public bool RunInDryMode => false; + + public Dictionary DefaultProperties => _targetDirectoryConfig.DefaultProperties; + + readonly TargetDirectoryConfig _targetDirectoryConfig = new TargetDirectoryConfig(); + + public void Configure(Preferences preferences) + { + _targetDirectoryConfig.Configure(preferences); + } + + public CodeGenFile[] PostProcess(CodeGenFile[] files) + { + foreach (var file in files) + { + var fileName = Path.Combine(_targetDirectoryConfig.TargetDirectory, file.FileName); + var targetDir = Path.GetDirectoryName(fileName); + if (!Directory.Exists(targetDir)) + Directory.CreateDirectory(targetDir); + + File.WriteAllText(fileName, file.FileContent); + } + + return files; + } + } +} diff --git a/src/Jenny.Plugins/tests/Jenny.Plugins.Tests.csproj b/src/Jenny.Plugins/tests/Jenny.Plugins.Tests.csproj new file mode 100644 index 00000000..72a6d1a9 --- /dev/null +++ b/src/Jenny.Plugins/tests/Jenny.Plugins.Tests.csproj @@ -0,0 +1,24 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + + diff --git a/src/Jenny.Plugins/tests/MergeFilesPostProcessorTests.cs b/src/Jenny.Plugins/tests/MergeFilesPostProcessorTests.cs new file mode 100644 index 00000000..9086ec9f --- /dev/null +++ b/src/Jenny.Plugins/tests/MergeFilesPostProcessorTests.cs @@ -0,0 +1,29 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace Jenny.Plugins.Tests +{ + public class MergeFilesPostProcessorTests + { + [Fact] + public void MergesFilesWithSameFilename() + { + var files = new[] + { + new CodeGenFile("file1", "content1", "gen1"), + new CodeGenFile("file1", "content2", "gen2"), + new CodeGenFile("file3", "content3", "gen3") + }; + + var postprocessor = new MergeFilesPostProcessor(); + files = postprocessor.PostProcess(files); + + files.Should().HaveCount(2); + files[0].FileName.Should().Be("file1"); + files[1].FileName.Should().Be("file3"); + + files[0].FileContent.Should().Be("content1\ncontent2"); + files[0].GeneratorName.Should().Be("gen1, gen2"); + } + } +} diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/TargetDirectoryExtensionTests.cs b/src/Jenny.Plugins/tests/TargetDirectoryExtensionTests.cs similarity index 92% rename from src/DesperateDevs.CodeGeneration.Plugins/tests/TargetDirectoryExtensionTests.cs rename to src/Jenny.Plugins/tests/TargetDirectoryExtensionTests.cs index 5156d6d5..666ab678 100644 --- a/src/DesperateDevs.CodeGeneration.Plugins/tests/TargetDirectoryExtensionTests.cs +++ b/src/Jenny.Plugins/tests/TargetDirectoryExtensionTests.cs @@ -1,7 +1,7 @@ ο»Ώusing FluentAssertions; using Xunit; -namespace DesperateDevs.CodeGeneration.Plugins.Tests +namespace Jenny.Plugins.Tests { public class TargetDirectoryExtensionTests { diff --git a/src/Jenny.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs b/src/Jenny.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs new file mode 100644 index 00000000..01bb0211 --- /dev/null +++ b/src/Jenny.Plugins/tests/TargetFrameworkProfilePreProcessorTests.cs @@ -0,0 +1,41 @@ +ο»Ώusing System.IO; +using DesperateDevs.Serialization.Tests.Fixtures; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace Jenny.Plugins.Tests +{ + public class TargetFrameworkProfilePreProcessorTests + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "Jenny.Plugins", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp"); + + [Fact] + public void RemovesUnitySubsetv35() + { + RemoveTargetFrameworkProfile("UnitySubsetv35.csproj").Should().NotContain("Unity Subset v3.5"); + } + + [Fact] + public void RemovesUnityFullv35() + { + RemoveTargetFrameworkProfile("UnityFullv35.csproj").Should().NotContain("Unity Full v3.5"); + } + + string RemoveTargetFrameworkProfile(string csproj) + { + if (!Directory.Exists(TempPath)) Directory.CreateDirectory(TempPath); + var project = Path.Combine(FixturesPath, csproj); + var tempProject = Path.Combine(TempPath, csproj); + File.Copy(project, tempProject, true); + + var preProcessor = new TargetFrameworkProfilePreProcessor(); + var preferences = new TestPreferences($"Jenny.Plugins.ProjectPath = {tempProject}"); + preProcessor.Configure(preferences); + preProcessor.PreProcess(); + return File.ReadAllText(tempProject); + } + } +} diff --git a/src/Jenny.Plugins/tests/UpdateCsprojPostProcessorTests.cs b/src/Jenny.Plugins/tests/UpdateCsprojPostProcessorTests.cs new file mode 100644 index 00000000..5a097497 --- /dev/null +++ b/src/Jenny.Plugins/tests/UpdateCsprojPostProcessorTests.cs @@ -0,0 +1,61 @@ +using System.IO; +using DesperateDevs.Extensions; +using DesperateDevs.Serialization.Tests.Fixtures; +using DesperateDevs.Tests; +using FluentAssertions; +using Xunit; + +namespace Jenny.Plugins.Tests +{ + public class UpdateCsprojPostProcessorTests + { + static readonly string ProjectRoot = TestHelper.GetProjectRoot(); + static readonly string FixturesPath = Path.Combine(ProjectRoot, "Jenny.Plugins", "tests", "fixtures"); + static readonly string TempPath = Path.Combine(FixturesPath, "temp"); + + [Fact] + public void AddsGeneratedFilesToUnity2020_3() + { + var project = WriteAndUpdateTestCsproj("Unity-2020.3.csproj"); + project.Should().NotContain("Old"); + project.Should().Contain(@" + + + ".ToUnixLineEndings()); + } + + [Fact] + public void AddsGeneratedFilesToUnity2021_3() + { + var project = WriteAndUpdateTestCsproj("Unity-2021.3.csproj"); + project.Should().NotContain("Old"); + project.Should().Contain(@" + + + ".ToUnixLineEndings()); + } + + string WriteAndUpdateTestCsproj(string csproj) + { + if (!Directory.Exists(TempPath)) Directory.CreateDirectory(TempPath); + var project = Path.Combine(FixturesPath, csproj); + var tempProject = Path.Combine(TempPath, csproj); + File.Copy(project, tempProject, true); + + var postProcessor = new UpdateCsprojPostProcessor(); + var preferences = new TestPreferences($@" +Jenny.Plugins.ProjectPath = {tempProject} +Jenny.Plugins.TargetDirectory = Assets/Sources"); + postProcessor.Configure(preferences); + + var files = new[] + { + new CodeGenFile("Test1/Test2/File1.cs", "test file content 1", "TestGenerator1"), + new CodeGenFile("Test1/Test2/File2.cs", "test file content 2", "TestGenerator2") + }; + + postProcessor.PostProcess(files); + return File.ReadAllText(tempProject).ToUnixLineEndings(); + } + } +} diff --git a/src/Jenny.Plugins/tests/fixtures/Unity-2020.3.csproj b/src/Jenny.Plugins/tests/fixtures/Unity-2020.3.csproj new file mode 100644 index 00000000..6c9ab9e8 --- /dev/null +++ b/src/Jenny.Plugins/tests/fixtures/Unity-2020.3.csproj @@ -0,0 +1,68 @@ +ο»Ώ + + + latest + true + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {31e985b9-b562-8222-14e3-19a84ac0a7c8} + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Assembly-CSharp + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\ + DEBUG;TRACE;UNITY_2020_3_33;UNITY_2020_3;UNITY_2020;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_MONO_BDWGC;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;PLATFORM_STANDALONE;PLATFORM_STANDALONE_OSX;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_GAMECENTER;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_SPATIALTRACKING;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + + False + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + + False + False + + + true + true + false + false + false + + + + + + + + + + + + diff --git a/src/Jenny.Plugins/tests/fixtures/Unity-2021.3.csproj b/src/Jenny.Plugins/tests/fixtures/Unity-2021.3.csproj new file mode 100644 index 00000000..f6c7c083 --- /dev/null +++ b/src/Jenny.Plugins/tests/fixtures/Unity-2021.3.csproj @@ -0,0 +1,58 @@ +ο»Ώ + + + 9.0 + true + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {561fc1cd-0757-f919-bd51-bbd141ceb802} + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Assembly-CSharp + v4.7.1 + 512 + . + + + true + full + false + Temp\Bin\Debug\Assembly-CSharp\ + UNITY_2021_3_0;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;USE_SEARCH_ENGINE_API;USE_SEARCH_TABLE;USE_SEARCH_MODULE;USE_PROPERTY_DATABASE;USE_SEARCH_EXTENSION_API;SCENE_TEMPLATE_MODULE;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_OSX;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_GAMECENTER;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_SPATIALTRACKING;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;UNITY_PRO_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169,0649 + False + False + + + true + true + false + false + false + + + + + + + + + + + + + diff --git a/src/Jenny.Plugins/tests/fixtures/UnityFullv35.csproj b/src/Jenny.Plugins/tests/fixtures/UnityFullv35.csproj new file mode 100644 index 00000000..4d58b6ed --- /dev/null +++ b/src/Jenny.Plugins/tests/fixtures/UnityFullv35.csproj @@ -0,0 +1,25 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {352F2C99-950F-8CD7-CDAB-2E4F2137E044} + Library + Assembly-CSharp.dll + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v3.5 + Unity Full v3.5 + + Game:1 + StandaloneWindows64:19 + 2017.2.0p4 + + 4 + + + + diff --git a/src/DesperateDevs.CodeGeneration.Plugins/tests/TestTargetFrameworkProfilePreProcessor.csproj b/src/Jenny.Plugins/tests/fixtures/UnitySubsetv35.csproj similarity index 100% rename from src/DesperateDevs.CodeGeneration.Plugins/tests/TestTargetFrameworkProfilePreProcessor.csproj rename to src/Jenny.Plugins/tests/fixtures/UnitySubsetv35.csproj diff --git a/src/Jenny/benchmarks/CodeGeneratorDataBenchmarks.cs b/src/Jenny/benchmarks/CodeGeneratorDataBenchmarks.cs new file mode 100644 index 00000000..ddee918d --- /dev/null +++ b/src/Jenny/benchmarks/CodeGeneratorDataBenchmarks.cs @@ -0,0 +1,30 @@ +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace Jenny.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class CodeGeneratorDataBenchmarks + { + CodeGeneratorData _data; + string _template; + + [GlobalSetup] + public void GlobalSetup() + { + _data = new CodeGeneratorData(); + for (var i = 0; i < 1000; i++) + _data[$"key{i}"] = $"value{i}"; + + _template = @"test-${key123}-test"; + } + + [Benchmark] + public void ReplacePlaceholders() + { + _data.ReplacePlaceholders(_template); + } + } +} diff --git a/src/Jenny/benchmarks/Jenny.Benchmarks.csproj b/src/Jenny/benchmarks/Jenny.Benchmarks.csproj new file mode 100644 index 00000000..e5a354df --- /dev/null +++ b/src/Jenny/benchmarks/Jenny.Benchmarks.csproj @@ -0,0 +1,18 @@ + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + + + + + diff --git a/src/Jenny/benchmarks/Program.cs b/src/Jenny/benchmarks/Program.cs new file mode 100644 index 00000000..a069da92 --- /dev/null +++ b/src/Jenny/benchmarks/Program.cs @@ -0,0 +1,12 @@ +ο»Ώusing BenchmarkDotNet.Running; + +namespace Jenny.Benchmarks +{ + static class Program + { + public static void Main(string[] args) + { + BenchmarkRunner.Run(typeof(CodeGeneratorDataBenchmarks)); + } + } +} diff --git a/src/Jenny/src/CodeGenFile.cs b/src/Jenny/src/CodeGenFile.cs new file mode 100644 index 00000000..f0573ba1 --- /dev/null +++ b/src/Jenny/src/CodeGenFile.cs @@ -0,0 +1,26 @@ +ο»Ώusing DesperateDevs.Extensions; + +namespace Jenny +{ + public class CodeGenFile + { + public string FileName { get; set; } + + public string FileContent + { + get => _fileContent; + set => _fileContent = value.ToUnixLineEndings(); + } + + public string GeneratorName { get; set; } + + string _fileContent; + + public CodeGenFile(string fileName, string fileContent, string generatorName) + { + FileName = fileName; + FileContent = fileContent; + GeneratorName = generatorName; + } + } +} diff --git a/src/Jenny/src/CodeGeneratorData.cs b/src/Jenny/src/CodeGeneratorData.cs new file mode 100644 index 00000000..15e147b7 --- /dev/null +++ b/src/Jenny/src/CodeGeneratorData.cs @@ -0,0 +1,45 @@ +ο»Ώusing System.Collections.Generic; +using System.Text.RegularExpressions; +using DesperateDevs.Extensions; + +namespace Jenny +{ + public class CodeGeneratorData : Dictionary + { + const string VariablePattern = @"\${(.+?)}"; + + public CodeGeneratorData() { } + + public CodeGeneratorData(CodeGeneratorData data) : base(data) { } + + public string ReplacePlaceholders(string template) => Regex.Replace(template, VariablePattern, + match => + { + var split = match.Groups[1].Value.Split(':'); + return TryGetValue(split[0], out var value) + ? split.Length == 1 + ? value.ToString() + : split[1] switch + { + "lower" => value.ToString().ToLower(), + "upper" => value.ToString().ToUpper(), + "lowerFirst" => value.ToString().ToLowerFirst(), + "upperFirst" => value.ToString().ToUpperFirst(), + "foreach" => ForEach((IEnumerable)value, split[2]), + _ => value.ToString() + } + : match.Value; + }); + + static string ForEach(IEnumerable values, string template) + { + var result = string.Empty; + foreach (var value in values) + result += template + .Replace("$item", value.ToString()) + .Replace("\\n", "\n"); + + return result; + } + } +} diff --git a/src/Jenny/src/Diagnosis.cs b/src/Jenny/src/Diagnosis.cs new file mode 100644 index 00000000..4cb111af --- /dev/null +++ b/src/Jenny/src/Diagnosis.cs @@ -0,0 +1,26 @@ +ο»Ώnamespace Jenny +{ + public enum DiagnosisSeverity + { + Healthy, + Hint, + Warning, + Error + } + + public class Diagnosis + { + public static Diagnosis Healthy => new Diagnosis(null, null, DiagnosisSeverity.Healthy); + + public readonly string Symptoms; + public readonly string Treatment; + public readonly DiagnosisSeverity Severity; + + public Diagnosis(string symptoms, string treatment, DiagnosisSeverity severity) + { + Symptoms = symptoms; + Treatment = treatment; + Severity = severity; + } + } +} diff --git a/src/Jenny/src/ICachable.cs b/src/Jenny/src/ICachable.cs new file mode 100644 index 00000000..d273b379 --- /dev/null +++ b/src/Jenny/src/ICachable.cs @@ -0,0 +1,9 @@ +ο»Ώusing System.Collections.Generic; + +namespace Jenny +{ + public interface ICachable + { + Dictionary ObjectCache { get; set; } + } +} diff --git a/src/Jenny/src/ICodeGenerationPlugin.cs b/src/Jenny/src/ICodeGenerationPlugin.cs new file mode 100644 index 00000000..96aee8ef --- /dev/null +++ b/src/Jenny/src/ICodeGenerationPlugin.cs @@ -0,0 +1,9 @@ +ο»Ώnamespace Jenny +{ + public interface ICodeGenerationPlugin + { + string Name { get; } + int Order { get; } + bool RunInDryMode { get; } + } +} diff --git a/src/Jenny/src/ICodeGenerator.cs b/src/Jenny/src/ICodeGenerator.cs new file mode 100644 index 00000000..cde6dd9b --- /dev/null +++ b/src/Jenny/src/ICodeGenerator.cs @@ -0,0 +1,7 @@ +namespace Jenny +{ + public interface ICodeGenerator : ICodeGenerationPlugin + { + CodeGenFile[] Generate(CodeGeneratorData[] data); + } +} diff --git a/src/Jenny/src/IDataProvider.cs b/src/Jenny/src/IDataProvider.cs new file mode 100644 index 00000000..560cc7ca --- /dev/null +++ b/src/Jenny/src/IDataProvider.cs @@ -0,0 +1,7 @@ +ο»Ώnamespace Jenny +{ + public interface IDataProvider : ICodeGenerationPlugin + { + CodeGeneratorData[] GetData(); + } +} diff --git a/src/Jenny/src/IDoctor.cs b/src/Jenny/src/IDoctor.cs new file mode 100644 index 00000000..4976ee64 --- /dev/null +++ b/src/Jenny/src/IDoctor.cs @@ -0,0 +1,8 @@ +ο»Ώnamespace Jenny +{ + public interface IDoctor : ICodeGenerationPlugin + { + Diagnosis Diagnose(); + bool ApplyFix(); + } +} diff --git a/src/Jenny/src/IPostProcessor.cs b/src/Jenny/src/IPostProcessor.cs new file mode 100644 index 00000000..e4b71da0 --- /dev/null +++ b/src/Jenny/src/IPostProcessor.cs @@ -0,0 +1,7 @@ +ο»Ώnamespace Jenny +{ + public interface IPostProcessor : ICodeGenerationPlugin + { + CodeGenFile[] PostProcess(CodeGenFile[] files); + } +} diff --git a/src/Jenny/src/IPreProcessor.cs b/src/Jenny/src/IPreProcessor.cs new file mode 100644 index 00000000..6f51e434 --- /dev/null +++ b/src/Jenny/src/IPreProcessor.cs @@ -0,0 +1,7 @@ +ο»Ώnamespace Jenny +{ + public interface IPreProcessor : ICodeGenerationPlugin + { + void PreProcess(); + } +} diff --git a/src/Jenny/src/Jenny.csproj b/src/Jenny/src/Jenny.csproj new file mode 100644 index 00000000..fba1b92c --- /dev/null +++ b/src/Jenny/src/Jenny.csproj @@ -0,0 +1,12 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + diff --git a/src/Jenny/tests/CodeGenFileTests.cs b/src/Jenny/tests/CodeGenFileTests.cs new file mode 100644 index 00000000..0df0e063 --- /dev/null +++ b/src/Jenny/tests/CodeGenFileTests.cs @@ -0,0 +1,32 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace Jenny.Tests +{ + public class CodeGenFileTests + { + [Fact] + public void SetFields() + { + var file = new CodeGenFile("name.cs", "content", "MyGenerator"); + file.FileName.Should().Be("name.cs"); + file.FileContent.Should().Be("content"); + file.GeneratorName.Should().Be("MyGenerator"); + } + + [Fact] + public void ConvertsToUnixNewLines() + { + var file = new CodeGenFile(null, "line1\r\nline2\r", null); + file.FileContent.Should().Be("line1\nline2\n"); + } + + [Fact] + public void ConvertsToUnixNewLinesWhenSettingFileContent() + { + var file = new CodeGenFile(null, string.Empty, null); + file.FileContent = "line1\r\nline2\r"; + file.FileContent.Should().Be("line1\nline2\n"); + } + } +} diff --git a/src/Jenny/tests/CodeGeneratorDataTests.cs b/src/Jenny/tests/CodeGeneratorDataTests.cs new file mode 100644 index 00000000..f39d2e82 --- /dev/null +++ b/src/Jenny/tests/CodeGeneratorDataTests.cs @@ -0,0 +1,81 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace Jenny.Tests +{ + public class CodeGeneratorDataTests + { + readonly CodeGeneratorData _data; + + public CodeGeneratorDataTests() + { + _data = new CodeGeneratorData + { + ["TestKey1"] = "TestValue1", + ["testKey2"] = "testValue2", + ["testKey3"] = new[] {"testValue1", "testValue2", "testValue3"} + }; + } + + [Fact] + public void AddsKeyAndValue() + { + _data["TestKey1"].Should().Be("TestValue1"); + _data["testKey2"].Should().Be("testValue2"); + } + + [Fact] + public void ReplacesPlaceholders() + { + _data.ReplacePlaceholders("Test, ${TestKey1}, test, ${testKey2}") + .Should().Be("Test, TestValue1, test, testValue2"); + } + + [Fact] + public void ReplacesWithLower() + { + _data.ReplacePlaceholders("Test, ${TestKey1:lower}, test, ${testKey2:lower}") + .Should().Be("Test, testvalue1, test, testvalue2"); + } + + [Fact] + public void ReplacesWithUpper() + { + _data.ReplacePlaceholders("Test, ${TestKey1:upper}, test, ${testKey2:upper}") + .Should().Be("Test, TESTVALUE1, test, TESTVALUE2"); + } + + [Fact] + public void ReplacesWithLowerFirst() + { + _data.ReplacePlaceholders("Test, ${TestKey1:lowerFirst}, test, ${testKey2:lowerFirst}") + .Should().Be("Test, testValue1, test, testValue2"); + } + + [Fact] + public void ReplacesWithUpperFirst() + { + _data.ReplacePlaceholders("Test, ${TestKey1:upperFirst}, test, ${testKey2:upperFirst}") + .Should().Be("Test, TestValue1, test, TestValue2"); + } + + [Fact] + public void ReplacesWithTemplate() + { + _data.ReplacePlaceholders("Test, ${testKey3:foreach:var $item = value;\\n}") + .Should().Be(@"Test, var testValue1 = value; +var testValue2 = value; +var testValue3 = value; +"); + } + + [Fact] + public void ClonesData() + { + var clone = new CodeGeneratorData(_data); + clone.Should().HaveCount(_data.Count); + clone["TestKey1"].Should().Be("TestValue1"); + clone["testKey2"].Should().Be("testValue2"); + } + } +} diff --git a/src/Jenny/tests/Jenny.Tests.csproj b/src/Jenny/tests/Jenny.Tests.csproj new file mode 100644 index 00000000..cdbb46c3 --- /dev/null +++ b/src/Jenny/tests/Jenny.Tests.csproj @@ -0,0 +1,22 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + diff --git a/src/Sherlog.Appenders/src/AbstractTcpSocketAppender.cs b/src/Sherlog.Appenders/src/AbstractTcpSocketAppender.cs new file mode 100644 index 00000000..04292c7d --- /dev/null +++ b/src/Sherlog.Appenders/src/AbstractTcpSocketAppender.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; +using System.Net; +using TCPeasy; + +namespace Sherlog.Appenders +{ + public abstract class AbstractTcpSocketAppender + { + readonly List _history = new List(); + + AbstractTcpSocket _socket; + + public void Connect(IPAddress ip, int port) + { + var client = new TcpClientSocket(); + _socket = client; + client.OnConnected += sender => OnConnected(); + client.Connect(ip, port); + } + + public void Listen(int port) + { + var server = new TcpServerSocket(); + _socket = server; + server.OnClientConnected += (sender, client) => OnConnected(); + server.Listen(port); + } + + public void Disconnect() => _socket.Disconnect(); + + public void Send(Logger logger, LogLevel logLevel, string message) + { + if (IsSocketReady()) + _socket.Send(SerializeMessage(logger, logLevel, message)); + else + _history.Add(new HistoryEntry(logger, logLevel, message)); + } + + bool IsSocketReady() + { + if (_socket != null) + { + if (_socket is TcpServerSocket server) + return server.Count > 0; + + if (_socket is TcpClientSocket client) + return client.IsConnected; + } + + return false; + } + + void OnConnected() + { + if (_history.Count > 0) + { + foreach (var entry in _history) + Send(entry.Logger, entry.LogLevel, entry.Message); + + _history.Clear(); + } + } + + protected abstract byte[] SerializeMessage(Logger logger, LogLevel logLevel, string message); + + class HistoryEntry + { + public readonly Logger Logger; + public readonly LogLevel LogLevel; + public readonly string Message; + + public HistoryEntry(Logger logger, LogLevel logLevel, string message) + { + Logger = logger; + LogLevel = logLevel; + Message = message; + } + } + } +} diff --git a/src/Sherlog.Appenders/src/ConsoleAppender.cs b/src/Sherlog.Appenders/src/ConsoleAppender.cs new file mode 100644 index 00000000..4f336beb --- /dev/null +++ b/src/Sherlog.Appenders/src/ConsoleAppender.cs @@ -0,0 +1,29 @@ +ο»Ώusing System.Collections.Generic; +using System; + +namespace Sherlog.Appenders +{ + public class ConsoleAppender + { + readonly Dictionary _consoleColors; + + public ConsoleAppender(Dictionary consoleColors) + { + _consoleColors = consoleColors; + } + + public void WriteLine(Logger logger, LogLevel logLevel, string message) + { + if (_consoleColors.TryGetValue(logLevel, out var color)) + { + Console.ForegroundColor = color; + Console.WriteLine(message); + Console.ResetColor(); + } + else + { + Console.WriteLine(message); + } + } + } +} diff --git a/src/Sherlog.Appenders/src/FileWriterAppender.cs b/src/Sherlog.Appenders/src/FileWriterAppender.cs new file mode 100644 index 00000000..8076f0a1 --- /dev/null +++ b/src/Sherlog.Appenders/src/FileWriterAppender.cs @@ -0,0 +1,30 @@ +using System.IO; + +namespace Sherlog.Appenders +{ + public class FileWriterAppender + { + readonly object _lock = new object(); + readonly string _filePath; + + public FileWriterAppender(string filePath) => _filePath = filePath; + + public void WriteLine(Logger logger, LogLevel logLevel, string message) + { + lock (_lock) + { + using var writer = new StreamWriter(_filePath, true); + writer.WriteLine(message); + } + } + + public void ClearFile() + { + lock (_lock) + { + using var writer = new StreamWriter(_filePath, false); + writer.Write(string.Empty); + } + } + } +} diff --git a/src/Sherlog.Appenders/src/Sherlog.Appenders.csproj b/src/Sherlog.Appenders/src/Sherlog.Appenders.csproj new file mode 100644 index 00000000..8ff02665 --- /dev/null +++ b/src/Sherlog.Appenders/src/Sherlog.Appenders.csproj @@ -0,0 +1,13 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + + diff --git a/src/Sherlog.Appenders/src/SosMaxAppender.cs b/src/Sherlog.Appenders/src/SosMaxAppender.cs new file mode 100644 index 00000000..9715fb4d --- /dev/null +++ b/src/Sherlog.Appenders/src/SosMaxAppender.cs @@ -0,0 +1,28 @@ +using System.Text; + +namespace Sherlog.Appenders +{ + public class SosMaxAppender : AbstractTcpSocketAppender + { + protected override byte[] SerializeMessage(Logger logger, LogLevel logLevel, string message) => + Encoding.UTF8.GetBytes(FormatLogMessage(logLevel.ToString(), message)); + + string FormatLogMessage(string logLevel, string message) + { + var lines = message.Split('\n'); + return lines.Length == 1 + ? $"!SOS{ReplaceXmlSymbols(message)}\0" + : $"!SOS{MultilineMessage(lines[0], message)}\0"; + } + + string MultilineMessage(string title, string message) => + $"{ReplaceXmlSymbols(title)}{ReplaceXmlSymbols(message.Substring(message.IndexOf('\n') + 1))}"; + + string ReplaceXmlSymbols(string str) => str + .Replace("<", "<") + .Replace(">", ">") + .Replace("<", "") + .Replace(">", "]]>") + .Replace("&", ""); + } +} diff --git a/src/Sherlog.Appenders/src/TcpSocketAppender.cs b/src/Sherlog.Appenders/src/TcpSocketAppender.cs new file mode 100644 index 00000000..26caac59 --- /dev/null +++ b/src/Sherlog.Appenders/src/TcpSocketAppender.cs @@ -0,0 +1,11 @@ +using System.Text; +using TCPeasy; + +namespace Sherlog.Appenders +{ + public class TcpSocketAppender : AbstractTcpSocketAppender + { + protected override byte[] SerializeMessage(Logger logger, LogLevel logLevel, string message) => + TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(message)); + } +} diff --git a/src/Sherlog.Formatters/src/ColorCodeFormatter.cs b/src/Sherlog.Formatters/src/ColorCodeFormatter.cs new file mode 100644 index 00000000..d6cbb4e5 --- /dev/null +++ b/src/Sherlog.Formatters/src/ColorCodeFormatter.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; + +namespace Sherlog.Formatters +{ + public class ColorCodeFormatter + { + // ANSI COLOR escape codes for colors and other things. + // You can change the color of foreground and background plus bold, italic, underline etc + // For a complete list see http://en.wikipedia.org/wiki/ANSI_escape_code#Colors + + public const string Reset = "0m"; + public const string Esc = "\x1B["; + + public const string NoBackground = ""; + public const string BlackForeground = "30m"; + public const string BlackBackground = "40m"; + public const string RedForeground = "31m"; + public const string RedBackground = "41m"; + public const string GreenForeground = "32m"; + public const string GreenBackground = "42m"; + public const string YellowForeground = "33m"; + public const string YellowBackground = "43m"; + public const string BlueForeground = "34m"; + public const string BlueBackground = "44m"; + public const string MagentaForeground = "35m"; + public const string MagentaBackground = "45m"; + public const string CyanForeground = "36m"; + public const string CyanBackground = "46m"; + public const string WhiteForeground = "37m"; + public const string WhiteBackground = "47m"; + + public class Color + { + public string Foreground; + public string Background; + } + + public readonly Dictionary Colors = new Dictionary + { + {LogLevel.Trace, new Color {Foreground = WhiteForeground, Background = CyanBackground}}, + {LogLevel.Debug, new Color {Foreground = BlueForeground, Background = NoBackground}}, + {LogLevel.Info, new Color {Foreground = GreenForeground, Background = NoBackground}}, + {LogLevel.Warn, new Color {Foreground = YellowForeground, Background = NoBackground}}, + {LogLevel.Error, new Color {Foreground = WhiteForeground, Background = RedBackground}}, + {LogLevel.Fatal, new Color {Foreground = WhiteForeground, Background = MagentaBackground}} + }; + + public string FormatMessage(Logger logger, LogLevel logLevel, string message) => + $"{Esc}{Colors[logLevel].Background}{Esc}{Colors[logLevel].Foreground}{message}{Esc}{Reset}"; + } +} diff --git a/src/Sherlog.Formatters/src/LogFormatter.cs b/src/Sherlog.Formatters/src/LogFormatter.cs new file mode 100644 index 00000000..80db315d --- /dev/null +++ b/src/Sherlog.Formatters/src/LogFormatter.cs @@ -0,0 +1,4 @@ +ο»Ώnamespace Sherlog.Formatters +{ + public delegate string LogFormatter(Logger logger, LogLevel logLevel, string message); +} diff --git a/src/Sherlog.Formatters/src/LogMessageFormatter.cs b/src/Sherlog.Formatters/src/LogMessageFormatter.cs new file mode 100644 index 00000000..a7d7f357 --- /dev/null +++ b/src/Sherlog.Formatters/src/LogMessageFormatter.cs @@ -0,0 +1,12 @@ +ο»Ώnamespace Sherlog.Formatters +{ + public class LogMessageFormatter + { + readonly string _format; + + public LogMessageFormatter(string format = "[{1}] {0}: {2}") => _format = format; + + public string FormatMessage(Logger logger, LogLevel logLevel, string message) => + string.Format(_format, logger.Name, logLevel, message); + } +} diff --git a/src/Sherlog.Formatters/src/Sherlog.Formatters.csproj b/src/Sherlog.Formatters/src/Sherlog.Formatters.csproj new file mode 100644 index 00000000..93f900d9 --- /dev/null +++ b/src/Sherlog.Formatters/src/Sherlog.Formatters.csproj @@ -0,0 +1,12 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + diff --git a/src/Sherlog.Formatters/src/TimestampFormatter.cs b/src/Sherlog.Formatters/src/TimestampFormatter.cs new file mode 100644 index 00000000..2fd4e87d --- /dev/null +++ b/src/Sherlog.Formatters/src/TimestampFormatter.cs @@ -0,0 +1,14 @@ +ο»Ώusing System; + +namespace Sherlog.Formatters +{ + public class TimestampFormatter + { + readonly string _timeFormat; + + public TimestampFormatter(string timeFormat = "{0:yyyy/MM/dd/hh:mm:ss:fff}") => _timeFormat = timeFormat; + + public string FormatMessage(Logger logger, LogLevel logLevel, string message) => + $"{string.Format(_timeFormat, DateTime.Now)} {message}"; + } +} diff --git a/src/Sherlog.Formatters/tests/LogMessageFormatterTests.cs b/src/Sherlog.Formatters/tests/LogMessageFormatterTests.cs new file mode 100644 index 00000000..aac2d7af --- /dev/null +++ b/src/Sherlog.Formatters/tests/LogMessageFormatterTests.cs @@ -0,0 +1,24 @@ +ο»Ώusing FluentAssertions; +using Xunit; + +namespace Sherlog.Formatters.Tests +{ + public class LogMessageFormatterTests + { + readonly LogMessageFormatter _formatter; + readonly Logger _logger; + + public LogMessageFormatterTests() + { + _formatter = new LogMessageFormatter("[{1}] {0}: {2}"); + _logger = new Logger("TestLogger"); + } + + [Fact] + public void FormatsString() + { + _formatter.FormatMessage(_logger, LogLevel.Debug, "test message") + .Should().Be("[Debug] TestLogger: test message"); + } + } +} diff --git a/src/Sherlog.Formatters/tests/Sherlog.Formatters.Tests.csproj b/src/Sherlog.Formatters/tests/Sherlog.Formatters.Tests.csproj new file mode 100644 index 00000000..6d7595a5 --- /dev/null +++ b/src/Sherlog.Formatters/tests/Sherlog.Formatters.Tests.csproj @@ -0,0 +1,23 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + diff --git a/src/Sherlog/benchmarks/LoggerBenchmarks.cs b/src/Sherlog/benchmarks/LoggerBenchmarks.cs new file mode 100644 index 00000000..91db556d --- /dev/null +++ b/src/Sherlog/benchmarks/LoggerBenchmarks.cs @@ -0,0 +1,24 @@ +using System.Threading; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Order; + +namespace Sherlog.Benchmarks +{ + [MemoryDiagnoser] + [Orderer(SummaryOrderPolicy.FastestToSlowest)] + [RankColumn] + public class LoggerBenchmarks + { + public LoggerBenchmarks() + { + Logger.AddAppender((logger, level, message) => Thread.Sleep(10)); + } + + [Benchmark] + public void Log() + { + var logger = Logger.GetLogger(typeof(LoggerBenchmarks)); + logger.Debug(new string('.', 1000)); + } + } +} diff --git a/src/Sherlog/benchmarks/Program.cs b/src/Sherlog/benchmarks/Program.cs new file mode 100644 index 00000000..ac39d3a1 --- /dev/null +++ b/src/Sherlog/benchmarks/Program.cs @@ -0,0 +1,12 @@ +ο»Ώusing BenchmarkDotNet.Running; + +namespace Sherlog.Benchmarks +{ + static class Program + { + public static void Main(string[] args) + { + BenchmarkRunner.Run(typeof(LoggerBenchmarks)); + } + } +} diff --git a/src/Sherlog/benchmarks/Sherlog.Benchmarks.csproj b/src/Sherlog/benchmarks/Sherlog.Benchmarks.csproj new file mode 100644 index 00000000..0669c311 --- /dev/null +++ b/src/Sherlog/benchmarks/Sherlog.Benchmarks.csproj @@ -0,0 +1,18 @@ + + + + Exe + $(DefaultNetTargetFramework) + false + false + + + + + + + + + + + diff --git a/src/Sherlog/src/LogLevel.cs b/src/Sherlog/src/LogLevel.cs new file mode 100644 index 00000000..5dd9e5aa --- /dev/null +++ b/src/Sherlog/src/LogLevel.cs @@ -0,0 +1,14 @@ +namespace Sherlog +{ + public enum LogLevel + { + On, + Trace, + Debug, + Info, + Warn, + Error, + Fatal, + Off + } +} diff --git a/src/Sherlog/src/Logger.cs b/src/Sherlog/src/Logger.cs new file mode 100644 index 00000000..a7352bd9 --- /dev/null +++ b/src/Sherlog/src/Logger.cs @@ -0,0 +1,46 @@ +using System; + +namespace Sherlog +{ + public delegate void LogDelegate(Logger logger, LogLevel logLevel, string message); + + public partial class Logger + { + public event LogDelegate OnLog; + + public readonly string Name; + + public LogLevel LogLevel; + + public Logger(string name) => Name = name; + + public void Trace(string message) => Log(LogLevel.Trace, message); + public void Debug(string message) => Log(LogLevel.Debug, message); + public void Info(string message) => Log(LogLevel.Info, message); + public void Warn(string message) => Log(LogLevel.Warn, message); + public void Error(string message) => Log(LogLevel.Error, message); + public void Fatal(string message) => Log(LogLevel.Fatal, message); + + public void Assert(bool condition, string message) + { + if (!condition) + throw new SherlogAssertException(message); + } + +#if SHERLOG_OFF + [System.Diagnostics.Conditional("false")] +#endif + void Log(LogLevel logLvl, string message) + { + if (LogLevel <= logLvl) + OnLog?.Invoke(this, logLvl, message); + } + + public void Reset() => OnLog = null; + } + + public class SherlogAssertException : Exception + { + public SherlogAssertException(string message) : base(message) { } + } +} diff --git a/src/Sherlog/src/LoggerStatic.cs b/src/Sherlog/src/LoggerStatic.cs new file mode 100644 index 00000000..908f5cfe --- /dev/null +++ b/src/Sherlog/src/LoggerStatic.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; + +namespace Sherlog +{ + public partial class Logger + { + public static LogLevel GlobalLogLevel + { + get => _globalLogLevel; + set + { + _globalLogLevel = value; + foreach (var logger in Loggers.Values) + logger.LogLevel = value; + } + } + + static readonly Dictionary Loggers = new Dictionary(); + static LogLevel _globalLogLevel; + static LogDelegate _appenders; + + public static void AddAppender(LogDelegate appender) + { + _appenders += appender; + foreach (var logger in Loggers.Values) + logger.OnLog += appender; + } + + public static void RemoveAppender(LogDelegate appender) + { + _appenders -= appender; + foreach (var logger in Loggers.Values) + logger.OnLog -= appender; + } + + public static Logger GetLogger(Type type) => GetLogger(type.FullName); + + public static Logger GetLogger(string name) + { + if (!Loggers.TryGetValue(name, out var logger)) + { + logger = new Logger(name) + { + LogLevel = GlobalLogLevel + }; + logger.OnLog += _appenders; + Loggers.Add(name, logger); + } + + return logger; + } + + public static void ClearLoggers() => Loggers.Clear(); + + public static void ClearAppenders() + { + _appenders = null; + foreach (var logger in Loggers.Values) + logger.OnLog = null; + } + } +} diff --git a/src/Sherlog/src/Sherlog.csproj b/src/Sherlog/src/Sherlog.csproj new file mode 100644 index 00000000..e0e0bf2c --- /dev/null +++ b/src/Sherlog/src/Sherlog.csproj @@ -0,0 +1,8 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + diff --git a/src/DesperateDevs.Logging/tests/LoggerTests.cs b/src/Sherlog/tests/LoggerTests.cs similarity index 82% rename from src/DesperateDevs.Logging/tests/LoggerTests.cs rename to src/Sherlog/tests/LoggerTests.cs index e949a82e..7a29fa85 100644 --- a/src/DesperateDevs.Logging/tests/LoggerTests.cs +++ b/src/Sherlog/tests/LoggerTests.cs @@ -2,18 +2,17 @@ using FluentAssertions; using Xunit; -namespace DesperateDevs.Logging.Tests +namespace Sherlog.Tests { public class LoggerTests { - const string message = "hi"; - const string loggerName = "MyLogger"; + const string Message = "test message"; readonly Logger _logger; public LoggerTests() { - _logger = new Logger("MyLogger"); + _logger = new Logger("TestLogger"); } [Theory] @@ -27,7 +26,7 @@ public LoggerTests() [InlineData(LogLevel.Off, false, false, false, false, false, false)] public void LogLevels(LogLevel logLevel, bool trace, bool debug, bool info, bool warn, bool error, bool fatal) { - _logger.logLevel = logLevel; + _logger.LogLevel = logLevel; AssertLogLevel(_logger.Trace, LogLevel.Trace, trace); AssertLogLevel(_logger.Debug, LogLevel.Debug, debug); AssertLogLevel(_logger.Info, LogLevel.Info, info); @@ -41,22 +40,22 @@ void AssertLogLevel(Action logMethod, LogLevel logLvl, bool shouldLog) var eventLogLevel = LogLevel.Off; string eventMessage = null; Logger eventLogger = null; - _logger.OnLog += (logger, logLevel, msg) => + _logger.OnLog += (logger, level, msg) => { didLog = true; eventLogger = logger; - eventLogLevel = logLevel; + eventLogLevel = level; eventMessage = msg; }; - logMethod(message); + logMethod(Message); didLog.Should().Be(shouldLog); if (shouldLog) { eventLogger.Should().BeSameAs(_logger); - eventMessage.Should().Be(message); + eventMessage.Should().Be(Message); eventLogLevel.Should().Be(logLvl); } else @@ -77,8 +76,8 @@ public void AssertDoesNotThrowWhenConditionIsTrue() [Fact] public void AssertThrowsWhenConditionIsFalse() { - _logger.Invoking(logger => logger.Assert(false, "fail")) - .Should().Throw(); + FluentActions.Invoking(() => _logger.Assert(false, "fail")) + .Should().Throw(); } [Fact] @@ -87,7 +86,7 @@ public void ResetsOnLog() var didLog = 0; _logger.OnLog += (logger, level, s) => didLog += 1; _logger.Reset(); - _logger.Info("Test"); + _logger.Info("test message"); didLog.Should().Be(0); } } diff --git a/src/Sherlog/tests/Sherlog.Tests.csproj b/src/Sherlog/tests/Sherlog.Tests.csproj new file mode 100644 index 00000000..9dc83394 --- /dev/null +++ b/src/Sherlog/tests/Sherlog.Tests.csproj @@ -0,0 +1,22 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + diff --git a/src/Sherlog/tests/SherlogTests.cs b/src/Sherlog/tests/SherlogTests.cs new file mode 100644 index 00000000..b3d72e99 --- /dev/null +++ b/src/Sherlog/tests/SherlogTests.cs @@ -0,0 +1,145 @@ +ο»Ώusing System; +using FluentAssertions; +using Xunit; + +namespace Sherlog.Tests +{ + public class SherlogTests : IDisposable + { + [Fact] + public void CreatesNewLogger() + { + var logger = Logger.GetLogger("TestLogger"); + logger.Should().NotBeNull(); + logger.GetType().Should().BeSameAs(typeof(Logger)); + logger.Name.Should().Be("TestLogger"); + logger.LogLevel.Should().Be(LogLevel.On); + } + + [Fact] + public void CreatesNewLoggerForType() + { + var logger = Logger.GetLogger(typeof(SherlogTests)); + logger.Should().NotBeNull(); + logger.GetType().Should().BeSameAs(typeof(Logger)); + logger.Name.Should().Be("Sherlog.Tests.SherlogTests"); + logger.LogLevel.Should().Be(LogLevel.On); + } + + [Fact] + public void ReturnsSameLoggerWhenNameIsEqual() + { + var logger1 = Logger.GetLogger("TestLogger"); + var logger2 = Logger.GetLogger("TestLogger"); + logger1.Should().BeSameAs(logger2); + } + + [Fact] + public void ReturnsSameLoggerWhenTypeIsEqual() + { + var logger1 = Logger.GetLogger(typeof(SherlogTests)); + var logger2 = Logger.GetLogger(typeof(SherlogTests)); + logger1.Should().BeSameAs(logger2); + } + + [Fact] + public void ClearsCreatedLoggers() + { + var logger1 = Logger.GetLogger("TestLogger"); + Logger.ClearLoggers(); + var logger2 = Logger.GetLogger("TestLogger"); + logger1.Should().NotBeSameAs(logger2); + } + + [Fact] + public void CreatesNewLoggerWithGlobalLogLevel() + { + Logger.GlobalLogLevel = LogLevel.Error; + var logger = Logger.GetLogger("TestLogger"); + logger.LogLevel.Should().Be(LogLevel.Error); + } + + [Fact] + public void SetsGlobalLogLevelOnCreatedLogger() + { + var logger = Logger.GetLogger("TestLogger"); + logger.LogLevel.Should().Be(LogLevel.On); + Logger.GlobalLogLevel = LogLevel.Error; + logger.LogLevel.Should().Be(LogLevel.Error); + } + + [Fact] + public void CreatesNewLoggerWithGlobalAppender() + { + var appenderLogLevel = LogLevel.Off; + var appenderMessage = string.Empty; + Logger.AddAppender((log, logLevel, message) => + { + appenderLogLevel = logLevel; + appenderMessage = message; + }); + + var appenderLogLevel2 = LogLevel.Off; + var appenderMessage2 = string.Empty; + Logger.AddAppender((log, logLevel, message) => + { + appenderLogLevel2 = logLevel; + appenderMessage2 = message; + }); + + var logger = Logger.GetLogger("TestLogger"); + logger.Info("test message"); + + appenderLogLevel.Should().Be(LogLevel.Info); + appenderMessage.Should().Be("test message"); + appenderLogLevel2.Should().Be(LogLevel.Info); + appenderMessage2.Should().Be("test message"); + } + + [Fact] + public void AddsAppenderOnCreatedLogger() + { + var logger = Logger.GetLogger("TestLogger"); + var didLog = false; + Logger.AddAppender((log, logLevel, message) => didLog = true); + logger.Info("test message"); + didLog.Should().BeTrue(); + } + + [Fact] + public void RemovesAppenderOnCreatedLogger() + { + var didLog = false; + LogDelegate appender = (log, logLevel, message) => didLog = true; + Logger.AddAppender(appender); + var logger = Logger.GetLogger("TestLogger"); + Logger.RemoveAppender(appender); + logger.Info("test message"); + didLog.Should().BeFalse(); + } + + [Fact] + public void ClearsGlobalAppendersOnCreatedLogger() + { + var appenderLogLevel = LogLevel.Off; + var appenderMessage = string.Empty; + Logger.AddAppender((log, logLevel, message) => + { + appenderLogLevel = logLevel; + appenderMessage = message; + }); + var logger = Logger.GetLogger("TestLogger"); + Logger.ClearAppenders(); + logger.Info("test message"); + appenderLogLevel.Should().Be(LogLevel.Off); + appenderMessage.Should().Be(string.Empty); + } + + public void Dispose() + { + Logger.GlobalLogLevel = LogLevel.On; + Logger.ClearAppenders(); + Logger.ClearLoggers(); + } + } +} diff --git a/src/TCPeasy.Cli/src/AbstractSocketCommand.cs b/src/TCPeasy.Cli/src/AbstractSocketCommand.cs new file mode 100644 index 00000000..11a2f505 --- /dev/null +++ b/src/TCPeasy.Cli/src/AbstractSocketCommand.cs @@ -0,0 +1,38 @@ +ο»Ώusing System; +using System.Net.Sockets; +using System.Text; +using DesperateDevs.Cli.Utils; +using Sherlog; + +namespace TCPeasy.Cli +{ + public abstract class AbstractSocketCommand : AbstractCommand + { + protected readonly Logger _logger; + protected AbstractTcpSocket _socket; + + TcpMessageParser _tcpMessageParser; + + protected AbstractSocketCommand(string loggerName) + { + _logger = Logger.GetLogger(loggerName); + } + + protected void Start() + { + _tcpMessageParser = new TcpMessageParser(); + _tcpMessageParser.OnMessage += OnMessage; + _socket.OnReceived += OnReceive; + Console.CancelKeyPress += OnCancel; + while (true) + { + _socket.Send(TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(Console.ReadLine() ?? string.Empty))); + } + } + + void OnMessage(TcpMessageParser messageParser, byte[] bytes) => _logger.Info(Encoding.UTF8.GetString(bytes)); + + protected void OnReceive(AbstractTcpSocket socket, Socket client, byte[] bytes) => _tcpMessageParser.Receive(bytes); + protected void OnCancel(object sender, ConsoleCancelEventArgs e) => _socket.Disconnect(); + } +} diff --git a/src/TCPeasy.Cli/src/ConnectCommand.cs b/src/TCPeasy.Cli/src/ConnectCommand.cs new file mode 100644 index 00000000..7a775379 --- /dev/null +++ b/src/TCPeasy.Cli/src/ConnectCommand.cs @@ -0,0 +1,37 @@ +ο»Ώusing System; + +namespace TCPeasy.Cli +{ + public class ConnectCommand : AbstractSocketCommand + { + public override string Trigger => "connect"; + public override string Description => "Connect to host on port"; + public override string Group => null; + public override string Example => "connect [host] [port]"; + + public ConnectCommand() : base(typeof(ConnectCommand).FullName) { } + + protected override void Run() + { + string host; + int port; + + try + { + host = _args[0]; + port = int.Parse(_args[1]); + } + catch (Exception) + { + _logger.Error("Please specify a valid host and port"); + return; + } + + var client = new TcpClientSocket(); + _socket = client; + client.OnDisconnected += _ => Environment.Exit(0); + client.Connect(host, port); + Start(); + } + } +} diff --git a/src/TCPeasy.Cli/src/HelpCommand.cs b/src/TCPeasy.Cli/src/HelpCommand.cs new file mode 100644 index 00000000..47953ab3 --- /dev/null +++ b/src/TCPeasy.Cli/src/HelpCommand.cs @@ -0,0 +1,34 @@ +ο»Ώusing System; +using DesperateDevs.Cli.Utils; + +namespace TCPeasy.Cli +{ + public class HelpCommand : AbstractCommand + { + public override string Trigger => "help"; + public override string Description => "Show help"; + public override string Group => null; + public override string Example => "help"; + + protected override void Run() + { + var commandList = _program.GetFormattedCommandList(); + Console.WriteLine($@" +β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•— β–ˆβ–ˆβ•— +β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β• + β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• + β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ•”β• + β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ + β•šβ•β• β•šβ•β•β•β•β•β•β•šβ•β• β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•šβ•β•β•β•β•β•β• β•šβ•β• + +πŸ”Œ Connecting sockets + +usage: tcpeasy [-v | -s] [] +{commandList} +EXAMPLE + tcpeasy listen 1234 + tcpeasy connect localhost 1234 +"); + } + } +} diff --git a/src/TCPeasy.Cli/src/ListenCommand.cs b/src/TCPeasy.Cli/src/ListenCommand.cs new file mode 100644 index 00000000..e3ee8a53 --- /dev/null +++ b/src/TCPeasy.Cli/src/ListenCommand.cs @@ -0,0 +1,34 @@ +ο»Ώusing System; + +namespace TCPeasy.Cli +{ + public class ListenCommand : AbstractSocketCommand + { + public override string Trigger => "listen"; + public override string Description => "Listen on port"; + public override string Group => null; + public override string Example => "listen [port]"; + + public ListenCommand() : base(typeof(ListenCommand).FullName) { } + + protected override void Run() + { + int port; + + try + { + port = int.Parse(_args[0]); + } + catch (Exception) + { + _logger.Error("Invalid port"); + return; + } + + var server = new TcpServerSocket(); + _socket = server; + server.Listen(port); + Start(); + } + } +} diff --git a/src/TCPeasy.Cli/src/Program.cs b/src/TCPeasy.Cli/src/Program.cs new file mode 100644 index 00000000..826a0f2f --- /dev/null +++ b/src/TCPeasy.Cli/src/Program.cs @@ -0,0 +1,12 @@ +ο»Ώusing DesperateDevs.Cli.Utils; + +namespace TCPeasy.Cli +{ + static class Program + { + public static void Main(string[] args) + { + new CliProgram("TCPeasy", typeof(HelpCommand), args).Run(); + } + } +} diff --git a/src/TCPeasy.Cli/src/TCPeasy.Cli.csproj b/src/TCPeasy.Cli/src/TCPeasy.Cli.csproj new file mode 100644 index 00000000..65cdc42d --- /dev/null +++ b/src/TCPeasy.Cli/src/TCPeasy.Cli.csproj @@ -0,0 +1,14 @@ +ο»Ώ + + + Exe + $(DefaultNetTargetFramework) + 1.0.0 + + + + + + + + diff --git a/src/TCPeasy/src/AbstractTcpSocket.cs b/src/TCPeasy/src/AbstractTcpSocket.cs new file mode 100644 index 00000000..3b625fbf --- /dev/null +++ b/src/TCPeasy/src/AbstractTcpSocket.cs @@ -0,0 +1,77 @@ +ο»Ώusing System; +using System.Net; +using System.Net.Sockets; +using Sherlog; + +namespace TCPeasy +{ + public delegate void TcpSocketReceive(AbstractTcpSocket tcpSocket, Socket socket, byte[] bytes); + + public abstract class AbstractTcpSocket : IDisposable + { + public event TcpSocketReceive OnReceived; + + protected readonly Logger _logger; + protected readonly Socket _socket; + + protected AbstractTcpSocket(string loggerName) + { + _logger = Logger.GetLogger(loggerName); + _socket = new Socket( + AddressFamily.InterNetwork, + SocketType.Stream, + ProtocolType.Tcp + ); + } + + public abstract void Send(byte[] buffer); + + protected void Send(Socket socket, byte[] buffer) + { + var key = KeyForEndPoint((IPEndPoint)socket.RemoteEndPoint); + _logger.Debug($"Sending {buffer.Length} bytes via {key}..."); + var args = new SocketAsyncEventArgs(); + args.SetBuffer(buffer, 0, buffer.Length); + args.Completed += OnSend; + if (!socket.SendAsync(args)) + OnSend(socket, args); + } + + void OnSend(object sender, SocketAsyncEventArgs args) + { + var key = KeyForEndPoint((IPEndPoint)((Socket)sender).RemoteEndPoint); + _logger.Debug($"Sent {args.Buffer.Length} bytes via {key}..."); + } + + protected void ReceiveAsync(Socket socket) + { + var args = new SocketAsyncEventArgs(); + args.SetBuffer(new byte[socket.ReceiveBufferSize], 0, socket.ReceiveBufferSize); + args.Completed += OnReceive; + if (!socket.ReceiveAsync(args)) + OnReceive(socket, args); + } + + protected abstract void OnReceive(object sender, SocketAsyncEventArgs args); + + public abstract void Disconnect(); + + protected void TriggerOnReceived(Socket socket, byte[] bytes, int bytesReceived) => + OnReceived?.Invoke(this, socket, TrimmedBytes(bytes, bytesReceived)); + + protected static string KeyForEndPoint(IPEndPoint endPoint) => $"{endPoint.Address}:{endPoint.Port}"; + + static byte[] TrimmedBytes(byte[] bytes, int length) + { + var trimmed = new byte[length]; + Array.Copy(bytes, trimmed, length); + return trimmed; + } + + public void Dispose() + { + _socket.Close(); + _socket.Dispose(); + } + } +} diff --git a/src/TCPeasy/src/TCPeasy.csproj b/src/TCPeasy/src/TCPeasy.csproj new file mode 100644 index 00000000..93f900d9 --- /dev/null +++ b/src/TCPeasy/src/TCPeasy.csproj @@ -0,0 +1,12 @@ +ο»Ώ + + + $(DefaultTargetFramework) + 1.0.0 + + + + + + + diff --git a/src/TCPeasy/src/TcpClientSocket.cs b/src/TCPeasy/src/TcpClientSocket.cs new file mode 100644 index 00000000..a8f8d165 --- /dev/null +++ b/src/TCPeasy/src/TcpClientSocket.cs @@ -0,0 +1,101 @@ +ο»Ώusing System.Linq; +using System.Net; +using System.Net.Sockets; + +namespace TCPeasy +{ + public class TcpClientSocket : AbstractTcpSocket + { + public delegate void TcpClientSocketHandler(TcpClientSocket client); + + public event TcpClientSocketHandler OnConnected; + public event TcpClientSocketHandler OnDisconnected; + + public bool IsConnected => _socket.Connected; + + public TcpClientSocket() : base(typeof(TcpClientSocket).FullName) { } + + public void Connect(string host, int port) + { + var ipAddress = Dns.GetHostEntry(host).AddressList + .FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork); + + Connect(ipAddress, port); + } + + public void Connect(IPAddress ipAddress, int port) + { + _logger.Debug($"Connecting to {ipAddress}:{port}..."); + var args = new SocketAsyncEventArgs + { + RemoteEndPoint = new IPEndPoint(ipAddress, port) + }; + args.Completed += OnConnect; + if (!_socket.ConnectAsync(args)) + OnConnect(_socket, args); + } + + void OnConnect(object sender, SocketAsyncEventArgs args) + { + if (args.SocketError == SocketError.Success) + { + var client = (Socket)sender; + var key = KeyForEndPoint((IPEndPoint)client.RemoteEndPoint); + _logger.Debug($"Connected to {key}"); + OnConnected?.Invoke(this); + ReceiveAsync(client); + } + else + { + _logger.Error(args.SocketError.ToString()); + } + } + + protected override void OnReceive(object sender, SocketAsyncEventArgs args) + { + if (args.SocketError == SocketError.Success) + { + var client = (Socket)sender; + if (args.BytesTransferred == 0) + { + if (client.Connected) + DisconnectedByRemote(client); + } + else + { + var key = KeyForEndPoint((IPEndPoint)client.RemoteEndPoint); + _logger.Debug($"Received {args.BytesTransferred} bytes from {key}"); + TriggerOnReceived(client, args.Buffer, args.BytesTransferred); + ReceiveAsync(client); + } + } + } + + void DisconnectedByRemote(Socket client) + { + _logger.Info("Disconnected by remote"); + Disconnect(); + } + + public override void Disconnect() + { + _logger.Debug("Disconnecting..."); + _socket.Shutdown(SocketShutdown.Both); + var args = new SocketAsyncEventArgs + { + DisconnectReuseSocket = true + }; + args.Completed += OnDisconnect; + if (!_socket.DisconnectAsync(args)) + OnDisconnect(_socket, args); + } + + void OnDisconnect(object sender, SocketAsyncEventArgs args) + { + _logger.Debug("Disconnected"); + OnDisconnected?.Invoke(this); + } + + public override void Send(byte[] buffer) => Send(_socket, buffer); + } +} diff --git a/src/TCPeasy/src/TcpMessageParser.cs b/src/TCPeasy/src/TcpMessageParser.cs new file mode 100644 index 00000000..13d67d0f --- /dev/null +++ b/src/TCPeasy/src/TcpMessageParser.cs @@ -0,0 +1,84 @@ +ο»Ώusing System; + +namespace TCPeasy +{ + public class TcpMessageParser + { + public const int BufferLength = sizeof(int); + + public delegate void TcpMessageParserMessage(TcpMessageParser messageParser, byte[] bytes); + + public event TcpMessageParserMessage OnMessage; + + readonly byte[] _lengthBuffer = new byte[BufferLength]; + + byte[] _messageBuffer; + int _readIndex; + int _writeIndex; + + public static byte[] WrapMessage(byte[] message) + { + var lengthPrefix = BitConverter.GetBytes(message.Length); + var prefixedMessage = new byte[lengthPrefix.Length + message.Length]; + lengthPrefix.CopyTo(prefixedMessage, 0); + message.CopyTo(prefixedMessage, lengthPrefix.Length); + return prefixedMessage; + } + + public static byte[] UnwrapMessage(byte[] message) + { + var lengthPrefix = new byte[BufferLength]; + var unwrappedMessage = new byte[message.Length - BufferLength]; + Array.Copy(message, lengthPrefix, BufferLength); + Array.Copy(message, BufferLength, unwrappedMessage, 0, unwrappedMessage.Length); + return unwrappedMessage; + } + + public void Receive(byte[] bytes) + { + while (_readIndex < bytes.Length) + { + if (_messageBuffer == null) ReadLength(bytes); + if (_messageBuffer != null) ReadMessage(bytes); + } + + _readIndex = 0; + } + + void ReadLength(byte[] bytes) + { + if (Read(bytes, _lengthBuffer, BufferLength)) + _messageBuffer = new byte[BitConverter.ToInt32(_lengthBuffer, 0)]; + } + + void ReadMessage(byte[] bytes) + { + if (Read(bytes, _messageBuffer, _messageBuffer.Length)) + { + var message = _messageBuffer; + _messageBuffer = null; + OnMessage?.Invoke(this, message); + } + } + + bool Read(byte[] bytes, byte[] buffer, int length) + { + var bytesToReadToFillBuffer = length - _writeIndex; + var availableBytesToRead = bytes.Length - _readIndex; + if (bytesToReadToFillBuffer <= availableBytesToRead) + { + Array.Copy(bytes, _readIndex, buffer, _writeIndex, bytesToReadToFillBuffer); + _readIndex += bytesToReadToFillBuffer; + _writeIndex = 0; + return true; + } + else + { + Array.Copy(bytes, _readIndex, buffer, _writeIndex, availableBytesToRead); + _readIndex += availableBytesToRead; + _writeIndex += availableBytesToRead; + return false; + } + } + } +} diff --git a/src/TCPeasy/src/TcpServerSocket.cs b/src/TCPeasy/src/TcpServerSocket.cs new file mode 100644 index 00000000..050be12e --- /dev/null +++ b/src/TCPeasy/src/TcpServerSocket.cs @@ -0,0 +1,127 @@ +ο»Ώusing System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; + +namespace TCPeasy +{ + public class TcpServerSocket : AbstractTcpSocket + { + public delegate void TcpServerSocketHandler(TcpServerSocket server, Socket client); + + public event TcpServerSocketHandler OnClientConnected; + public event TcpServerSocketHandler OnClientDisconnected; + + public int Count => _clients.Count; + + readonly Dictionary _clients = new Dictionary(); + + public TcpServerSocket() : base(typeof(TcpServerSocket).FullName) { } + + public void Listen(int port) + { + _logger.Info($"Listening on port {port}"); + _socket.Bind(new IPEndPoint(IPAddress.Any, port)); + _socket.Listen(128); + AcceptAsync(); + } + + void AcceptAsync() + { + var args = new SocketAsyncEventArgs(); + args.Completed += OnAccept; + if (!_socket.AcceptAsync(args)) + OnAccept(_socket, args); + } + + void OnAccept(object sender, SocketAsyncEventArgs args) + { + if (args.SocketError == SocketError.Success) + { + var key = KeyForEndPoint((IPEndPoint)args.AcceptSocket.RemoteEndPoint); + _clients.Add(key, args.AcceptSocket); + _logger.Debug($"Accepted new client connection from {key}"); + OnClientConnected?.Invoke(this, args.AcceptSocket); + ReceiveAsync(args.AcceptSocket); + AcceptAsync(); + } + } + + protected override void OnReceive(object sender, SocketAsyncEventArgs args) + { + if (args.SocketError == SocketError.Success) + { + var client = (Socket)sender; + if (args.BytesTransferred == 0) + { + if (client.Connected) + { + args.UserToken = sender; + OnClientDisconnect(sender, args); + } + } + else + { + var key = KeyForEndPoint((IPEndPoint)client.RemoteEndPoint); + _logger.Debug($"Received {args.BytesTransferred} bytes from {key}"); + TriggerOnReceived(client, args.Buffer, args.BytesTransferred); + ReceiveAsync(client); + } + } + } + + public Socket GetClientWithRemoteEndPoint(IPEndPoint endPoint) + { + _clients.TryGetValue(KeyForEndPoint(endPoint), out var client); + return client; + } + + public override void Send(byte[] buffer) + { + if (_clients.Count != 0) + foreach (var client in _clients.Values.ToArray()) + Send(client, buffer); + else + _logger.Debug("No connected clients. Won't send."); + } + + public void SendTo(byte[] buffer, IPEndPoint endPoint) => + Send(GetClientWithRemoteEndPoint(endPoint), buffer); + + public void DisconnectClient(IPEndPoint endPoint) => + DisconnectClient(GetClientWithRemoteEndPoint(endPoint)); + + public override void Disconnect() + { + _socket.Close(); + _logger.Info("Stopped listening"); + foreach (var client in _clients.Values.ToArray()) + DisconnectClient(client); + } + + void DisconnectClient(Socket client) + { + if (client != null && client.Connected) + { + client.Shutdown(SocketShutdown.Both); + var args = new SocketAsyncEventArgs(); + args.Completed += OnClientDisconnect; + if (!client.DisconnectAsync(args)) + OnClientDisconnect(client, args); + } + } + + void OnClientDisconnect(object sender, SocketAsyncEventArgs args) + { + var client = (Socket)sender; + var key = _clients.Single(kvp => kvp.Value == client).Key; + _clients.Remove(key); + client.Shutdown(SocketShutdown.Both); + client.Close(); + _logger.Debug(args.UserToken != null + ? $"Client {key} disconnected" + : $"Disconnected client {key}"); + OnClientDisconnected?.Invoke(this, client); + } + } +} diff --git a/src/TCPeasy/tests/TCPeasy.Tests.csproj b/src/TCPeasy/tests/TCPeasy.Tests.csproj new file mode 100644 index 00000000..47d5e87c --- /dev/null +++ b/src/TCPeasy/tests/TCPeasy.Tests.csproj @@ -0,0 +1,23 @@ + + + + $(DefaultTestTargetFramework) + false + false + + + + + + + + + + + + + + + + + diff --git a/src/TCPeasy/tests/TcpClientSocketTests.cs b/src/TCPeasy/tests/TcpClientSocketTests.cs new file mode 100644 index 00000000..d2e42cc0 --- /dev/null +++ b/src/TCPeasy/tests/TcpClientSocketTests.cs @@ -0,0 +1,266 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using FluentAssertions; +using Sherlog; +using Sherlog.Formatters; +using Xunit; +using Xunit.Abstractions; + +namespace TCPeasy.Tests +{ + [Collection("TCPeasy.Tests")] + public class TcpClientSocketTests : IDisposable + { + static readonly LogMessageFormatter Formatter = new LogMessageFormatter("[{1}]\t{0}: {2}"); + + // while true; do nc -l 4321; done + const int Port = 4321; + + readonly IPAddress _ipAddress = IPAddress.Loopback; + + readonly ITestOutputHelper _output; + readonly List<(LogLevel LogLevel, string Message)> _logs; + + TcpServerSocket _server = new TcpServerSocket(); + TcpClientSocket _client; + + public TcpClientSocketTests(ITestOutputHelper output) + { + _output = output; + _logs = new List<(LogLevel, string)>(); + Logger.AddAppender((logger, level, message) => _output.WriteLine(Formatter.FormatMessage(logger, level, message))); + Logger.AddAppender((_, level, message) => _logs.Add((level, message))); + _server.Listen(Port); + Wait(); + } + + [Fact] + public void ConnectsToHost() + { + CreateClient(); + _client.Connect("127.0.0.1", Port); + Wait(); + _client.IsConnected.Should().BeTrue(); + } + + [Fact] + public void ConnectsToIpAddress() + { + CreateConnectedClient().IsConnected.Should().BeTrue(); + } + + [Fact] + public void DispatchesOnConnected() + { + CreateClient(); + (TcpClientSocket Client, int Invoked) args = new(null, 0); + _client.OnConnected += socket => + { + args.Client = socket; + args.Invoked += 1; + }; + + Connect(); + args.Invoked.Should().Be(1); + args.Client.Should().BeSameAs(_client); + } + + [Fact] + public void DoesNotConnectToClosedPort() + { + CreateClient(); + _client.Connect(_ipAddress, Port + 1); + Wait(); + _client.IsConnected.Should().BeFalse(); + _logs.Single(log => log.LogLevel == LogLevel.Error).Message + .Should().Be(SocketError.ConnectionRefused.ToString()); + } + + [Fact] + public void Disconnects() + { + CreateConnectedClient(); + Disconnect(); + _client.IsConnected.Should().BeFalse(); + } + + [Fact] + public void DispatchesOnDisconnected() + { + CreateConnectedClient(); + (TcpClientSocket Client, int Invoked) args = new(null, 0); + _client.OnDisconnected += socket => + { + args.Client = socket; + args.Invoked += 1; + }; + + Disconnect(); + args.Invoked.Should().Be(1); + args.Client.Should().BeSameAs(_client); + } + + [Fact] + public void ReusesSocket() + { + CreateConnectedClient(); + _client.IsConnected.Should().BeTrue(); + Disconnect(); + _client.IsConnected.Should().BeFalse(); + Connect(); + _client.IsConnected.Should().BeTrue(); + } + + [Fact] + public void ReceivesMessage() + { + CreateConnectedClient(); + + (AbstractTcpSocket Client, Socket Socket, byte[] Bytes, int Invoked) args = new(null, null, null, 0); + _client.OnReceived += (tcpSocket, socket, bytes) => + { + args.Client = tcpSocket; + args.Socket = socket; + args.Bytes = bytes; + args.Invoked += 1; + }; + + var buffer = Send(_server, "test-message"); + args.Invoked.Should().Be(1); + args.Client.Should().BeSameAs(_client); + args.Bytes.Should().BeEquivalentTo(buffer); + } + + [Fact] + public void ReceivesMultipleMessage() + { + CreateConnectedClient(); + + (AbstractTcpSocket Client, Socket Socket, List BytesList) args = new(null, null, new List()); + _client.OnReceived += (tcpSocket, socket, bytes) => + { + args.Client = tcpSocket; + args.Socket = socket; + args.BytesList.Add(bytes); + }; + + var buffer1 = Send(_server, "test-message-1"); + var buffer2 = Send(_server, "test-message-2"); + args.BytesList.Should().HaveCount(2); + args.BytesList[0].Should().BeEquivalentTo(buffer1); + args.BytesList[1].Should().BeEquivalentTo(buffer2); + } + + [Fact] + public void DisconnectedByRemote() + { + CreateConnectedClient(); + _server.Disconnect(); + Wait(); + _client.IsConnected.Should().BeFalse(); + } + + [Fact] + public void DispatchesOnDisconnectedWhenDisconnectedByRemote() + { + CreateConnectedClient(); + + TcpClientSocket eventSocket = null; + _client.OnDisconnected += socket => { eventSocket = socket; }; + + _server.Disconnect(); + Wait(); + _client.IsConnected.Should().BeFalse(); + eventSocket.Should().BeSameAs(_client); + } + + [Fact] + public void ReusesSocketDisconnectedByRemote() + { + CreateConnectedClient(); + _client.IsConnected.Should().BeTrue(); + + _server.Disconnect(); + Wait(); + _client.IsConnected.Should().BeFalse(); + + _server = new TcpServerSocket(); + _server.Listen(Port); + Wait(); + + Connect(); + _client.IsConnected.Should().BeTrue(); + + (AbstractTcpSocket Client, Socket Socket, byte[] Bytes, int Invoked) args = new(null, null, null, 0); + _client.OnReceived += (tcpSocket, socket, bytes) => + { + args.Client = tcpSocket; + args.Socket = socket; + args.Bytes = bytes; + args.Invoked += 1; + }; + + var buffer = Send(_server, "test-message"); + args.Invoked.Should().Be(1); + args.Client.Should().BeSameAs(_client); + args.Bytes.Should().BeEquivalentTo(buffer); + } + + [Fact] + public void SendsMessage() + { + CreateConnectedClient(); + byte[] eventBytes = null; + _server.OnReceived += (_, _, bytes) => eventBytes = bytes; + + var buffer = Send(_client, "test-message"); + eventBytes.Should().BeEquivalentTo(buffer); + } + + void CreateClient() => _client = new TcpClientSocket(); + + TcpClientSocket CreateConnectedClient() + { + CreateClient(); + Connect(); + return _client; + } + + void Connect() + { + _client.Connect(_ipAddress, Port); + Wait(); + } + + byte[] Send(AbstractTcpSocket socket, string message) + { + var buffer = Encoding.UTF8.GetBytes(message); + socket.Send(buffer); + Wait(); + return buffer; + } + + void Disconnect() + { + _client.Disconnect(); + Wait(); + } + + public void Dispose() + { + _output.WriteLine("Dispose"); + _client.Dispose(); + _server.Disconnect(); + Wait(); + Logger.GlobalLogLevel = LogLevel.On; + Logger.ClearAppenders(); + Logger.ClearLoggers(); + } + + static void Wait() => System.Threading.Thread.Sleep(50); + } +} diff --git a/src/DesperateDevs.Networking/tests/TcpMessageParserTests.cs b/src/TCPeasy/tests/TcpMessageParserTests.cs similarity index 81% rename from src/DesperateDevs.Networking/tests/TcpMessageParserTests.cs rename to src/TCPeasy/tests/TcpMessageParserTests.cs index b5aaf452..beb55623 100644 --- a/src/DesperateDevs.Networking/tests/TcpMessageParserTests.cs +++ b/src/TCPeasy/tests/TcpMessageParserTests.cs @@ -4,11 +4,11 @@ using FluentAssertions; using Xunit; -namespace DesperateDevs.Networking.Tests +namespace TCPeasy.Tests { public class TcpMessageParserTests { - readonly TcpMessageParser _parser = new(); + readonly TcpMessageParser _parser = new TcpMessageParser(); [Fact] public void WrapsAndUnwrapsMessage() @@ -25,11 +25,11 @@ public void ParsesFullMessage() { const string message = "123456"; var messages = 0; - _parser.OnMessage += (p, b) => + _parser.OnMessage += (parser, bytes) => { messages += 1; - p.Should().BeSameAs(_parser); - Encoding.UTF8.GetString(b).Should().Be(message); + parser.Should().BeSameAs(_parser); + Encoding.UTF8.GetString(bytes).Should().Be(message); }; var bytes = TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(message)); @@ -43,7 +43,7 @@ public void DoesNotParsePartialMessage() const string message = "123456"; const string partialMessage = "123"; - _parser.OnMessage += (p, b) => throw new Exception("parser.OnMessage"); + _parser.OnMessage += delegate { throw new Exception("parser.OnMessage"); }; var lengthPrefix = BitConverter.GetBytes(message.Length); var prefixedMessage = new byte[lengthPrefix.Length + partialMessage.Length]; @@ -63,10 +63,10 @@ public void CompletesPartialMessage() const string partialMessage2 = "456"; var messages = 0; - _parser.OnMessage += (p, b) => + _parser.OnMessage += (parser, bytes) => { messages += 1; - Encoding.UTF8.GetString(b).Should().Be(message); + Encoding.UTF8.GetString(bytes).Should().Be(message); }; var lengthPrefix = BitConverter.GetBytes(message.Length); @@ -90,18 +90,13 @@ public void ReadsMultipleMessages() const string message1 = "123456"; const string message2 = "abcdef"; var messages = 0; - _parser.OnMessage += (p, b) => + _parser.OnMessage += (parser, bytes) => { messages += 1; - if (messages == 1) - { - Encoding.UTF8.GetString(b).Should().Be(message1); - } + Encoding.UTF8.GetString(bytes).Should().Be(message1); else if (messages == 2) - { - Encoding.UTF8.GetString(b).Should().Be(message2); - } + Encoding.UTF8.GetString(bytes).Should().Be(message2); }; var bytes1 = TcpMessageParser.WrapMessage(Encoding.UTF8.GetBytes(message1)); diff --git a/src/TCPeasy/tests/TcpServerSocketTests.cs b/src/TCPeasy/tests/TcpServerSocketTests.cs new file mode 100644 index 00000000..fe398715 --- /dev/null +++ b/src/TCPeasy/tests/TcpServerSocketTests.cs @@ -0,0 +1,382 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Text; +using FluentAssertions; +using Sherlog; +using Sherlog.Formatters; +using Xunit; +using Xunit.Abstractions; + +namespace TCPeasy.Tests +{ + [Collection("TCPeasy.Tests")] + public class TcpServerSocketTests : IDisposable + { + static readonly LogMessageFormatter Formatter = new LogMessageFormatter("[{1}]\t{0}: {2}"); + + const int Port = 1234; + static readonly IPAddress IpAddress = IPAddress.Loopback; + + readonly TcpServerSocket _server = new TcpServerSocket(); + + Socket _client1; + Socket _client2; + + readonly ITestOutputHelper _output; + + public TcpServerSocketTests(ITestOutputHelper output) + { + _output = output; + Logger.AddAppender((logger, level, message) => _output.WriteLine(Formatter.FormatMessage(logger, level, message))); + } + + [Fact] + public void NewServerSocketDoesNotHaveConnectedClients() + { + Listen(); + _server.Count.Should().Be(0); + } + + [Fact] + public void AcceptsClientConnection() + { + Listen(); + ConnectClient(out _client1); + _server.Count.Should().Be(1); + } + + [Fact] + public void DispatchesOnClientConnected() + { + (TcpServerSocket Server, Socket Client, int Invoked) args = new(null, null, 0); + _server.OnClientConnected += (server, client) => + { + args.Server = server; + args.Client = client; + args.Invoked += 1; + }; + + Listen(); + + ConnectClient(out _client1); + args.Invoked.Should().Be(1); + var rep = (IPEndPoint)args.Client.RemoteEndPoint!; + rep.Port.Should().Be(((IPEndPoint)_client1.LocalEndPoint)!.Port); + args.Server.Should().BeSameAs(_server); + } + + [Fact] + public void AcceptsMultipleClientConnection() + { + Listen(); + ConnectClient(out _client1); + ConnectClient(out _client2); + _server.Count.Should().Be(2); + } + + [Fact] + public void DispatchesMultipleOnClientConnected() + { + (TcpServerSocket Server, Socket Client, int Invoked) args = new(null, null, 0); + _server.OnClientConnected += (server, client) => + { + args.Server = server; + args.Client = client; + args.Invoked += 1; + }; + + Listen(); + + ConnectClient(out _client1); + args.Invoked.Should().Be(1); + var rep1 = (IPEndPoint)args.Client.RemoteEndPoint!; + rep1.Port.Should().Be(((IPEndPoint)_client1.LocalEndPoint)!.Port); + args.Server.Should().BeSameAs(_server); + + ConnectClient(out _client2); + args.Invoked.Should().Be(2); + var rep2 = (IPEndPoint)args.Client.RemoteEndPoint!; + rep2.Port.Should().Be(((IPEndPoint)_client2.LocalEndPoint)!.Port); + args.Server.Should().BeSameAs(_server); + } + + [Fact] + public void GetsClientByEndPoint() + { + (TcpServerSocket Server, Socket Client, int Invoked) args = new(null, null, 0); + _server.OnClientConnected += (server, client) => + { + args.Server = server; + args.Client = client; + args.Invoked += 1; + }; + + Listen(); + + ConnectClient(out _client1); + var rep = (IPEndPoint)args.Client.RemoteEndPoint!; + var key = new IPEndPoint(rep.Address, rep.Port); + var client = _server.GetClientWithRemoteEndPoint(key); + client.Should().BeSameAs(args.Client); + } + + [Fact] + public void ReceivesClientMessage() + { + (AbstractTcpSocket Server, Socket Client, byte[] Bytes) args = new(null, null, null); + _server.OnReceived += (server, socket, bytes) => + { + args.Server = server; + args.Client = socket; + args.Bytes = bytes; + }; + + Listen(); + ConnectClient(out _client1); + + var buffer = SendUsingClient(_client1); + args.Server.Should().BeSameAs(_server); + args.Bytes.Should().BeEquivalentTo(buffer); + } + + [Fact] + public void ReceivesMultipleClientMessages() + { + (AbstractTcpSocket Server, Socket Client, List BytesList) args = new(null, null, new List()); + _server.OnReceived += (server, socket, bytes) => + { + args.Server = server; + args.Client = socket; + args.BytesList.Add(bytes); + }; + + Listen(); + ConnectClient(out _client1); + + var buffer1 = SendUsingClient(_client1, "test-message-1"); + var buffer2 = SendUsingClient(_client1, "test-message-2"); + args.BytesList.Should().HaveCount(2); + args.BytesList[0].Should().BeEquivalentTo(buffer1); + args.BytesList[1].Should().BeEquivalentTo(buffer2); + } + + [Fact] + public void RemovesDisconnectedClient() + { + Listen(); + ConnectClient(out _client1); + DisconnectClient(ref _client1); + _server.Count.Should().Be(0); + } + + [Fact] + public void DispatchesOnClientDisconnected() + { + (TcpServerSocket Server, Socket Client, int Invoked) args = new(null, null, 0); + _server.OnClientDisconnected += (server, client) => + { + args.Server = server; + args.Client = client; + args.Invoked += 1; + }; + + Listen(); + ConnectClient(out _client1); + + DisconnectClient(ref _client1); + args.Invoked.Should().Be(1); + args.Server.Should().BeSameAs(_server); + } + + [Fact] + public void DoesNotSendWhenNoClients() + { + Listen(); + Send("test-message"); + } + + [Fact] + public void SendsMessageToClient() + { + string received = null; + Listen(); + ConnectClient(out _client1); + PrepareForReceive(_client1, s => received = s); + const string message = "test-message"; + + Send(message); + received.Should().Be(message); + } + + [Fact] + public void SendsMessageToAllConnectedClients() + { + Listen(); + ConnectClient(out _client1); + ConnectClient(out _client2); + string received1 = null; + string received2 = null; + PrepareForReceive(_client1, s => received1 = s); + PrepareForReceive(_client2, s => received2 = s); + const string message = "test-message"; + + Send(message); + received1.Should().Be(message); + received2.Should().Be(message); + } + + [Fact] + public void SendsMessageToSpecifiedClient() + { + Listen(); + + ConnectClient(out _client1); + + IPEndPoint endPoint = null; + _server.OnClientConnected += (server, client) => endPoint = (IPEndPoint)client.RemoteEndPoint; + ConnectClient(out _client2); + + string received1 = null; + string received2 = null; + PrepareForReceive(_client1, s => received1 = s); + PrepareForReceive(_client2, s => received2 = s); + const string message = "test-message"; + + SendTo(endPoint, message); + received1.Should().BeNull(); + received2.Should().Be(message); + } + + [Fact] + public void DisconnectingWithoutClientsDoesNothing() + { + Disconnect(); + Disconnect(); + } + + [Fact] + public void DisconnectsAndRemovesClients() + { + Listen(); + ConnectClient(out _client1); + Disconnect(); + _server.Count.Should().Be(0); + } + + [Fact] + public void DisconnectsClient() + { + Listen(); + + IPEndPoint endPoint = null; + _server.OnClientConnected += (server, client) => endPoint = (IPEndPoint)client.RemoteEndPoint; + ConnectClient(out _client1); + + var client = _server.GetClientWithRemoteEndPoint(endPoint); + client.Connected.Should().BeTrue(); + + _server.DisconnectClient(endPoint); + Wait(); + + client.Connected.Should().BeFalse(); + } + + [Fact] + public void DisconnectsClientAndDispatchesOnClientDisconnected() + { + Listen(); + + IPEndPoint endPoint = null; + _server.OnClientConnected += (server, client) => endPoint = (IPEndPoint)client.RemoteEndPoint; + (TcpServerSocket Server, Socket Client, int Invoked) args = new(null, null, 0); + _server.OnClientDisconnected += (server, client) => + { + args.Server = server; + args.Client = client; + args.Invoked += 1; + }; + + ConnectClient(out _client1); + _server.DisconnectClient(endPoint); + Wait(); + + args.Invoked.Should().Be(1); + args.Server.Should().BeSameAs(_server); + } + + void Listen() => _server.Listen(Port); + + void Disconnect() + { + _server.Disconnect(); + Wait(); + } + + void ConnectClient(out Socket client) + { + client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + client.Connect(IpAddress, Port); + Wait(); + } + + void Send(string message) + { + _server.Send(Encoding.UTF8.GetBytes(message)); + Wait(); + } + + void SendTo(IPEndPoint endPoint, string message) + { + _server.SendTo(Encoding.UTF8.GetBytes(message), endPoint); + Wait(); + } + + byte[] SendUsingClient(Socket client, string message = "test-message") + { + var buffer = Encoding.UTF8.GetBytes(message); + client.Send(buffer, 0, buffer.Length, SocketFlags.None); + Wait(); + return buffer; + } + + void DisconnectClient(ref Socket client) + { + client.Shutdown(SocketShutdown.Both); + client.Disconnect(false); + client.Close(); + Wait(); + client = null; + } + + void PrepareForReceive(Socket socket, Action onReceive) + { + var args = new SocketAsyncEventArgs(); + args.SetBuffer(new byte[socket.ReceiveBufferSize], 0, socket.ReceiveBufferSize); + args.Completed += (sender, eventArgs) => + { + if (eventArgs.SocketError == SocketError.Success) + { + var trimmedBuffer = new byte[eventArgs.BytesTransferred]; + Array.Copy(eventArgs.Buffer, trimmedBuffer, eventArgs.BytesTransferred); + onReceive(Encoding.UTF8.GetString(trimmedBuffer)); + } + }; + socket.ReceiveAsync(args); + Wait(); + } + + public void Dispose() + { + _output.WriteLine("Dispose"); + Disconnect(); + Wait(); + Logger.GlobalLogLevel = LogLevel.On; + Logger.ClearAppenders(); + Logger.ClearLoggers(); + } + + static void Wait() => System.Threading.Thread.Sleep(50); + } +}