PackageSets.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. namespace UnityEditor.PackageManager.UI.Tests
  5. {
  6. internal class PackageSets
  7. {
  8. private static readonly PackageSets _instance = new PackageSets();
  9. public static PackageSets Instance { get { return _instance; } }
  10. private static readonly System.Random Random = new System.Random(1);
  11. private static string RandomString(int length)
  12. {
  13. const string chars = "abcdefghijklmnopqrstuvwxyz";
  14. return new string(Enumerable.Repeat(chars, length)
  15. .Select(s => s[Random.Next(s.Length)]).ToArray());
  16. }
  17. private static readonly string[] Words = new[] { "lorem", "ipsum", "dolor", "sit", "amet", "consectetuer",
  18. "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod",
  19. "tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat" };
  20. private static string LoremIpsum(int numParagraphs, int minSentences, int maxSentences, int minWords, int maxWords)
  21. {
  22. var result = new StringBuilder();
  23. for (var p = 0; p < numParagraphs; p++)
  24. {
  25. var numSentences = Random.Next(maxSentences - minSentences) + minSentences + 1;
  26. for (var s = 0; s < numSentences; s++)
  27. {
  28. var numWords = Random.Next(maxWords - minWords) + minWords + 1;
  29. for (var w = 0; w < numWords; w++)
  30. {
  31. if (p == 0 && s == 0 && w == 0)
  32. {
  33. result.Append("Lorem ipsum dolor sit");
  34. }
  35. else
  36. {
  37. if (w == 0)
  38. {
  39. var firstWord = Words[Random.Next(Words.Length)];
  40. firstWord = char.ToUpper(firstWord[0]) + firstWord.Substring(1);
  41. result.Append(firstWord);
  42. }
  43. else
  44. {
  45. result.Append(" ");
  46. result.Append(Words[Random.Next(Words.Length)]);
  47. }
  48. }
  49. }
  50. result.Append(". ");
  51. }
  52. result.Append(System.Environment.NewLine);
  53. result.Append(System.Environment.NewLine);
  54. }
  55. return result.ToString();
  56. }
  57. private int _count = 0;
  58. public PackageInfo Single(string name = null, string version = null, bool useUnityPackageName = true)
  59. {
  60. var type = Random.NextDouble() > 0.5 ? PackageSource.Unknown : PackageSource.Registry;
  61. return Single(type, name, version, true, false, useUnityPackageName);
  62. }
  63. public PackageInfo Single(PackageSource type, string name = null, string version = null, bool isCurrent = true, bool isVerified = false, bool useUnityPackageName = true)
  64. {
  65. if (name == null)
  66. name = RandomString(Random.Next(5, 10));
  67. if (version == null)
  68. {
  69. version = string.Format("1.0.{0}", _count);
  70. if (Random.NextDouble() > 0.5)
  71. version += "-preview";
  72. }
  73. var group = UpmBaseOperation.GroupName(type);
  74. var packageName = useUnityPackageName ? string.Format("com.unity.{0}", name) : string.Format("com.other.{0}", name);
  75. var package = new PackageInfo
  76. {
  77. DisplayName = char.ToUpper(name[0]) + name.Substring(1),
  78. Name = packageName,
  79. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  80. PackageId = string.Format("{0}@{1}", packageName, version),
  81. State = PackageState.UpToDate,
  82. Group = group,
  83. Version = version,
  84. IsVerified = isVerified,
  85. IsCurrent = isCurrent,
  86. IsLatest = false,
  87. IsUnityPackage = useUnityPackageName,
  88. Origin = type,
  89. Category = null,
  90. Errors = new List<Error>()
  91. };
  92. _count++;
  93. return package;
  94. }
  95. public List<PackageInfo> Many(int count, bool onlyPackageGroup = false, bool useUnityPackageName = true)
  96. {
  97. return Many(null, count, onlyPackageGroup, useUnityPackageName);
  98. }
  99. public List<PackageInfo> Many(string name, int count, bool onlyPackageGroup = false, bool useUnityPackageName = true)
  100. {
  101. var packages = new List<PackageInfo>();
  102. for (var i = 0; i < count; i++)
  103. {
  104. var package = Single(name, null, useUnityPackageName);
  105. packages.Add(package);
  106. }
  107. // At least one is set to a module and one to a package
  108. if (packages.Count > 1)
  109. {
  110. packages[0].Group = PackageGroupOrigins.Packages.ToString();
  111. packages[1].Group = PackageGroupOrigins.BuiltInPackages.ToString();
  112. }
  113. if (onlyPackageGroup)
  114. packages.SetGroup(PackageGroupOrigins.Packages.ToString());
  115. if (name != null)
  116. {
  117. packages.SetCurrent(false);
  118. packages.SetLatest(false);
  119. if (count > 1)
  120. {
  121. packages.First().IsCurrent = true;
  122. packages.First().IsLatest = false;
  123. packages.Last().IsCurrent = false;
  124. packages.Last().IsLatest = true;
  125. }
  126. else
  127. {
  128. packages.First().IsCurrent = true;
  129. packages.First().IsLatest = true;
  130. }
  131. }
  132. return packages.OrderBy(p => p.DisplayName).ToList();
  133. }
  134. public List<PackageInfo> TestData()
  135. {
  136. var packages = Many(5);
  137. packages[0].State = PackageState.UpToDate;
  138. packages[1].State = PackageState.Outdated;
  139. packages[2].State = PackageState.InProgress;
  140. packages[3].State = PackageState.Error;
  141. return packages;
  142. }
  143. // Package that actually exist. Useful when using test package that will be added to manifest
  144. public List<PackageInfo> RealPackages()
  145. {
  146. var packages = new List<PackageInfo>();
  147. // Don't add this package if it exists
  148. if (PackageCollection.Instance.GetPackageByName("a") == null)
  149. {
  150. var package = new PackageInfo
  151. {
  152. DisplayName = "A",
  153. Name = "a",
  154. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  155. PackageId = "a@1.0.1",
  156. State = PackageState.UpToDate,
  157. Version = "1.0.1",
  158. Group = PackageGroupOrigins.Packages.ToString(),
  159. IsCurrent = true,
  160. IsLatest = true,
  161. IsUnityPackage = true,
  162. Errors = new List<Error>()
  163. };
  164. packages.Add(package);
  165. }
  166. if (PackageCollection.Instance.GetPackageByName("b") == null)
  167. {
  168. var package = new PackageInfo
  169. {
  170. DisplayName = "B",
  171. Name = "b",
  172. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  173. PackageId = "b@1.0.1",
  174. State = PackageState.UpToDate,
  175. Version = "1.0.1",
  176. Group = PackageGroupOrigins.Packages.ToString(),
  177. IsCurrent = true,
  178. IsLatest = true,
  179. IsUnityPackage = true,
  180. Errors = new List<Error>()
  181. };
  182. packages.Add(package);
  183. }
  184. if (PackageCollection.Instance.GetPackageByName("c") == null)
  185. {
  186. var package = new PackageInfo
  187. {
  188. DisplayName = "C",
  189. Name = "c",
  190. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  191. PackageId = "c@1.0.1",
  192. State = PackageState.UpToDate,
  193. Version = "1.0.1",
  194. Group = PackageGroupOrigins.Packages.ToString(),
  195. IsCurrent = true,
  196. IsLatest = true,
  197. IsUnityPackage = true,
  198. Errors = new List<Error>()
  199. };
  200. packages.Add(package);
  201. }
  202. if (PackageCollection.Instance.GetPackageByName("d") == null)
  203. {
  204. var package = new PackageInfo
  205. {
  206. DisplayName = "NonExistingVersion(d)",
  207. Name = "d",
  208. Description = "Non existing package", //LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  209. PackageId = "d@4.0.0",
  210. State = PackageState.UpToDate,
  211. Version = "4.0.0",
  212. Group = PackageGroupOrigins.Packages.ToString(),
  213. IsCurrent = true,
  214. IsLatest = true,
  215. IsUnityPackage = true,
  216. Errors = new List<Error>()
  217. };
  218. packages.Add(package);
  219. }
  220. if (PackageCollection.Instance.GetPackageByName("nonexistingpackage") == null)
  221. {
  222. var package = new PackageInfo
  223. {
  224. DisplayName = "NonExistingPackage",
  225. Name = "nonexistingpackage",
  226. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  227. PackageId = "nonexistingpackage@0.0.1",
  228. State = PackageState.UpToDate,
  229. Version = "0.0.1",
  230. Group = PackageGroupOrigins.Packages.ToString(),
  231. IsCurrent = true,
  232. IsLatest = true,
  233. IsUnityPackage = true,
  234. Errors = new List<Error>()
  235. };
  236. packages.Add(package);
  237. }
  238. return packages;
  239. }
  240. public List<PackageInfo> Outdated()
  241. {
  242. const string name = "TestOutdated";
  243. var packageA = Single(PackageSource.Registry, name, "1.0.1");
  244. var packageB = Single(PackageSource.Registry, name, "1.0.2");
  245. packageA.State = PackageState.Outdated;
  246. packageB.IsCurrent = true;
  247. packageB.IsLatest = false;
  248. packageB.State = PackageState.UpToDate;
  249. packageB.IsCurrent = false;
  250. packageB.IsLatest = true;
  251. var packages = new List<PackageInfo> {packageA, packageB};
  252. return packages;
  253. }
  254. }
  255. }