diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 96e55d7..4fcb207 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ concurrency: cancel-in-progress: true env: - UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} + UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }} UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} @@ -653,3 +653,53 @@ jobs: name: Package test results (combined) path: packageArtifacts/ retention-days: 14 + + testPackageRunnerWithScopeRegistry: + name: Test package mode in all modes with Scoped Registry 📦✨ + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + projectPath: + - unity-package-with-correct-tests/com.dependencyexample.testpackage + unityVersion: + - 2022.3.13f1 + - 2023.1.19f1 + - 2023.2.2f1 + steps: + ########################### + # Checkout # + ########################### + - uses: actions/checkout@v4 + with: + lfs: true + + # Configure test runner + - name: Run tests + id: packageAllTests + uses: ./ + with: + projectPath: ${{ matrix.projectPath }} + unityVersion: ${{ matrix.unityVersion }} + testMode: all + coverageOptions: 'generateAdditionalMetrics;generateHtmlReport;generateBadgeReport;assemblyFilters:+dependencyexample.testpackage.*,-*Tests*' + packageMode: true + scopedRegistryUrl: https://package.openupm.com + registryScopes: 'com.cysharp.unitask' + # Test implicit artifactsPath, by not setting it + + # Upload artifacts + - name: Upload test results + uses: actions/upload-artifact@v3 + with: + name: Package test results (all) + path: ${{ steps.packageAllTests.outputs.artifactsPath }} + retention-days: 14 + + # Upload coverage + - name: Upload coverage results + uses: actions/upload-artifact@v3 + with: + name: Package Coverage results (all) + path: ${{ steps.packageAllTests.outputs.coveragePath }} + retention-days: 14 diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor.meta new file mode 100644 index 0000000..5c30312 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a62b511ba12825d4d9f992b4ed37a533 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature.meta new file mode 100644 index 0000000..9cdf8e2 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3a65787d84893340b9dc38af5b7c31f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs new file mode 100644 index 0000000..efb6bd1 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs @@ -0,0 +1,15 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; + +[CustomEditor(typeof(TimerComponent))] +public class LevelScriptEditor : Editor +{ + public override void OnInspectorGUI() + { + TimerComponent myTarget = (TimerComponent)target; + + EditorGUILayout.LabelField("Timer", myTarget.Timer.ToString()); + } +} + diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs.meta new file mode 100644 index 0000000..56eed92 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/TimerFeature/TimerComponentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0a715d2f35ea4c40a6f1cdae355c61c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef new file mode 100644 index 0000000..bae1823 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "example.testpackage.Editor", + "rootNamespace": "", + "references": [ + "example.testpackage.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef.meta new file mode 100644 index 0000000..3e67208 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Editor/example.testpackage.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8223b1b52474b674a87c6113b6384f10 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime.meta new file mode 100644 index 0000000..44514bc --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e472ec5749e60ca4db87f10cec905d2c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature.meta new file mode 100644 index 0000000..8ca2b62 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21861106477d38342a589fc525c4e0bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts.meta new file mode 100644 index 0000000..c6b3ced --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c6729c46a2a6594da2ce1182420ab81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs new file mode 100644 index 0000000..0101bdf --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs @@ -0,0 +1,18 @@ +using System; + +public class BasicCounter +{ + public const int MaxCount = 10; + + public BasicCounter(int count = 0) + { + Count = count; + } + + public void Increment() + { + Count = Math.Min(MaxCount, Count + 1); + } + + public int Count { get; private set; } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs.meta new file mode 100644 index 0000000..0da96a2 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/BasicCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bd8dfbd5c7fc9e439246091668234b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs new file mode 100644 index 0000000..e9bd241 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +public class SampleComponent : MonoBehaviour +{ + public BasicCounter Counter; + + void Start() + { + Counter = new BasicCounter(5); + } + + // Update is called once per frame + void Update() + { + Counter.Increment(); + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs.meta new file mode 100644 index 0000000..d981e18 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/SampleComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 121f2ede62657a84082c012941df22d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs new file mode 100644 index 0000000..2d65e1a --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +public class TimerComponent : MonoBehaviour +{ + public BasicCounter Counter = new BasicCounter(); + public float Timer = 1f; + + void Update() + { + Timer -= Time.deltaTime; + + if (Timer > 0) + return; + + Counter.Increment(); + Timer = 1f; + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs.meta new file mode 100644 index 0000000..44edba2 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/TimerFeature/Scripts/TimerComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 563e4fb514abf6141b80ca1b71c08889 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef new file mode 100644 index 0000000..a8b791d --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef @@ -0,0 +1,14 @@ +{ + "name": "example.testpackage.Runtime", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef.meta new file mode 100644 index 0000000..5401ef9 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Runtime/example.testpackage.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b20629d7e725e1e449076020f132df2a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests.meta new file mode 100644 index 0000000..3863eb2 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0f3a0ff2938264498234e4aaa66cf5f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor.meta new file mode 100644 index 0000000..9449f88 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7644cfe4cdc2d0f4ebc7ab351323a576 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs new file mode 100644 index 0000000..66726d9 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Tests +{ + public class SampleEditModeTest + { + [Test] + public void TestIncrement() + { + // Given + var counter = new BasicCounter(0); + + // When + counter.Increment(); + + // Then + Assert.AreEqual(1, counter.Count); + } + + [Test] + public void TestMaxCount() + { + // Given + var counter = new BasicCounter(BasicCounter.MaxCount); + + // When + counter.Increment(); + + // Then + Assert.AreEqual(BasicCounter.MaxCount, counter.Count); + } + + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs.meta new file mode 100644 index 0000000..9f734cb --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/SampleEditModeTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88de94cc1489d83488ce54f71b512989 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef new file mode 100644 index 0000000..9dcfba8 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef @@ -0,0 +1,25 @@ +{ + "name": "example.testpackage.EditorTests", + "rootNamespace": "", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "example.testpackage.Editor", + "example.testpackage.Runtime" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef.meta new file mode 100644 index 0000000..d1d92be --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Editor/example.testpackage.EditorTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b5712d2009ce3b34a8ca077667b16764 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime.meta new file mode 100644 index 0000000..a97face --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4f774583b1374a4abe450c7100726bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs new file mode 100644 index 0000000..87dac53 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs @@ -0,0 +1,31 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Tests +{ + public class SampleComponentTest + { + private GameObject target; + private SampleComponent component; + + [SetUp] + public void Setup() + { + target = GameObject.Instantiate(new GameObject()); + component = target.AddComponent(); + } + + [UnityTest] + public IEnumerator TestIncrementOnUpdateAfterNextFrame() + { + // Save the current value, since it was updated after component Start() method called + var count = component.Counter.Count; + + // Skip frame and assert the new value + yield return null; + Assert.AreEqual(count + 1, component.Counter.Count); + } + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs.meta new file mode 100644 index 0000000..5062a9f --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SampleComponentTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b551b84934711564eb78aab8c16425ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs new file mode 100644 index 0000000..27542b6 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs @@ -0,0 +1,42 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine.TestTools; + +namespace Tests +{ + public class SamplePlayModeTest + { + // A Test behaves as an ordinary method + [Test] + public void NewTestScriptSimplePasses() + { + // Given + var counter = new BasicCounter(0); + + // When + counter.Increment(); + + // Then + Assert.AreEqual(1, counter.Count); + } + + // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use + // `yield return null;` to skip a frame. + [UnityTest] + public IEnumerator NewTestScriptWithEnumeratorPasses() + { + // Given + var counter = new BasicCounter(3); + + // Use the Assert class to test conditions. + // Use yield to skip a frame. + yield return null; + + // When + counter.Increment(); + + // Then + Assert.AreEqual(4, counter.Count); + } + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs.meta new file mode 100644 index 0000000..082306f --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/SamplePlayModeTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dbe2d2dc79550c4d81602bcf94a9824 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs new file mode 100644 index 0000000..34dd94b --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs @@ -0,0 +1,66 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace Tests +{ + public class TimerComponentTest + { + private GameObject target; + private TimerComponent component; + + [SetUp] + public void Setup() + { + target = GameObject.Instantiate(new GameObject()); + component = target.AddComponent(); + } + + [UnityTest] + public IEnumerator TestIncrementAfterSomeTime() + { + // Save the current value, since it was updated after component Start() method called + var count = component.Counter.Count; + + // Skip frame and assert the new value + yield return null; + Assert.AreEqual(count, component.Counter.Count); + + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(count + 1, component.Counter.Count); + + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(count + 2, component.Counter.Count); + } + + [UnityTest] + public IEnumerator TestTimeScaleIsAffectingIncrement() + { + // Save the current value, since it was updated after component Start() method called + var count = component.Counter.Count; + Time.timeScale = .5f; + + // Skip frame and assert the new value + yield return null; + Assert.AreEqual(count, component.Counter.Count); + + yield return WaitForRealSeconds(1.1f); + Assert.AreEqual(count, component.Counter.Count); + + yield return WaitForRealSeconds(1.1f); + Assert.AreEqual(count + 1, component.Counter.Count); + } + + // Skipping time ignoring Time.scale + // https://answers.unity.com/questions/301868/yield-waitforseconds-outside-of-timescale.html + public static IEnumerator WaitForRealSeconds(float time) + { + float start = Time.realtimeSinceStartup; + while (Time.realtimeSinceStartup < start + time) + { + yield return null; + } + } + } +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs.meta new file mode 100644 index 0000000..a5be472 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/TimerComponentTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 010121a56a70d60428dc89307eb77b54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef new file mode 100644 index 0000000..114044e --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef @@ -0,0 +1,22 @@ +{ + "name": "example.testpackage.RuntimeTests", + "rootNamespace": "", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "example.testpackage.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef.meta new file mode 100644 index 0000000..c856882 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/Tests/Runtime/example.testpackage.RuntimeTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 902aaaf7a59149243b2f4e38fc9f388e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json b/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json new file mode 100644 index 0000000..0f4a13c --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json @@ -0,0 +1,21 @@ +{ + "name": "com.dependencyexample.testpackage", + "version": "0.0.1", + "displayName": "Test Package", + "description": "Test Package", + "unity": "2022.3", + "unityRelease": "7f1", + "dependencies": { + "com.cysharp.unitask": "2.5.3" + }, + "keywords": [ + "nothing" + ], + "author": { + "name": "Example Author", + "email": "author@example.com", + "url": "example.com" + }, + "type": "tool", + "hideInEditor": false +} diff --git a/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json.meta b/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json.meta new file mode 100644 index 0000000..e9fe039 --- /dev/null +++ b/unity-package-with-correct-tests/com.dependencyexample.testpackage/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4232dbd3889ab6a4393e846291288fb0 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: