CommandLineArgumentsTests.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. using System.Collections.Generic;
  2. using NUnit.Framework;
  3. using Unity.PlasticSCM.Editor.ProjectDownloader;
  4. namespace Unity.PlasticSCM.Tests.Editor.ProjectDownloader
  5. {
  6. [TestFixture]
  7. public class CommandLineArgumentsTests
  8. {
  9. [Test]
  10. public void TestNullArguments()
  11. {
  12. string[] args = null;
  13. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  14. Assert.AreEqual(0, parsedArgs.Count);
  15. }
  16. [Test]
  17. public void TestEmptyArguments()
  18. {
  19. string[] args = new string[]{ };
  20. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  21. Assert.AreEqual(0, parsedArgs.Count);
  22. }
  23. [Test]
  24. public void TestProgramArgumentOnly()
  25. {
  26. string[] args = new string[]
  27. {
  28. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe"
  29. };
  30. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  31. Assert.AreEqual(0, parsedArgs.Count);
  32. }
  33. [Test]
  34. public void TestSingleArgument()
  35. {
  36. string useHub = "-useHub";
  37. string[] args = new string[]
  38. {
  39. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  40. useHub
  41. };
  42. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  43. Assert.AreEqual(1, parsedArgs.Count);
  44. Assert.IsTrue(parsedArgs.ContainsKey(useHub));
  45. Assert.IsNull(parsedArgs[useHub]);
  46. }
  47. [Test]
  48. public void TestKeyValueArgument()
  49. {
  50. string createProjectKey = "-createProject";
  51. string createProjectValue = @"c:\tmp\newproj";
  52. string[] args = new string[]
  53. {
  54. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  55. createProjectKey,
  56. createProjectValue };
  57. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  58. Assert.AreEqual(1, parsedArgs.Count);
  59. Assert.IsTrue(parsedArgs.ContainsKey(createProjectKey));
  60. Assert.AreEqual(createProjectValue, parsedArgs[createProjectKey]);
  61. }
  62. [Test]
  63. public void TestConsecutiveSingleArguments()
  64. {
  65. string useHub = "-useHub";
  66. string useIPC = "-useIPC";
  67. string[] args = new string[]
  68. {
  69. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  70. useHub,
  71. useIPC
  72. };
  73. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  74. Assert.AreEqual(2, parsedArgs.Count);
  75. Assert.IsTrue(parsedArgs.ContainsKey(useHub));
  76. Assert.IsNull(parsedArgs[useHub]);
  77. Assert.IsTrue(parsedArgs.ContainsKey(useIPC));
  78. Assert.IsNull(parsedArgs[useIPC]);
  79. }
  80. [Test]
  81. public void TestConsecutiveKeyValueArguments()
  82. {
  83. string createProjectKey = "-createProject";
  84. string createProjectValue = @"c:\tmp\newproj";
  85. string cloudEnvironmentKey = "-cloudEnvironment";
  86. string cloudEnvironmentValue = "production";
  87. string[] args = new string[] {
  88. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  89. createProjectKey,
  90. createProjectValue,
  91. cloudEnvironmentKey,
  92. cloudEnvironmentValue
  93. };
  94. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  95. Assert.AreEqual(2, parsedArgs.Count);
  96. Assert.IsTrue(parsedArgs.ContainsKey(createProjectKey));
  97. Assert.AreEqual(createProjectValue, parsedArgs[createProjectKey]);
  98. Assert.IsTrue(parsedArgs.ContainsKey(cloudEnvironmentKey));
  99. Assert.AreEqual(cloudEnvironmentValue, parsedArgs[cloudEnvironmentKey]);
  100. }
  101. [Test]
  102. public void TestArgumentsAreTrimmed()
  103. {
  104. string useHub = " -useHub ";
  105. string useHubTrimmed = "-useHub";
  106. string[] args = new string[] {
  107. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  108. useHub
  109. };
  110. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  111. Assert.AreEqual(1, parsedArgs.Count);
  112. Assert.IsTrue(parsedArgs.ContainsKey(useHubTrimmed));
  113. Assert.IsNull(parsedArgs[useHubTrimmed]);
  114. }
  115. [Test]
  116. public void TestDuplicatedArguments()
  117. {
  118. // we found cases (sign out/sign in/close unity/open project from the hub)
  119. // in which the hub passes duplicated arguments
  120. string projectPathKey = "-projectPath";
  121. string projectPathValue = @"c:\tmp\newproj";
  122. string[] args = new string[] {
  123. @"C:\Program Files\Unity\Hub\Editor\Unity 2020.2.1f1\Editor\unity.exe",
  124. projectPathKey,
  125. projectPathValue,
  126. projectPathKey,
  127. projectPathValue
  128. };
  129. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  130. Assert.AreEqual(1, parsedArgs.Count);
  131. Assert.IsTrue(parsedArgs.ContainsKey(projectPathKey));
  132. Assert.AreEqual(projectPathValue, parsedArgs[projectPathKey]);
  133. }
  134. [Test]
  135. public void TestRealExample()
  136. {
  137. string createProjectKey = "-createProject";
  138. string createProjectValue = @"c:\tmp\newproj";
  139. string useHub = "-useHub";
  140. string useIPC = "-useIPC";
  141. string cloudEnvironmentKey = "-cloudEnvironment";
  142. string cloudEnvironmentValue = "production";
  143. string cloudProjectKey = "-cloudProject";
  144. string cloudProjectValue = "fpsmicrogame";
  145. string cloudOrganizationKey = "- cloudOrganization";
  146. string cloudOrganizationValue = "D51E18A1-CA04-4E7C-A649-6FD2829E3223-danipen-unity";
  147. string accessTokenKey = "-accessToken";
  148. string accessTokenValue = "5k-CzPsncn9bGLI_uSZ91EhJW44Dcj1ShQPtKjCp2rA005f";
  149. string[] args = new string[] {
  150. @"C:\Program Files\Unity\Hub\Editor\2018.4.25f1\Editor\unity.exe",
  151. createProjectKey,
  152. createProjectValue,
  153. useHub,
  154. useIPC,
  155. cloudEnvironmentKey,
  156. cloudEnvironmentValue,
  157. cloudProjectKey,
  158. cloudProjectValue,
  159. cloudOrganizationKey,
  160. cloudOrganizationValue,
  161. accessTokenKey,
  162. accessTokenValue
  163. };
  164. Dictionary<string, string> parsedArgs = CommandLineArguments.Build(args);
  165. Assert.AreEqual(7, parsedArgs.Count);
  166. Assert.IsTrue(parsedArgs.ContainsKey(createProjectKey));
  167. Assert.AreEqual(createProjectValue, parsedArgs[createProjectKey]);
  168. Assert.IsTrue(parsedArgs.ContainsKey(useHub));
  169. Assert.IsNull(parsedArgs[useHub]);
  170. Assert.IsTrue(parsedArgs.ContainsKey(useIPC));
  171. Assert.IsNull(parsedArgs[useIPC]);
  172. Assert.IsTrue(parsedArgs.ContainsKey(cloudEnvironmentKey));
  173. Assert.AreEqual(cloudEnvironmentValue, parsedArgs[cloudEnvironmentKey]);
  174. Assert.IsTrue(parsedArgs.ContainsKey(cloudProjectKey));
  175. Assert.AreEqual(cloudProjectValue, parsedArgs[cloudProjectKey]);
  176. Assert.IsTrue(parsedArgs.ContainsKey(cloudOrganizationKey));
  177. Assert.AreEqual(cloudOrganizationValue, parsedArgs[cloudOrganizationKey]);
  178. Assert.IsTrue(parsedArgs.ContainsKey(accessTokenKey));
  179. Assert.AreEqual(accessTokenValue, parsedArgs[accessTokenKey]);
  180. }
  181. }
  182. }