mirror of
https://github.com/storytold/Azure-Kinect-Sample-for-Unity.git
synced 2026-10-12 23:48:57 +00:00
Sample
This commit is contained in:
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bac185a28e198c1419b649ca946942ea
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Unity.PackageManagerCaptain.Editor")]
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5941c79cb78c34a0d9c677ece9784f15
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 87738e82a4f047cc947cff8a2ccea594
|
||||
timeCreated: 1507838883
|
||||
+281
@@ -0,0 +1,281 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageSets
|
||||
{
|
||||
private static readonly PackageSets _instance = new PackageSets();
|
||||
public static PackageSets Instance { get { return _instance; } }
|
||||
|
||||
private static readonly System.Random Random = new System.Random(1);
|
||||
private static string RandomString(int length)
|
||||
{
|
||||
const string chars = "abcdefghijklmnopqrstuvwxyz";
|
||||
return new string(Enumerable.Repeat(chars, length)
|
||||
.Select(s => s[Random.Next(s.Length)]).ToArray());
|
||||
}
|
||||
|
||||
private static readonly string[] Words = new[] { "lorem", "ipsum", "dolor", "sit", "amet", "consectetuer",
|
||||
"adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod",
|
||||
"tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat" };
|
||||
|
||||
private static string LoremIpsum(int numParagraphs, int minSentences, int maxSentences, int minWords, int maxWords)
|
||||
{
|
||||
var result = new StringBuilder();
|
||||
|
||||
for (var p = 0; p < numParagraphs; p++)
|
||||
{
|
||||
var numSentences = Random.Next(maxSentences - minSentences) + minSentences + 1;
|
||||
for (var s = 0; s < numSentences; s++)
|
||||
{
|
||||
var numWords = Random.Next(maxWords - minWords) + minWords + 1;
|
||||
for (var w = 0; w < numWords; w++)
|
||||
{
|
||||
if (p == 0 && s == 0 && w == 0)
|
||||
{
|
||||
result.Append("Lorem ipsum dolor sit");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (w == 0)
|
||||
{
|
||||
var firstWord = Words [Random.Next (Words.Length)];
|
||||
firstWord = char.ToUpper (firstWord [0]) + firstWord.Substring (1);
|
||||
result.Append (firstWord);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Append (" ");
|
||||
result.Append (Words [Random.Next (Words.Length)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
result.Append(". ");
|
||||
}
|
||||
result.Append(System.Environment.NewLine);
|
||||
result.Append(System.Environment.NewLine);
|
||||
}
|
||||
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
private int _count = 0;
|
||||
|
||||
public PackageInfo Single(string name = null, string version = null)
|
||||
{
|
||||
var type = Random.NextDouble() > 0.5 ? PackageSource.Unknown : PackageSource.Registry;
|
||||
return Single(type, name, version);
|
||||
}
|
||||
|
||||
public PackageInfo Single(PackageSource type, string name = null, string version = null, bool isCurrent = true, bool isVerified = false)
|
||||
{
|
||||
if (name == null)
|
||||
name = RandomString(Random.Next(5, 10));
|
||||
if (version == null)
|
||||
{
|
||||
version = string.Format("1.0.{0}", _count);
|
||||
if (Random.NextDouble() > 0.5)
|
||||
version += "-preview";
|
||||
}
|
||||
|
||||
var group = UpmBaseOperation.GroupName(type);
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = char.ToUpper(name[0]) + name.Substring(1),
|
||||
Name = string.Format("com.unity.{0}", name),
|
||||
Description = LoremIpsum(Random.Next(3,5), 2, 10, 5, 20),
|
||||
PackageId = string.Format("com.unity.{0}@{1}", name, version),
|
||||
State = PackageState.UpToDate,
|
||||
Group = group,
|
||||
Version = version,
|
||||
IsVerified = isVerified,
|
||||
IsCurrent = isCurrent,
|
||||
IsLatest = false,
|
||||
Origin = type,
|
||||
Category = null,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
|
||||
_count++;
|
||||
|
||||
return package;
|
||||
}
|
||||
|
||||
public List<PackageInfo> Many(int count, bool onlyPackageGroup = false)
|
||||
{
|
||||
return Many(null, count, onlyPackageGroup);
|
||||
}
|
||||
|
||||
public List<PackageInfo> Many(string name, int count, bool onlyPackageGroup = false)
|
||||
{
|
||||
var packages = new List<PackageInfo>();
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var package = Single(name);
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
// At least one is set to a module and one to a package
|
||||
if (packages.Count > 1)
|
||||
{
|
||||
packages[0].Group = PackageGroupOrigins.Packages.ToString();
|
||||
packages[1].Group = PackageGroupOrigins.BuiltInPackages.ToString();
|
||||
}
|
||||
|
||||
if (onlyPackageGroup)
|
||||
packages.SetGroup(PackageGroupOrigins.Packages.ToString());
|
||||
|
||||
if (name != null)
|
||||
{
|
||||
packages.SetCurrent(false);
|
||||
packages.SetLatest(false);
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
packages.First().IsCurrent = true;
|
||||
packages.First().IsLatest = false;
|
||||
packages.Last().IsCurrent = false;
|
||||
packages.Last().IsLatest = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
packages.First().IsCurrent = true;
|
||||
packages.First().IsLatest = true;
|
||||
}
|
||||
}
|
||||
|
||||
return packages.OrderBy(p => p.DisplayName).ToList();
|
||||
}
|
||||
|
||||
public List<PackageInfo> TestData()
|
||||
{
|
||||
var packages = Many(5);
|
||||
packages[0].State = PackageState.UpToDate;
|
||||
packages[1].State = PackageState.Outdated;
|
||||
packages[2].State = PackageState.InProgress;
|
||||
packages[3].State = PackageState.Error;
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
// Package that actually exist. Useful when using test package that will be added to manifest
|
||||
public List<PackageInfo> RealPackages()
|
||||
{
|
||||
var packages = new List<PackageInfo>();
|
||||
|
||||
// Don't add this package if it exists
|
||||
if (PackageCollection.Instance.GetPackageByName("a") == null)
|
||||
{
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = "A",
|
||||
Name = "a",
|
||||
Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
|
||||
PackageId = "a@1.0.1",
|
||||
State = PackageState.UpToDate,
|
||||
Version = "1.0.1",
|
||||
Group = PackageGroupOrigins.Packages.ToString(),
|
||||
IsCurrent = true,
|
||||
IsLatest = true,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
if (PackageCollection.Instance.GetPackageByName("b") == null)
|
||||
{
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = "B",
|
||||
Name = "b",
|
||||
Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
|
||||
PackageId = "b@1.0.1",
|
||||
State = PackageState.UpToDate,
|
||||
Version = "1.0.1",
|
||||
Group = PackageGroupOrigins.Packages.ToString(),
|
||||
IsCurrent = true,
|
||||
IsLatest = true,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
if (PackageCollection.Instance.GetPackageByName("c") == null)
|
||||
{
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = "C",
|
||||
Name = "c",
|
||||
Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
|
||||
PackageId = "c@1.0.1",
|
||||
State = PackageState.UpToDate,
|
||||
Version = "1.0.1",
|
||||
Group = PackageGroupOrigins.Packages.ToString(),
|
||||
IsCurrent = true,
|
||||
IsLatest = true,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
if (PackageCollection.Instance.GetPackageByName("d") == null)
|
||||
{
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = "NonExistingVersion(d)",
|
||||
Name = "d",
|
||||
Description = "Non existing package", //LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
|
||||
PackageId = "d@4.0.0",
|
||||
State = PackageState.UpToDate,
|
||||
Version = "4.0.0",
|
||||
Group = PackageGroupOrigins.Packages.ToString(),
|
||||
IsCurrent = true,
|
||||
IsLatest = true,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
if (PackageCollection.Instance.GetPackageByName("nonexistingpackage") == null)
|
||||
{
|
||||
var package = new PackageInfo
|
||||
{
|
||||
DisplayName = "NonExistingPackage",
|
||||
Name = "nonexistingpackage",
|
||||
Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
|
||||
PackageId = "nonexistingpackage@0.0.1",
|
||||
State = PackageState.UpToDate,
|
||||
Version = "0.0.1",
|
||||
Group = PackageGroupOrigins.Packages.ToString(),
|
||||
IsCurrent = true,
|
||||
IsLatest = true,
|
||||
Errors = new List<Error>()
|
||||
};
|
||||
packages.Add(package);
|
||||
}
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
public List<PackageInfo> Outdated()
|
||||
{
|
||||
const string name = "TestOutdated";
|
||||
|
||||
var packageA = Single(PackageSource.Registry, name, "1.0.1");
|
||||
var packageB = Single(PackageSource.Registry, name, "1.0.2");
|
||||
packageA.State = PackageState.Outdated;
|
||||
packageB.IsCurrent = true;
|
||||
packageB.IsLatest = false;
|
||||
|
||||
packageB.State = PackageState.UpToDate;
|
||||
packageB.IsCurrent = false;
|
||||
packageB.IsLatest = true;
|
||||
|
||||
var packages = new List<PackageInfo> {packageA, packageB};
|
||||
|
||||
return packages;
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5edd19845e0e426eb775477a7988a4a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using UnityEditor.Experimental.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Experimental.UIElements;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal abstract class UITests<TWindow> where TWindow : EditorWindow
|
||||
{
|
||||
private TWindow Window { get; set; }
|
||||
protected VisualElement Container { get { return Window.GetRootVisualContainer(); } }
|
||||
protected MockOperationFactory Factory { get; private set; }
|
||||
|
||||
[OneTimeSetUp]
|
||||
protected void OneTimeSetUp()
|
||||
{
|
||||
Factory = new MockOperationFactory();
|
||||
OperationFactory.Instance = Factory;
|
||||
|
||||
Window = EditorWindow.GetWindow<TWindow>();
|
||||
Window.Show();
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
protected void OneTimeTearDown()
|
||||
{
|
||||
OperationFactory.Reset();
|
||||
Window = null;
|
||||
|
||||
if (TestContext.CurrentContext.Result.FailCount <= 0)
|
||||
{
|
||||
PackageCollection.Instance.UpdatePackageCollection(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void SetSearchPackages(IEnumerable<PackageInfo> packages)
|
||||
{
|
||||
Factory.SearchOperation = new MockSearchOperation(Factory, packages);
|
||||
PackageCollection.Instance.FetchSearchCache(true);
|
||||
}
|
||||
|
||||
protected void SetListPackages(IEnumerable<PackageInfo> packages)
|
||||
{
|
||||
Factory.Packages = packages;
|
||||
PackageCollection.Instance.FetchListCache(true);
|
||||
}
|
||||
|
||||
protected static Error MakeError(ErrorCode code, string message)
|
||||
{
|
||||
var error = "{\"errorCode\" : " + (uint)code + ", \"message\" : \"" + message + "\"}";
|
||||
return JsonUtility.FromJson<Error>(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 76078ddafb924ce19edc6034201cb15b
|
||||
timeCreated: 1507838870
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 005c4d80949154e5c87348bb9f5d15eb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f851ca8f9604f442aafccf60a6713ce9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockAddOperation : MockOperation, IAddOperation
|
||||
{
|
||||
public new event Action<Error> OnOperationError = delegate { };
|
||||
public new event Action OnOperationFinalized = delegate { };
|
||||
public event Action<PackageInfo> OnOperationSuccess = delegate { };
|
||||
|
||||
public PackageInfo PackageInfo { get; set; }
|
||||
|
||||
public MockAddOperation(MockOperationFactory factory, PackageInfo packageInfo = null) : base(factory)
|
||||
{
|
||||
PackageInfo = packageInfo;
|
||||
}
|
||||
|
||||
public void AddPackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction = null,
|
||||
Action<Error> errorCallbackAction = null)
|
||||
{
|
||||
if (ForceError != null)
|
||||
{
|
||||
if (errorCallbackAction != null)
|
||||
errorCallbackAction(ForceError);
|
||||
|
||||
IsCompleted = true;
|
||||
OnOperationError(ForceError);
|
||||
}
|
||||
else
|
||||
{
|
||||
// on add package success, add the package to the list and set it to current
|
||||
var list = Factory.Packages.ToList();
|
||||
list.RemoveAll(p => p.PackageId.ToLower() == packageInfo.PackageId.ToLower());
|
||||
list.Add(packageInfo);
|
||||
Factory.Packages = list;
|
||||
|
||||
Factory.Packages.ByName(packageInfo.Name).SetCurrent(false);
|
||||
packageInfo.IsCurrent = true;
|
||||
|
||||
if (doneCallbackAction != null)
|
||||
doneCallbackAction(PackageInfo);
|
||||
|
||||
IsCompleted = true;
|
||||
OnOperationSuccess(PackageInfo);
|
||||
}
|
||||
|
||||
OnOperationFinalized();
|
||||
}
|
||||
|
||||
internal void ResetEvents()
|
||||
{
|
||||
OnOperationError = delegate { };
|
||||
OnOperationFinalized = delegate { };
|
||||
OnOperationSuccess = delegate { };
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e426a33061f184a9785cd5d82f9fb486
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockListOperation : MockOperation, IListOperation
|
||||
{
|
||||
public new event Action<Error> OnOperationError = delegate { };
|
||||
public new event Action OnOperationFinalized = delegate { };
|
||||
|
||||
public bool OfflineMode { get; set; }
|
||||
|
||||
public MockListOperation(MockOperationFactory factory) : base(factory)
|
||||
{
|
||||
}
|
||||
|
||||
public void GetPackageListAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction,
|
||||
Action<Error> errorCallbackAction = null)
|
||||
{
|
||||
if (ForceError != null)
|
||||
{
|
||||
if (errorCallbackAction != null)
|
||||
errorCallbackAction(ForceError);
|
||||
|
||||
IsCompleted = true;
|
||||
OnOperationError(ForceError);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doneCallbackAction != null)
|
||||
doneCallbackAction(Factory.Packages);
|
||||
|
||||
IsCompleted = true;
|
||||
}
|
||||
|
||||
OnOperationFinalized();
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fea24dc53b50441a9b2a8f9473fede33
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockOperation : IBaseOperation
|
||||
{
|
||||
public event Action<Error> OnOperationError { add { } remove { } }
|
||||
public event Action OnOperationFinalized { add { } remove { } }
|
||||
public event Action<string> OnOperationFailure { add { } remove { } }
|
||||
|
||||
public bool IsCompleted { get; protected set; }
|
||||
public bool RequireNetwork { get; set; }
|
||||
|
||||
public Error ForceError { protected get; set; } // Allow external component to force an error on the requests (eg: testing)
|
||||
|
||||
protected readonly MockOperationFactory Factory;
|
||||
|
||||
protected MockOperation(MockOperationFactory factory)
|
||||
{
|
||||
RequireNetwork = false;
|
||||
Factory = factory;
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4fc12201ddc4b4d45b9bdecdf7f00ea5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockRemoveOperation : MockOperation, IRemoveOperation
|
||||
{
|
||||
public new event Action<Error> OnOperationError = delegate { };
|
||||
public new event Action OnOperationFinalized = delegate { };
|
||||
public event Action<PackageInfo> OnOperationSuccess = delegate { };
|
||||
|
||||
public PackageInfo PackageInfo { get; set; }
|
||||
|
||||
public MockRemoveOperation(MockOperationFactory factory) : base(factory)
|
||||
{
|
||||
}
|
||||
|
||||
public void RemovePackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction, Action<Error> errorCallbackAction = null)
|
||||
{
|
||||
if (ForceError != null)
|
||||
{
|
||||
if (errorCallbackAction != null)
|
||||
errorCallbackAction(ForceError);
|
||||
|
||||
IsCompleted = true;
|
||||
OnOperationError(ForceError);
|
||||
OnOperationFinalized();
|
||||
return;
|
||||
}
|
||||
|
||||
Factory.Packages = (from package in Factory.Packages
|
||||
where package.PackageId.ToLower() != packageInfo.PackageId.ToLower()
|
||||
select package);
|
||||
|
||||
if (doneCallbackAction != null)
|
||||
doneCallbackAction(packageInfo);
|
||||
|
||||
IsCompleted = true;
|
||||
OnOperationSuccess(packageInfo);
|
||||
OnOperationFinalized();
|
||||
}
|
||||
|
||||
internal void ResetEvents()
|
||||
{
|
||||
OnOperationError = delegate { };
|
||||
OnOperationFinalized = delegate { };
|
||||
OnOperationSuccess = delegate { };
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fd382b8abbd6145c29e32af0e2a26d88
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockSearchOperation : MockOperation, ISearchOperation
|
||||
{
|
||||
public new event Action<Error> OnOperationError = delegate { };
|
||||
public new event Action OnOperationFinalized = delegate { };
|
||||
|
||||
public IEnumerable<PackageInfo> Packages { get; set; }
|
||||
|
||||
public MockSearchOperation(MockOperationFactory factory, IEnumerable<PackageInfo> packages) : base(factory)
|
||||
{
|
||||
Packages = packages;
|
||||
}
|
||||
|
||||
public void GetAllPackageAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction = null, Action<Error> errorCallbackAction = null)
|
||||
{
|
||||
if (ForceError != null)
|
||||
{
|
||||
if (errorCallbackAction != null)
|
||||
errorCallbackAction(ForceError);
|
||||
IsCompleted = true;
|
||||
OnOperationError(ForceError);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doneCallbackAction != null)
|
||||
doneCallbackAction(Packages);
|
||||
|
||||
IsCompleted = true;
|
||||
}
|
||||
|
||||
OnOperationFinalized();
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a2c7bcbdfe0a438999cb0653789cdf4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class MockOperationFactory : IOperationFactory
|
||||
{
|
||||
public IEnumerable<PackageInfo> Packages { get; set; }
|
||||
public MockAddOperation AddOperation { get; set; }
|
||||
public MockSearchOperation SearchOperation { private get; set; }
|
||||
public MockRemoveOperation RemoveOperation { private get; set; }
|
||||
|
||||
public MockOperationFactory()
|
||||
{
|
||||
Packages = Enumerable.Empty<PackageInfo>();
|
||||
}
|
||||
|
||||
public void ResetOperations()
|
||||
{
|
||||
if (AddOperation != null)
|
||||
AddOperation.ResetEvents();
|
||||
AddOperation = null;
|
||||
|
||||
if (RemoveOperation != null)
|
||||
RemoveOperation.ResetEvents();
|
||||
RemoveOperation = null;
|
||||
|
||||
SearchOperation = null;
|
||||
}
|
||||
|
||||
public IListOperation CreateListOperation(bool offlineMode = false)
|
||||
{
|
||||
return new MockListOperation(this);
|
||||
}
|
||||
|
||||
public ISearchOperation CreateSearchOperation()
|
||||
{
|
||||
return SearchOperation ?? new MockSearchOperation(this, Packages);
|
||||
}
|
||||
|
||||
public IAddOperation CreateAddOperation()
|
||||
{
|
||||
return AddOperation ?? new MockAddOperation(this, Packages.First());
|
||||
}
|
||||
|
||||
public IRemoveOperation CreateRemoveOperation()
|
||||
{
|
||||
return RemoveOperation ?? new MockRemoveOperation(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 75938f72739584ed9925bf4ae8989079
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f68d88b9933cd4204925b22192bf15b4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageBaseTests
|
||||
{
|
||||
protected MockOperationFactory Factory;
|
||||
protected const string kPackageTestName = "com.unity.test";
|
||||
|
||||
|
||||
[OneTimeSetUp]
|
||||
public void OneTimeSetup()
|
||||
{
|
||||
Factory = new MockOperationFactory();
|
||||
OperationFactory.Instance = Factory;
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
public void OneTimeTearDown()
|
||||
{
|
||||
OperationFactory.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 983d491088dbb4db8b83c926939a08c5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageCollectionTests : PackageBaseTests
|
||||
{
|
||||
private Action<PackageFilter> OnFilterChangeEvent;
|
||||
private Action<IEnumerable<Package>> OnPackagesChangeEvent;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
PackageCollection.Instance.OnFilterChanged -= OnFilterChangeEvent;
|
||||
PackageCollection.Instance.OnPackagesChanged -= OnPackagesChangeEvent;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_Instance_FilterIsLocal()
|
||||
{
|
||||
Assert.AreEqual(PackageFilter.Local, PackageCollection.Instance.Filter);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenFilterChange_FilterChangeEventIsPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnFilterChangeEvent = filter =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnFilterChanged += OnFilterChangeEvent;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All, false);
|
||||
Assert.IsTrue(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenNoFilterChange_FilterChangeEventIsNotPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnFilterChangeEvent = filter =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnFilterChanged += OnFilterChangeEvent;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local, false);
|
||||
Assert.IsFalse(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenFilterChange_FilterIsChanged()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All, false);
|
||||
Assert.AreEqual(PackageFilter.All, PackageCollection.Instance.Filter);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenNoFilterChangeRefresh_PackagesChangeEventIsNotPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local);
|
||||
Assert.IsFalse(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenFilterChangeNoRefresh_PackagesChangeEventIsNotPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All, false);
|
||||
Assert.IsFalse(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetFilter_WhenNoFilterChangeNoRefresh_PackagesChangeEventIsNotPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local, false);
|
||||
Assert.IsFalse(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FetchListCache_PackagesChangeEventIsPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
Factory.Packages = PackageSets.Instance.Many(5);
|
||||
PackageCollection.Instance.FetchListCache(true);
|
||||
|
||||
Assert.IsTrue(wasCalled);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void FetchListOfflineCache_PackagesChangeEventIsPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
|
||||
Factory.Packages = PackageSets.Instance.Many(5);
|
||||
PackageCollection.Instance.FetchListOfflineCache(true);
|
||||
|
||||
Assert.IsTrue(wasCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FetchSearchCache_PackagesChangeEventIsPropagated()
|
||||
{
|
||||
var wasCalled = false;
|
||||
OnPackagesChangeEvent = packages =>
|
||||
{
|
||||
wasCalled = true;
|
||||
};
|
||||
PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
|
||||
|
||||
Factory.SearchOperation = new MockSearchOperation(Factory, PackageSets.Instance.Many(5));
|
||||
PackageCollection.Instance.FetchSearchCache(true);
|
||||
|
||||
Assert.IsTrue(wasCalled);
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01cd264c206ae482393dc9d04b26eca0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
using NUnit.Framework;
|
||||
using Semver;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageInfoTests : PackageBaseTests
|
||||
{
|
||||
[Test]
|
||||
public void HasTag_WhenPreReleasePackageVersionTagWithPreReleaseName_ReturnsTrue()
|
||||
{
|
||||
var tag = PackageTag.preview.ToString();
|
||||
|
||||
var info = new PackageInfo()
|
||||
{
|
||||
PackageId = kPackageTestName,
|
||||
Version = new SemVersion(1, 0, 0, tag)
|
||||
};
|
||||
|
||||
Assert.IsTrue(info.HasVersionTag(tag));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void HasTag_WhenPackageVersionTagIsAnyCase_ReturnsTrue()
|
||||
{
|
||||
var tag = "pREview";
|
||||
|
||||
var info = new PackageInfo()
|
||||
{
|
||||
PackageId = kPackageTestName,
|
||||
Version = new SemVersion(1, 0, 0, tag)
|
||||
};
|
||||
|
||||
Assert.IsTrue(info.HasVersionTag(tag));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionWithoutTag_WhenVersionContainsTag_ReturnsVersionOnly()
|
||||
{
|
||||
var info = new PackageInfo()
|
||||
{
|
||||
PackageId = kPackageTestName,
|
||||
Version = new SemVersion(1, 0, 0, PackageTag.preview.ToString())
|
||||
};
|
||||
|
||||
Assert.AreEqual("1.0.0", info.VersionWithoutTag);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionWithoutTag_WhenVersionDoesNotContainTag_ReturnsVersionOnly()
|
||||
{
|
||||
var info = new PackageInfo()
|
||||
{
|
||||
PackageId = kPackageTestName,
|
||||
Version = new SemVersion(1)
|
||||
};
|
||||
|
||||
Assert.AreEqual("1.0.0", info.VersionWithoutTag);
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2f1d33abb004b44cb90ec83a2bfe872e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+146
@@ -0,0 +1,146 @@
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageSearchTests : PackageBaseTests
|
||||
{
|
||||
private const string kName = "Test-Package";
|
||||
|
||||
private const string kCurrentVersion = "3.0.0";
|
||||
private const string kPrerelease = "preview";
|
||||
private const string kUpperPrerelease = "PREVIEW";
|
||||
private const string kMixedPrerelease = "pReViEw";
|
||||
|
||||
private Package testPackage;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
testPackage = new Package(kName, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, kName, kCurrentVersion + "-" + kPrerelease, true, true)
|
||||
});
|
||||
}
|
||||
|
||||
[TestCase(null)]
|
||||
[TestCase("")]
|
||||
[TestCase("\t")]
|
||||
[TestCase(" ")]
|
||||
[TestCase(" ")]
|
||||
public void MatchCriteria_NullOrEmptyCriteria_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCaseSource("GetAllPartialName")]
|
||||
public void MatchCriteria_CriteriaMatchDisplayNamePartially_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCaseSource("GetAllPartialVersions")]
|
||||
public void MatchCriteria_CriteriaMatchCurrentVersion_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCase(kPrerelease)]
|
||||
[TestCase(kUpperPrerelease)]
|
||||
[TestCase(kMixedPrerelease)]
|
||||
public void MatchCriteria_CriteriaMatchCurrentVersionPreRelease_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCase("p")]
|
||||
[TestCase("pr")]
|
||||
[TestCase("pre")]
|
||||
[TestCase("prev")]
|
||||
[TestCase("view")]
|
||||
[TestCase("vie")]
|
||||
[TestCase("vi")]
|
||||
public void MatchCriteria_CriteriaPartialMatchCurrentVersionPreRelease_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCase("-p")]
|
||||
[TestCase("-pr")]
|
||||
[TestCase("-pre")]
|
||||
[TestCase("-prev")]
|
||||
[TestCase("-previ")]
|
||||
[TestCase("-previe")]
|
||||
[TestCase("-preview")]
|
||||
public void MatchCriteria_CriteriaPartialMatchCurrentVersionPreReleaseLeadingDash_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCase("veri")]
|
||||
[TestCase("verif")]
|
||||
[TestCase("verifie")]
|
||||
[TestCase("verified")]
|
||||
[TestCase("erified")]
|
||||
[TestCase("rified")]
|
||||
[TestCase("ified")]
|
||||
public void MatchCriteria_CriteriaPartialMatchVerified_ReturnsTrue(string criteria)
|
||||
{
|
||||
Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
[TestCase("Test Package")]
|
||||
[TestCase("Test -Package")]
|
||||
[TestCase("Test - Package")]
|
||||
[TestCase("Test- Package")]
|
||||
[TestCase("NotFound")]
|
||||
[TestCase("1.0.0-preview")]
|
||||
[TestCase("5.0.0")]
|
||||
[TestCase("beta")]
|
||||
[TestCase("previewed")]
|
||||
[TestCase("verify")]
|
||||
[TestCase("experimental")]
|
||||
public void MatchCriteria_CriteriaDoesntMatch_ReturnsFalse(string criteria)
|
||||
{
|
||||
Assert.IsFalse(PackageFiltering.FilterByText(testPackage, criteria));
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetAllPartialVersions()
|
||||
{
|
||||
var versions = new List<string>();
|
||||
for (var i = 1; i <= kCurrentVersion.Length; i++)
|
||||
{
|
||||
versions.Add(kCurrentVersion.Substring(0, i));
|
||||
}
|
||||
return versions;
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetAllPartial(string str)
|
||||
{
|
||||
var names = new List<string>();
|
||||
for (var i = 0; i < str.Length; i++)
|
||||
{
|
||||
var s1 = str.Substring(0, i + 1);
|
||||
var s2 = str.Substring(i, str.Length - i);
|
||||
names.Add(s1);
|
||||
names.Add(s1.ToLower());
|
||||
names.Add(s1.ToUpper());
|
||||
names.Add(" " + s1);
|
||||
names.Add(s1 + " ");
|
||||
names.Add(" " + s1 + " ");
|
||||
names.Add(s2);
|
||||
names.Add(s2.ToLower());
|
||||
names.Add(s2.ToUpper());
|
||||
names.Add(" " + s2);
|
||||
names.Add(s2 + " ");
|
||||
names.Add(" " + s2 + " ");
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetAllPartialName()
|
||||
{
|
||||
return GetAllPartial(kName);
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 448aaa781aea44811a5d66e3edac37e4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+521
@@ -0,0 +1,521 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using Semver;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageTests : PackageBaseTests
|
||||
{
|
||||
private Action<IAddOperation> OnAddOperation;
|
||||
private Action<IRemoveOperation> OnRemoveOperation;
|
||||
|
||||
// Package version to display
|
||||
public PackageInfo Display(Package package)
|
||||
{
|
||||
return PackageCollection.Instance.Filter == PackageFilter.All || package.Current == null ? package.Latest : package.Current;
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
Factory.ResetOperations();
|
||||
Factory.Packages = Enumerable.Empty<PackageInfo>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithNullPackageName_ThrowsException()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
Assert.Throws<ArgumentException>(() =>
|
||||
{
|
||||
new Package(null, packages);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithEmptyPackageName_ThrowsException()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
Assert.Throws<ArgumentException>(() =>
|
||||
{
|
||||
new Package("", packages);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithNullPackageInfos_ThrowsException()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() =>
|
||||
{
|
||||
new Package(kPackageTestName, null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithEmptyPackageInfos_ThrowsException()
|
||||
{
|
||||
var packages = Enumerable.Empty<PackageInfo>();
|
||||
Assert.Throws<ArgumentException>(() =>
|
||||
{
|
||||
new Package(kPackageTestName, packages);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithOnePackageInfo_CurrentIsFirstVersion()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Current, package.Versions.First());
|
||||
Assert.IsTrue(package.Current.IsCurrent);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithOnePackageInfo_LatestIsLastVersion()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Latest, package.Versions.Last());
|
||||
Assert.IsTrue(package.Latest.IsCurrent);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithOnePackageInfo_LatestAndCurrentAreEqual()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Current, package.Latest);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithTwoPackageInfos_CurrentIsFirstVersion()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Current, package.Versions.First());
|
||||
Assert.IsTrue(package.Current.IsCurrent);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithTwoPackageInfos_LatestIsLastVersion()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Latest, package.Versions.Last());
|
||||
Assert.IsFalse(package.Latest.IsCurrent);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithTwoPackagesInfo_LatestAndCurrentAreNotEqual()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreNotEqual(package.Current, package.Latest);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Constructor_WithMultiplePackagesInfo_VersionsCorrespond()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(packages, package.Versions);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Add_WhenPackageInfoIsCurrent_AddOperationIsNotCalled()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 3, true);
|
||||
Factory.Packages = packages;
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var addOperationCalled = false;
|
||||
|
||||
OnAddOperation = operation =>
|
||||
{
|
||||
addOperationCalled = true;
|
||||
};
|
||||
|
||||
package.AddSignal.OnOperation += OnAddOperation;
|
||||
package.Add(packages.First());
|
||||
package.AddSignal.OnOperation -= OnAddOperation;
|
||||
|
||||
Assert.IsFalse(addOperationCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Add_WhenPackageInfoIsNotCurrent_AddOperationIsCalled()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 3, true);
|
||||
Factory.Packages = packages;
|
||||
Factory.AddOperation = new MockAddOperation(Factory, packages[1]);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var addOperationCalled = false;
|
||||
|
||||
OnAddOperation = operation =>
|
||||
{
|
||||
addOperationCalled = true;
|
||||
};
|
||||
|
||||
package.AddSignal.OnOperation += OnAddOperation;
|
||||
package.Add(packages[1]);
|
||||
package.AddSignal.OnOperation -= OnAddOperation;
|
||||
|
||||
Assert.IsTrue(addOperationCalled);
|
||||
}
|
||||
[Test]
|
||||
public void Update_WhenCurrentIsLatest_AddOperationIsNotCalled()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
Factory.Packages = packages;
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var addOperationCalled = false;
|
||||
|
||||
OnAddOperation = operation =>
|
||||
{
|
||||
addOperationCalled = true;
|
||||
};
|
||||
|
||||
package.AddSignal.OnOperation += OnAddOperation;
|
||||
package.Update();
|
||||
package.AddSignal.OnOperation -= OnAddOperation;
|
||||
|
||||
Assert.IsFalse(addOperationCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Update_WhenCurrentIsNotLatest_AddOperationIsCalled()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
Factory.Packages = packages;
|
||||
Factory.AddOperation = new MockAddOperation(Factory, packages.Last());
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var addOperationCalled = false;
|
||||
|
||||
OnAddOperation = operation =>
|
||||
{
|
||||
addOperationCalled = true;
|
||||
};
|
||||
|
||||
package.AddSignal.OnOperation += OnAddOperation;
|
||||
package.Update();
|
||||
package.AddSignal.OnOperation -= OnAddOperation;
|
||||
|
||||
Assert.IsTrue(addOperationCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Remove_RemoveOperationIsCalled()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
Factory.Packages = packages;
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var removeOperationCalled = false;
|
||||
|
||||
OnRemoveOperation = operation =>
|
||||
{
|
||||
removeOperationCalled = true;
|
||||
};
|
||||
|
||||
package.RemoveSignal.OnOperation += OnRemoveOperation;
|
||||
package.Remove();
|
||||
package.RemoveSignal.OnOperation -= OnRemoveOperation;
|
||||
|
||||
Assert.IsTrue(removeOperationCalled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPackageManagerUI_WhenPackageManagerUIPackage_ReturnsTrue()
|
||||
{
|
||||
var packages = new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Unknown, Package.packageManagerUIName, "1.0.0")
|
||||
};
|
||||
var package = new Package(Package.packageManagerUIName, packages);
|
||||
|
||||
Assert.IsTrue(package.IsPackageManagerUI);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPackageManagerUI_WhenNotPackageManagerUIPackage_ReturnsFalse()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.IsFalse(package.IsPackageManagerUI);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Name_ReturnsExpectedValue()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(kPackageTestName, package.Name);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Display_WhenCurrentIsNotNull_ReturnsCurrent()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Current, Display(package));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Display_WhenCurrentIsNull_ReturnsLatest()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
packages[0].IsCurrent = false;
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(package.Latest, Display(package));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Display_WhenCurrentAndLatest_ReturnsLatest()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
|
||||
packages[0].IsCurrent = false;
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
var answer = packages.Max(x => x.Version);
|
||||
|
||||
Assert.AreEqual(Display(package).Version, answer);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Versions_WhenOrderedPackageInfo_ReturnsOrderedValues()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(packages, package.Versions);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Versions_WhenUnorderedPackageInfo_ReturnsOrderedValues()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
|
||||
packages[0].Version = new SemVersion(1);
|
||||
packages[1].Version = new SemVersion(4);
|
||||
packages[2].Version = new SemVersion(2);
|
||||
packages[3].Version = new SemVersion(5);
|
||||
packages[4].Version = new SemVersion(3);
|
||||
|
||||
var orderPackages = packages.OrderBy(p => p.Version);
|
||||
|
||||
var package = new Package(kPackageTestName, packages);
|
||||
|
||||
Assert.AreEqual(orderPackages, package.Versions);
|
||||
}
|
||||
|
||||
//
|
||||
// Version Comparison tests
|
||||
//
|
||||
private static string name = "test";
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_Current_lessthen_Verified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true), // Verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_Current_equalto_Verified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", true, true), // Verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_Current_greaterthen_Verified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true), // Verified
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "3.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_Current_greaterthen_Verified_WithLatest()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true), // Verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "4.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoVerified_Current_lessthen_Latest()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "3.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoVerified_Current_equalto_Latest()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "0.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoCurrent_WithVerified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true), // verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoCurrent_Latest()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoCurrent_Latest_WithPreview()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoCurrent_Verified_WithPreview()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true), // verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_NoCurrent_OnlyPreviews()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0-preview", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0-preview", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "2.0.0-preview");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_CurrentPreview_WithVerified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true), // verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true) // current
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "3.0.0-preview");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_CurrentPreview_WithLatestPreview()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true), // verified
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true), // current
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0-preview", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "4.0.0-preview");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_CurrentPreview_WithLatestPreviewNoVerified()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true), // current
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0-preview", false)
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "4.0.0-preview");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersionUpdate_CurrentEmbedded()
|
||||
{
|
||||
var package = new Package(name, new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Embedded, name, "1.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true), // verified
|
||||
});
|
||||
|
||||
Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78e267bad6d564d49803ba3e9c13ff2e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b87dac66d6e74d5f848d26f169bbe89
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine.Experimental.UIElements;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageDetailsTests : UITests<PackageManagerWindow>
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local);
|
||||
PackageCollection.Instance.UpdatePackageCollection(true);
|
||||
SetSearchPackages(Enumerable.Empty<PackageInfo>());
|
||||
SetListPackages(Enumerable.Empty<PackageInfo>());
|
||||
Factory.ResetOperations();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectTag()
|
||||
{
|
||||
var packageInfo = PackageSets.Instance.Single();
|
||||
foreach (var tag in new List<string>
|
||||
{
|
||||
PackageTag.preview.ToString(),
|
||||
PackageTag.verified.ToString(),
|
||||
"usertag" // Any other unsupported tag a user might use
|
||||
})
|
||||
{
|
||||
packageInfo.IsVerified = PackageTag.verified.ToString() == tag;
|
||||
packageInfo.Version = packageInfo.Version.Change(null, null, null, tag);
|
||||
var package = new Package(packageInfo.Name, new List<PackageInfo> {packageInfo});
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
details.SetPackage(package);
|
||||
|
||||
// Check for every UI-supported tags that visibility is correct
|
||||
Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.preview)) == packageInfo.IsPreview);
|
||||
Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.verified)) == packageInfo.IsVerified);
|
||||
Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.local)) == packageInfo.IsLocal);
|
||||
Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.inDevelopment)) == packageInfo.IsInDevelopment);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectLabel_UpToDate()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", true)});
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.UpToDate]);
|
||||
Assert.IsFalse(details.UpdateButton.enabledSelf);
|
||||
Assert.IsTrue(details.VersionPopup.enabledSelf);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectLabel_Install()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", false)});
|
||||
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All);
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Add]);
|
||||
Assert.IsTrue(details.UpdateButton.enabledSelf);
|
||||
Assert.IsTrue(details.VersionPopup.enabledSelf);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectLabel_UpdateTo()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, "name", "2.0.0", false)
|
||||
});
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Update]);
|
||||
Assert.IsTrue(details.UpdateButton.enabledSelf);
|
||||
Assert.IsTrue(details.VersionPopup.enabledSelf);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_HideLabel_Embedded()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo>
|
||||
{
|
||||
PackageSets.Instance.Single(PackageSource.Embedded, "name", "1.0.0", true),
|
||||
PackageSets.Instance.Single(PackageSource.Registry, "name", "2.0.0", false)
|
||||
});
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsFalse(details.UpdateBuiltIn.visible);
|
||||
Assert.IsFalse(details.UpdateCombo.visible);
|
||||
Assert.IsFalse(details.UpdateButton.visible);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectLabel_LocalFolder()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Local, "name", "1.0.0")});
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.UpToDate]);
|
||||
Assert.IsFalse(details.UpdateButton.enabledSelf);
|
||||
Assert.IsTrue(details.VersionPopup.enabledSelf);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Show_CorrectLabel_Git()
|
||||
{
|
||||
SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Git, "name", "1.0.0")});
|
||||
|
||||
var details = Container.Q<PackageDetails>("detailsGroup");
|
||||
Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Git]);
|
||||
Assert.IsFalse(details.UpdateButton.enabledSelf);
|
||||
Assert.IsFalse(details.VersionPopup.enabledSelf);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d028fbbad11524d13a069f495ddcf01c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+211
@@ -0,0 +1,211 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine.Experimental.UIElements;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace UnityEditor.PackageManager.UI.Tests
|
||||
{
|
||||
internal class PackageManagerWindowTests : UITests<PackageManagerWindow>
|
||||
{
|
||||
// Filter change shows correct result
|
||||
private Action<IEnumerable<Package>> onPackageChangedEvent; // TODO: We need to have a discussion on event de-registration
|
||||
private bool showPreviewPackagesPreviousValue;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
showPreviewPackagesPreviousValue = PackageManagerPrefs.ShowPreviewPackages;
|
||||
PackageManagerPrefs.ShowPreviewPackages = true;
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local);
|
||||
SetListPackages(Enumerable.Empty<PackageInfo>());
|
||||
SetSearchPackages(Enumerable.Empty<PackageInfo>());
|
||||
Factory.ResetOperations();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
PackageCollection.Instance.OnPackagesChanged -= onPackageChangedEvent;
|
||||
PackageManagerPrefs.ShowPreviewPackages = showPreviewPackagesPreviousValue;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_Default_FirstPackageUIElement_HasSelectedClass()
|
||||
{
|
||||
onPackageChangedEvent = packages =>
|
||||
{
|
||||
var package = Container.Query(null, "package").First();
|
||||
|
||||
Assert.NotNull(package);
|
||||
Assert.IsTrue(package.ClassListContains(PackageItem.SelectedClassName));
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
|
||||
SetListPackages(PackageSets.Instance.Many(5, true));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_PackageCollection_Updates_PackageList_Updates()
|
||||
{
|
||||
var packages = PackageSets.Instance.Outdated();
|
||||
var current = packages.ToList().First();
|
||||
var latest = packages.ToList().Last();
|
||||
|
||||
SetListPackages(packages);
|
||||
Factory.AddOperation = new MockAddOperation(Factory, latest);
|
||||
|
||||
var package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
|
||||
onPackageChangedEvent = newpackages =>
|
||||
{
|
||||
package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
|
||||
Assert.IsTrue(package.Current.PackageId == latest.PackageId);
|
||||
|
||||
var packageItem = Container.Query(null, "package").Build().First();
|
||||
var label = packageItem.Q<Label>("packageName");
|
||||
var version = packageItem.Q<Label>("packageVersion");
|
||||
var state = packageItem.Q<Label>("packageState");
|
||||
var hasOutdatedClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Outdated));
|
||||
Assert.IsTrue(latest.Name == string.Format("com.unity.{0}", label.text));
|
||||
Assert.IsTrue(latest.Version == version.text);
|
||||
Assert.IsFalse(hasOutdatedClass);
|
||||
};
|
||||
|
||||
package.AddSignal.OnOperation += operation =>
|
||||
{
|
||||
operation.OnOperationSuccess += packageInfo =>
|
||||
{
|
||||
PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
|
||||
};
|
||||
};
|
||||
|
||||
package.Update();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_PackageCollection_Update_Fails_Package_Stay_Current()
|
||||
{
|
||||
var packages = PackageSets.Instance.Outdated();
|
||||
var current = packages.ToList().First();
|
||||
var latest = packages.ToList().Last();
|
||||
|
||||
SetListPackages(packages);
|
||||
|
||||
var error = MakeError(ErrorCode.Unknown, "Fake error");
|
||||
Factory.AddOperation = new MockAddOperation(Factory, latest);
|
||||
Factory.AddOperation.ForceError = error;
|
||||
|
||||
var package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
|
||||
package.AddSignal.OnOperation += operation =>
|
||||
{
|
||||
operation.OnOperationError += operationError => { Assert.IsTrue(error == operationError); };
|
||||
operation.OnOperationFinalized += () =>
|
||||
{
|
||||
Assert.IsTrue(package.Current.PackageId ==
|
||||
current.PackageId); // Make sure package hasn't been upgraded
|
||||
|
||||
var packageItem = Container.Query(null, "package").Build().First();
|
||||
var label = packageItem.Q<Label>("packageName");
|
||||
var version = packageItem.Q<Label>("packageVersion");
|
||||
var state = packageItem.Q<Label>("packageState");
|
||||
var hasErrorClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Error));
|
||||
Assert.IsTrue(current.Name == string.Format("com.unity.{0}", label.text));
|
||||
Assert.IsTrue(current.Version == version.text);
|
||||
Assert.IsTrue(hasErrorClass);
|
||||
};
|
||||
};
|
||||
|
||||
package.Update();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_PackageCollection_Remove_PackageLists_Updated()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(5);
|
||||
var current = packages.ToList().First();
|
||||
|
||||
SetListPackages(packages);
|
||||
var package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
Assert.IsNotNull(package);
|
||||
|
||||
onPackageChangedEvent = allPackages =>
|
||||
{
|
||||
package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
Assert.IsNull(package);
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
|
||||
|
||||
package.Remove();
|
||||
PackageCollection.Instance.FetchListOfflineCache(true);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_PackageCollection_Remove_Fails_PackageLists_NotUpdated()
|
||||
{
|
||||
var packages = PackageSets.Instance.Many(5);
|
||||
var current = packages.ToList().First();
|
||||
|
||||
var error = MakeError(ErrorCode.Unknown, "Fake error");
|
||||
Factory.RemoveOperation = new MockRemoveOperation(Factory) {ForceError = error};
|
||||
SetListPackages(packages);
|
||||
var package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
Assert.IsNotNull(package);
|
||||
|
||||
package.RemoveSignal.OnOperation += operation =>
|
||||
{
|
||||
operation.OnOperationError += operationError => { Assert.AreEqual(error, operationError); };
|
||||
operation.OnOperationFinalized += () =>
|
||||
{
|
||||
package = PackageCollection.Instance.GetPackageByName(current.Name);
|
||||
Assert.IsNotNull(package);
|
||||
};
|
||||
};
|
||||
|
||||
package.Remove();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void When_Filter_Changes_Shows_Correct_List()
|
||||
{
|
||||
var packagesLocal = PackageSets.Instance.Many(2);
|
||||
var packagesAll = PackageSets.Instance.Many(5);
|
||||
|
||||
SetListPackages(packagesLocal);
|
||||
SetSearchPackages(packagesAll);
|
||||
|
||||
onPackageChangedEvent = packages =>
|
||||
{
|
||||
foreach (var package in packagesAll)
|
||||
{
|
||||
Assert.IsTrue(packages.Any(updatePackage => updatePackage.Current == package));
|
||||
}
|
||||
};
|
||||
|
||||
PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
|
||||
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ListPackages_UsesCache()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.Local); // Set filter to use list
|
||||
SetListPackages(PackageSets.Instance.Many(2));
|
||||
|
||||
Assert.IsTrue(PackageCollection.Instance.LatestListPackages.Any()); // Make sure packages are cached
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SearchPackages_UsesCache()
|
||||
{
|
||||
PackageCollection.Instance.SetFilter(PackageFilter.All); // Set filter to use search
|
||||
SetSearchPackages(PackageSets.Instance.Many(2));
|
||||
|
||||
Assert.IsTrue(PackageCollection.Instance.LatestSearchPackages.Any()); // Make sure packages are cached
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 063b1587caa4a47f396741f4e69d108c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Unity.PackageManagerUI.EditorTests",
|
||||
"references": [
|
||||
"Unity.PackageManagerUI.Editor"
|
||||
],
|
||||
"optionalUnityReferences": [
|
||||
"TestAssemblies"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": []
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5afb9687033af4bca957216add3fe854
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user