You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

281 lines
10 KiB

  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)
  59. {
  60. var type = Random.NextDouble() > 0.5 ? PackageSource.Unknown : PackageSource.Registry;
  61. return Single(type, name, version);
  62. }
  63. public PackageInfo Single(PackageSource type, string name = null, string version = null, bool isCurrent = true, bool isVerified = false)
  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 package = new PackageInfo
  75. {
  76. DisplayName = char.ToUpper(name[0]) + name.Substring(1),
  77. Name = string.Format("com.unity.{0}", name),
  78. Description = LoremIpsum(Random.Next(3,5), 2, 10, 5, 20),
  79. PackageId = string.Format("com.unity.{0}@{1}", name, version),
  80. State = PackageState.UpToDate,
  81. Group = group,
  82. Version = version,
  83. IsVerified = isVerified,
  84. IsCurrent = isCurrent,
  85. IsLatest = false,
  86. Origin = type,
  87. Category = null,
  88. Errors = new List<Error>()
  89. };
  90. _count++;
  91. return package;
  92. }
  93. public List<PackageInfo> Many(int count, bool onlyPackageGroup = false)
  94. {
  95. return Many(null, count, onlyPackageGroup);
  96. }
  97. public List<PackageInfo> Many(string name, int count, bool onlyPackageGroup = false)
  98. {
  99. var packages = new List<PackageInfo>();
  100. for (var i = 0; i < count; i++)
  101. {
  102. var package = Single(name);
  103. packages.Add(package);
  104. }
  105. // At least one is set to a module and one to a package
  106. if (packages.Count > 1)
  107. {
  108. packages[0].Group = PackageGroupOrigins.Packages.ToString();
  109. packages[1].Group = PackageGroupOrigins.BuiltInPackages.ToString();
  110. }
  111. if (onlyPackageGroup)
  112. packages.SetGroup(PackageGroupOrigins.Packages.ToString());
  113. if (name != null)
  114. {
  115. packages.SetCurrent(false);
  116. packages.SetLatest(false);
  117. if (count > 1)
  118. {
  119. packages.First().IsCurrent = true;
  120. packages.First().IsLatest = false;
  121. packages.Last().IsCurrent = false;
  122. packages.Last().IsLatest = true;
  123. }
  124. else
  125. {
  126. packages.First().IsCurrent = true;
  127. packages.First().IsLatest = true;
  128. }
  129. }
  130. return packages.OrderBy(p => p.DisplayName).ToList();
  131. }
  132. public List<PackageInfo> TestData()
  133. {
  134. var packages = Many(5);
  135. packages[0].State = PackageState.UpToDate;
  136. packages[1].State = PackageState.Outdated;
  137. packages[2].State = PackageState.InProgress;
  138. packages[3].State = PackageState.Error;
  139. return packages;
  140. }
  141. // Package that actually exist. Useful when using test package that will be added to manifest
  142. public List<PackageInfo> RealPackages()
  143. {
  144. var packages = new List<PackageInfo>();
  145. // Don't add this package if it exists
  146. if (PackageCollection.Instance.GetPackageByName("a") == null)
  147. {
  148. var package = new PackageInfo
  149. {
  150. DisplayName = "A",
  151. Name = "a",
  152. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  153. PackageId = "[email protected]",
  154. State = PackageState.UpToDate,
  155. Version = "1.0.1",
  156. Group = PackageGroupOrigins.Packages.ToString(),
  157. IsCurrent = true,
  158. IsLatest = true,
  159. Errors = new List<Error>()
  160. };
  161. packages.Add(package);
  162. }
  163. if (PackageCollection.Instance.GetPackageByName("b") == null)
  164. {
  165. var package = new PackageInfo
  166. {
  167. DisplayName = "B",
  168. Name = "b",
  169. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  170. PackageId = "[email protected]",
  171. State = PackageState.UpToDate,
  172. Version = "1.0.1",
  173. Group = PackageGroupOrigins.Packages.ToString(),
  174. IsCurrent = true,
  175. IsLatest = true,
  176. Errors = new List<Error>()
  177. };
  178. packages.Add(package);
  179. }
  180. if (PackageCollection.Instance.GetPackageByName("c") == null)
  181. {
  182. var package = new PackageInfo
  183. {
  184. DisplayName = "C",
  185. Name = "c",
  186. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  187. PackageId = "[email protected]",
  188. State = PackageState.UpToDate,
  189. Version = "1.0.1",
  190. Group = PackageGroupOrigins.Packages.ToString(),
  191. IsCurrent = true,
  192. IsLatest = true,
  193. Errors = new List<Error>()
  194. };
  195. packages.Add(package);
  196. }
  197. if (PackageCollection.Instance.GetPackageByName("d") == null)
  198. {
  199. var package = new PackageInfo
  200. {
  201. DisplayName = "NonExistingVersion(d)",
  202. Name = "d",
  203. Description = "Non existing package", //LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  204. PackageId = "[email protected]",
  205. State = PackageState.UpToDate,
  206. Version = "4.0.0",
  207. Group = PackageGroupOrigins.Packages.ToString(),
  208. IsCurrent = true,
  209. IsLatest = true,
  210. Errors = new List<Error>()
  211. };
  212. packages.Add(package);
  213. }
  214. if (PackageCollection.Instance.GetPackageByName("nonexistingpackage") == null)
  215. {
  216. var package = new PackageInfo
  217. {
  218. DisplayName = "NonExistingPackage",
  219. Name = "nonexistingpackage",
  220. Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
  221. PackageId = "[email protected]",
  222. State = PackageState.UpToDate,
  223. Version = "0.0.1",
  224. Group = PackageGroupOrigins.Packages.ToString(),
  225. IsCurrent = true,
  226. IsLatest = true,
  227. Errors = new List<Error>()
  228. };
  229. packages.Add(package);
  230. }
  231. return packages;
  232. }
  233. public List<PackageInfo> Outdated()
  234. {
  235. const string name = "TestOutdated";
  236. var packageA = Single(PackageSource.Registry, name, "1.0.1");
  237. var packageB = Single(PackageSource.Registry, name, "1.0.2");
  238. packageA.State = PackageState.Outdated;
  239. packageB.IsCurrent = true;
  240. packageB.IsLatest = false;
  241. packageB.State = PackageState.UpToDate;
  242. packageB.IsCurrent = false;
  243. packageB.IsLatest = true;
  244. var packages = new List<PackageInfo> {packageA, packageB};
  245. return packages;
  246. }
  247. }
  248. }