mirror of
https://github.com/imperialsushi/gutterball-3.git
synced 2025-06-15 05:07:42 +00:00
New Version 1.42
Moving cam replay. Fixed the bugs. New Version 1.42 Moving cam replay. Fixed the bugs. New Version 1.42 Moving cam replay, Fixed the bugs.
This commit is contained in:
parent
dcb7df5fd1
commit
1c033119df
7079 changed files with 186851 additions and 48991 deletions
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bac185a28e198c1419b649ca946942ea
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,3 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Unity.PackageManagerCaptain.Editor")]
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5941c79cb78c34a0d9c677ece9784f15
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 87738e82a4f047cc947cff8a2ccea594
|
||||
timeCreated: 1507838883
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a5edd19845e0e426eb775477a7988a4a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 76078ddafb924ce19edc6034201cb15b
|
||||
timeCreated: 1507838870
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 005c4d80949154e5c87348bb9f5d15eb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f851ca8f9604f442aafccf60a6713ce9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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 { };
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e426a33061f184a9785cd5d82f9fb486
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fea24dc53b50441a9b2a8f9473fede33
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4fc12201ddc4b4d45b9bdecdf7f00ea5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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 { };
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fd382b8abbd6145c29e32af0e2a26d88
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0a2c7bcbdfe0a438999cb0653789cdf4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 75938f72739584ed9925bf4ae8989079
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f68d88b9933cd4204925b22192bf15b4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 983d491088dbb4db8b83c926939a08c5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 01cd264c206ae482393dc9d04b26eca0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2f1d33abb004b44cb90ec83a2bfe872e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 448aaa781aea44811a5d66e3edac37e4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 78e267bad6d564d49803ba3e9c13ff2e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7b87dac66d6e74d5f848d26f169bbe89
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d028fbbad11524d13a069f495ddcf01c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 063b1587caa4a47f396741f4e69d108c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "Unity.PackageManagerUI.EditorTests",
|
||||
"references": [
|
||||
"Unity.PackageManagerUI.Editor"
|
||||
],
|
||||
"optionalUnityReferences": [
|
||||
"TestAssemblies"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": []
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5afb9687033af4bca957216add3fe854
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Add table
Add a link
Reference in a new issue