UITest.cs 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using TestStack.White;
  6. using TestStack.White.UIItems;
  7. using TestStack.White.UIItems.WindowItems;
  8. using TestStack.White.UIItems.Finders;
  9. using System.Threading;
  10. using SketchAssistantWPF;
  11. using System.Windows;
  12. using System.Diagnostics;
  13. using TestStack.White.UIItems.WindowStripControls;
  14. using TestStack.White.UIItems.MenuItems;
  15. using System.Collections.Generic;
  16. using System.Text.RegularExpressions;
  17. using WindowsInput;
  18. using WindowsInput.Native;
  19. using System.Threading.Tasks;
  20. using System.Linq;
  21. namespace WhiteTests
  22. {
  23. [TestClass]
  24. public class UITest
  25. {
  26. private TestStack.White.Application application;
  27. /// <summary>
  28. /// The directory of the input files, saved for repeated use
  29. /// </summary>
  30. private String input_file_dir = null;
  31. /// <summary>
  32. /// instance of TestContext to be able to access deployed files
  33. /// </summary>
  34. private TestContext testContextInstance;
  35. /// <summary>
  36. ///Gets or sets the test context which provides
  37. ///information about and functionality for the current test run.
  38. ///</summary>
  39. public TestContext TestContext
  40. {
  41. get
  42. {
  43. return testContextInstance;
  44. }
  45. set
  46. {
  47. testContextInstance = value;
  48. }
  49. }
  50. /// <summary>
  51. /// A function that returns the path to the test_input_files folder.
  52. /// Do with it what you want.
  53. /// </summary>
  54. /// <returns>the path to the test_input_files folder</returns>
  55. public String getSketchAssistantDirectory()
  56. {
  57. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  58. Match match = rx.Match(TestContext.DeploymentDirectory);
  59. String SketchAssistDir = match.Groups[1].Value;
  60. if (input_file_dir == null)
  61. {
  62. if (Directory.Exists(SketchAssistDir + @"WhiteTests\test_input_files\"))
  63. {
  64. input_file_dir = SketchAssistDir + @"WhiteTests\test_input_files\";
  65. }
  66. else if (Directory.Exists(SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\"))
  67. {
  68. input_file_dir = SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\";
  69. }
  70. else
  71. {
  72. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  73. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  74. String ProjectsDir = match_0.Groups[1].Value;
  75. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  76. input_file_dir = dirs[0];
  77. }
  78. }
  79. return input_file_dir;
  80. }
  81. public Window setupapp()
  82. {
  83. string outputDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  84. string editedDir = outputDir.Replace("WhiteTests", "SketchAssistantWPF");
  85. string app_path = editedDir + @"\SketchAssistantWPF.exe";
  86. ProcessStartInfo processStart = new ProcessStartInfo(app_path, "-debug");
  87. application = Application.Launch(processStart);
  88. return application.GetWindow("Sketch Assistant");
  89. }
  90. [TestMethod]
  91. [TestCategory("bla")]
  92. public void CreateCanvasTest()
  93. {
  94. Window mainWindow = setupapp();
  95. Thread.Sleep(20);
  96. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  97. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  98. Thread.Sleep(20);
  99. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  100. mainWindow.Close();
  101. }
  102. [TestMethod]
  103. [TestCategory("bla")]
  104. public void DrawLineTest()
  105. {
  106. Window mainWindow = setupapp();
  107. Thread.Sleep(20);
  108. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  109. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  110. Thread.Sleep(20);
  111. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  112. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  113. Thread.Sleep(20);
  114. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  115. Thread.Sleep(20);
  116. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  117. Thread.Sleep(7000);
  118. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  119. mainWindow.Close();
  120. }
  121. [TestMethod]
  122. public void DeleteLineTest()
  123. {
  124. Window mainWindow = setupapp();
  125. Thread.Sleep(20);
  126. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  127. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  128. Thread.Sleep(20);
  129. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  130. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DrawButton")).Click();
  131. Thread.Sleep(20);
  132. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  133. Thread.Sleep(20);
  134. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  135. Thread.Sleep(20);
  136. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  137. Thread.Sleep(7000);
  138. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  139. Thread.Sleep(20);
  140. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  141. Thread.Sleep(20);
  142. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  143. Thread.Sleep(20);
  144. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  145. Thread.Sleep(20);
  146. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  147. Thread.Sleep(7000);
  148. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  149. mainWindow.Close();
  150. }
  151. [TestMethod]
  152. [TestCategory("bla")]
  153. public void UndoTest()
  154. {
  155. Window mainWindow = setupapp();
  156. Thread.Sleep(20);
  157. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  158. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  159. Thread.Sleep(20);
  160. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  161. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  162. Thread.Sleep(20);
  163. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  164. Thread.Sleep(20);
  165. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  166. Thread.Sleep(7000);
  167. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  168. Thread.Sleep(20);
  169. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  170. Thread.Sleep(20);
  171. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  172. mainWindow.Close();
  173. }
  174. [TestMethod]
  175. [TestCategory("bla")]
  176. public void RedoTest()
  177. {
  178. Window mainWindow = setupapp();
  179. Thread.Sleep(20);
  180. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  181. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  182. Thread.Sleep(20);
  183. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  184. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  185. Thread.Sleep(20);
  186. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  187. Thread.Sleep(20);
  188. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  189. Thread.Sleep(7000);
  190. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  191. Thread.Sleep(20);
  192. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  193. Thread.Sleep(20);
  194. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  195. Thread.Sleep(20);
  196. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  197. Thread.Sleep(20);
  198. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  199. mainWindow.Close();
  200. }
  201. [TestMethod]
  202. public void DrawSeveralLinesTest()
  203. {
  204. Window mainWindow = setupapp();
  205. Thread.Sleep(20);
  206. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  207. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  208. Thread.Sleep(20);
  209. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  210. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  211. Thread.Sleep(20);
  212. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  213. Thread.Sleep(20);
  214. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  215. Thread.Sleep(7000);
  216. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  217. Thread.Sleep(20);
  218. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  219. Thread.Sleep(20);
  220. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  221. Thread.Sleep(20);
  222. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  223. Thread.Sleep(30000);
  224. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  225. Thread.Sleep(20);
  226. mainWindow.Close();
  227. }
  228. [TestMethod]
  229. public void DeleteSeveralLinesTest()
  230. {
  231. Window mainWindow = setupapp();
  232. Thread.Sleep(20);
  233. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  234. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  235. Thread.Sleep(20);
  236. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  237. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  238. Thread.Sleep(20);
  239. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  240. Thread.Sleep(20);
  241. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  242. Thread.Sleep(7000);
  243. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  244. Thread.Sleep(20);
  245. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  246. Thread.Sleep(20);
  247. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  248. Thread.Sleep(20);
  249. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  250. Thread.Sleep(24000);
  251. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  252. Thread.Sleep(20);
  253. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  254. Thread.Sleep(20);
  255. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  256. Thread.Sleep(20);
  257. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  258. Thread.Sleep(20);
  259. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  260. Thread.Sleep(20);
  261. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  262. Thread.Sleep(10000);
  263. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  264. mainWindow.Close();
  265. }
  266. [TestMethod]
  267. public void UndoSeveralLinesTest()
  268. {
  269. Window mainWindow = setupapp();
  270. Thread.Sleep(20);
  271. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  272. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  273. Thread.Sleep(20);
  274. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  275. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  276. Thread.Sleep(20);
  277. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  278. Thread.Sleep(20);
  279. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  280. Thread.Sleep(7000);
  281. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  282. Thread.Sleep(20);
  283. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  284. Thread.Sleep(20);
  285. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  286. Thread.Sleep(20);
  287. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  288. Thread.Sleep(30000);
  289. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  290. Thread.Sleep(20);
  291. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  292. Thread.Sleep(20);
  293. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  294. Thread.Sleep(20);
  295. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  296. Thread.Sleep(20);
  297. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  298. Thread.Sleep(20);
  299. mainWindow.Close();
  300. }
  301. [TestMethod]
  302. public void RedoSeveralLinesTest()
  303. {
  304. Window mainWindow = setupapp();
  305. Thread.Sleep(20);
  306. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  307. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  308. Thread.Sleep(20);
  309. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  310. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  311. Thread.Sleep(20);
  312. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  313. Thread.Sleep(20);
  314. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  315. Thread.Sleep(7000);
  316. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  317. Thread.Sleep(20);
  318. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  319. Thread.Sleep(20);
  320. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  321. Thread.Sleep(20);
  322. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  323. Thread.Sleep(24000);
  324. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  325. Thread.Sleep(20);
  326. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  327. Thread.Sleep(20);
  328. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  329. Thread.Sleep(20);
  330. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  331. Thread.Sleep(20);
  332. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  333. Thread.Sleep(20);
  334. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  335. Thread.Sleep(20);
  336. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  337. Thread.Sleep(20);
  338. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  339. Thread.Sleep(20);
  340. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  341. Thread.Sleep(20);
  342. mainWindow.Close();
  343. }
  344. [TestMethod]
  345. public void UndoAndRedoTest()
  346. {
  347. Window mainWindow = setupapp();
  348. Thread.Sleep(20);
  349. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  350. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  351. Thread.Sleep(20);
  352. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  353. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  354. Thread.Sleep(20);
  355. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  356. Thread.Sleep(20);
  357. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  358. Thread.Sleep(7000);
  359. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  360. Thread.Sleep(20);
  361. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  362. Thread.Sleep(20);
  363. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  364. Thread.Sleep(20);
  365. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  366. Thread.Sleep(24000);
  367. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  368. Thread.Sleep(20);
  369. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  370. Thread.Sleep(20);
  371. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  372. Thread.Sleep(20);
  373. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  374. Thread.Sleep(20);
  375. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  376. Thread.Sleep(20);
  377. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  378. Thread.Sleep(20);
  379. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  380. Thread.Sleep(20);
  381. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  382. Thread.Sleep(20);
  383. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  384. Thread.Sleep(20);
  385. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  386. Thread.Sleep(20);
  387. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  388. Thread.Sleep(20);
  389. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  390. Thread.Sleep(20);
  391. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  392. Thread.Sleep(7000);
  393. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  394. Thread.Sleep(20);
  395. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  396. Thread.Sleep(20);
  397. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  398. Thread.Sleep(20);
  399. mainWindow.Close();
  400. }
  401. [TestMethod]
  402. public void UndoAndDrawTest()
  403. {
  404. Window mainWindow = setupapp();
  405. Thread.Sleep(20);
  406. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  407. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  408. Thread.Sleep(20);
  409. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  410. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  411. Thread.Sleep(20);
  412. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  413. Thread.Sleep(20);
  414. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  415. Thread.Sleep(2000);
  416. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  417. Thread.Sleep(20);
  418. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  419. Thread.Sleep(20);
  420. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  421. Thread.Sleep(20);
  422. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  423. Thread.Sleep(20);
  424. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  425. Thread.Sleep(20);
  426. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  427. Thread.Sleep(2000);
  428. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  429. Thread.Sleep(20);
  430. mainWindow.Close();
  431. }
  432. [TestMethod]
  433. public void PointDrawTest()
  434. {
  435. Window mainWindow = setupapp();
  436. Thread.Sleep(20);
  437. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  438. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  439. Thread.Sleep(20);
  440. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  441. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  442. Thread.Sleep(20);
  443. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  444. Thread.Sleep(20);
  445. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  446. Thread.Sleep(4000);
  447. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  448. Thread.Sleep(20);
  449. mainWindow.Close();
  450. }
  451. [TestMethod]
  452. public void NewCanvasAfterDrawTest()
  453. {
  454. Window mainWindow = setupapp();
  455. Thread.Sleep(20);
  456. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  457. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  458. Thread.Sleep(20);
  459. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  460. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  461. Thread.Sleep(20);
  462. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  463. Thread.Sleep(20);
  464. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  465. Thread.Sleep(4000);
  466. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  467. Thread.Sleep(20);
  468. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  469. Thread.Sleep(20);
  470. // Click on No button in warning
  471. Window messageBox0 = mainWindow.MessageBox("Warning");
  472. messageBox0.Get<Button>(SearchCriteria.ByText("No")).Click();
  473. Thread.Sleep(20);
  474. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  475. Thread.Sleep(20);
  476. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  477. Thread.Sleep(20);
  478. // close warning
  479. Window messageBox1 = mainWindow.MessageBox("Warning");
  480. messageBox1.Close();
  481. Thread.Sleep(20);
  482. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  483. Thread.Sleep(20);
  484. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  485. Thread.Sleep(20);
  486. // click yes button on warning
  487. Window messageBox2 = mainWindow.MessageBox("Warning");
  488. messageBox2.Get<Button>(SearchCriteria.ByText("Yes")).Click();
  489. Thread.Sleep(20);
  490. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  491. Thread.Sleep(20);
  492. mainWindow.Close();
  493. }
  494. }
  495. [TestClass]
  496. public class FileImporterTests
  497. {
  498. /// <summary>
  499. /// The directory of the input files, saved for repeated use
  500. /// </summary>
  501. private String input_file_dir = null;
  502. /// <summary>
  503. /// instance of TestContext to be able to access deployed files
  504. /// </summary>
  505. private TestContext testContextInstance;
  506. /// <summary>
  507. ///Gets or sets the test context which provides
  508. ///information about and functionality for the current test run.
  509. ///</summary>
  510. public TestContext TestContext
  511. {
  512. get
  513. {
  514. return testContextInstance;
  515. }
  516. set
  517. {
  518. testContextInstance = value;
  519. }
  520. }
  521. /// <summary>
  522. /// A function that returns the path to the test_input_files folder.
  523. /// Do with it what you want.
  524. /// </summary>
  525. /// <returns>the path to the test_input_files folder</returns>
  526. public String getSketchAssistantDirectory()
  527. {
  528. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  529. Match match = rx.Match(TestContext.DeploymentDirectory);
  530. String SketchAssistDir = match.Groups[1].Value;
  531. if (input_file_dir == null)
  532. {
  533. if (Directory.Exists(SketchAssistDir + @"\WhiteTests\test_input_files\"))
  534. {
  535. input_file_dir = SketchAssistDir + @"\WhiteTests\test_input_files\";
  536. }
  537. else if (Directory.Exists(SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\"))
  538. {
  539. input_file_dir = SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\";
  540. }
  541. else
  542. {
  543. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  544. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  545. String ProjectsDir = match_0.Groups[1].Value;
  546. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  547. input_file_dir = dirs[0];
  548. }
  549. }
  550. return input_file_dir;
  551. }
  552. /// <summary>
  553. /// creates a valid .isad file from the given sets of coordinates (number divisible by 3) by creating a line for every three consecutive points, parses the file and verifies that all lines and their points have been parsed correctly
  554. /// </summary>
  555. /// <param name="xCoordinates">an array containing the x coordinates of the points that will be created (length divisible by 3)</param>
  556. /// <param name="yCoordinates">an array containing the y coordinates of the points that will be created (length divisible by 3)</param>
  557. [DataTestMethod]
  558. [TestCategory("bla")]
  559. [DataRow(new int[] { 54, 43, 57, 11, 145, 34, 113, 299, 0 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  560. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  561. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 54, 43, 57, 11, 145, 34, 113, 199, 0 })]
  562. public void ParseISADInputSuccessfulTest(int[] xCoordinates, int[] yCoordinates)
  563. {
  564. FileImporter uut = new FileImporter();
  565. List<String> file = new List<string>();
  566. file.Add("drawing");
  567. file.Add("300x200");
  568. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  569. {
  570. file.Add("line");
  571. file.Add(xCoordinates[i] + ";" + yCoordinates[i]);
  572. file.Add(xCoordinates[i + 1] + ";" + yCoordinates[i + 1]);
  573. file.Add(xCoordinates[i + 2] + ";" + yCoordinates[i + 2]);
  574. file.Add("endline");
  575. }
  576. file.Add("enddrawing");
  577. Tuple<int, int, List<InternalLine>> values = uut.ParseISADInputForTesting(file.ToArray());
  578. Assert.AreEqual(xCoordinates.Length / 3, values.Item3.Count);
  579. InternalLine[] lines = values.Item3.ToArray();
  580. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  581. {
  582. Point[] currentLine = lines[i / 3].GetPoints().ToArray();
  583. Assert.AreEqual(3, currentLine.Length);
  584. for (int j = 0; j < 3; j++)
  585. {
  586. Assert.IsTrue(currentLine[j].X == xCoordinates[i + j] && currentLine[j].Y == yCoordinates[i + j]);
  587. }
  588. }
  589. }
  590. /// <summary>
  591. /// parses teh given invalid .isad files and verifies that a FileImporterException is thrown, but no other exception
  592. /// </summary>
  593. /// <param name="file">the input file represented as an array of lines</param>
  594. [DataTestMethod]
  595. [TestCategory("bla")]
  596. [DataRow(new String[] { })]
  597. [DataRow(new String[] { "begindrawing", "300x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  598. [DataRow(new String[] { "drawing", "300;300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  599. [DataRow(new String[] { "drawing", "30.5x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  600. [DataRow(new String[] { "drawing", "line", "50;50", "100;50", "endline", "enddrawing" })]
  601. [DataRow(new String[] { "drawing", "300x300", "beginline", "50;50", "100;50", "endline", "enddrawing" })]
  602. [DataRow(new String[] { "drawing", "300x300", "line", "500;50", "100;50", "endline", "enddrawing" })]
  603. [DataRow(new String[] { "drawing", "300x300", "line", "50x50", "100;50", "endline", "enddrawing" })]
  604. [DataRow(new String[] { "drawing", "300x300", "line", "50", "100", "endline", "enddrawing" })]
  605. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "line", "endline", "enddrawing" })]
  606. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "stopline", "enddrawing" })]
  607. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "enddrawing" })]
  608. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline", "endrawing" })]
  609. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline" })]
  610. public void ParseISADInputExceptionTest(String[] file)
  611. {
  612. bool correctExceptionThrown = false;
  613. FileImporter uut = new FileImporter();
  614. try
  615. {
  616. //try to initialize the left image with an invalid isad drawing
  617. Tuple<int, int, List<InternalLine>> values1 = uut.ParseISADInputForTesting(file);
  618. }
  619. catch (FileImporterException e)
  620. {
  621. //save the occurence of an exception
  622. correctExceptionThrown = true;
  623. System.Diagnostics.Debug.WriteLine(e.ToString());
  624. }
  625. catch (Exception)
  626. {
  627. //don't set success flag
  628. }
  629. //check that an exception has been thrown
  630. Assert.IsTrue(correctExceptionThrown);
  631. }
  632. /// <summary>
  633. /// parses all whitelisted files and ensures no exceptions are thrown (parsing abortion, e.g. due to corrupted input files, are realized by throwing a FileImporterException)
  634. /// </summary>
  635. [TestMethod]
  636. [TestCategory("bla")]
  637. public void ParseSVGInputNoErrorForWhitelistedFilesTest()
  638. {
  639. FileImporter uut = new FileImporter();
  640. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\whitelisted", "*.svg", SearchOption.AllDirectories);
  641. Assert.IsTrue(files.Length > 0);
  642. foreach (string s in files) //parse each of the whitelisted files
  643. {
  644. Console.WriteLine(s);
  645. bool noExceptionThrown = true;
  646. try
  647. {
  648. uut.ParseSVGInputFile(s, 10000, 10000);
  649. }
  650. catch (Exception)
  651. {
  652. noExceptionThrown = false;
  653. }
  654. Assert.IsTrue(noExceptionThrown);
  655. }
  656. }
  657. /// <summary>
  658. /// parses all blacklisted files and ensures an instance of FileIporterException is thrown for each file, but no other exceptions occur
  659. /// </summary>
  660. [TestMethod]
  661. [TestCategory("bla")]
  662. public void ParseSVGInputNoErrorForBlacklistedFilesTest()
  663. {
  664. FileImporter uut = new FileImporter();
  665. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\blacklisted", "*.svg", SearchOption.AllDirectories);
  666. Assert.IsTrue(files.Length > 0);
  667. foreach (string s in files) //parse each of the blacklisted files
  668. {
  669. bool correctExceptionThrown = false;
  670. try
  671. {
  672. uut.ParseSVGInputFile(s, 10000, 10000);
  673. }
  674. catch (FileImporterException e)
  675. {
  676. System.Diagnostics.Debug.WriteLine(e.ToString());
  677. correctExceptionThrown = true;
  678. }
  679. catch (Exception)
  680. {
  681. }
  682. Assert.IsTrue(correctExceptionThrown);
  683. }
  684. }
  685. }
  686. [TestClass]
  687. public class SimilarityCalculationTests
  688. {
  689. /// <summary>
  690. /// The debug data element used to generate random lines.
  691. /// </summary>
  692. private DebugData DebugData = new DebugData();
  693. /// <summary>
  694. /// Generates random lines and tests how similar they are.
  695. /// To test the similarity score always stays between 0 and 1.
  696. /// </summary>
  697. [TestMethod]
  698. public void StaysWithinParameters()
  699. {
  700. Parallel.For(1, 100,
  701. i =>
  702. {
  703. InternalLine l0 = DebugData.GetRandomLine(1, (uint)i);
  704. InternalLine l1 = DebugData.GetRandomLine(1, (uint)i);
  705. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  706. Assert.IsTrue((sim >= 0));
  707. Assert.IsTrue((sim <= 1));
  708. });
  709. }
  710. [TestMethod]
  711. public void CorrectSimilarity()
  712. {
  713. Parallel.ForEach(DebugData.GetSimilarityTestData(),
  714. tup =>
  715. {
  716. InternalLine l0 = tup.Item1;
  717. InternalLine l1 = tup.Item2;
  718. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  719. Assert.AreEqual(tup.Item3, sim, 0.00000001);
  720. });
  721. }
  722. }
  723. [TestClass]
  724. public class InternalLineUnitTests
  725. {
  726. /// <summary>
  727. /// The debug data element used to generate random lines.
  728. /// </summary>
  729. private DebugData DebugData = new DebugData();
  730. [TestMethod]
  731. public void MakePermanentTest()
  732. {
  733. List<Point> points = new List<Point>();
  734. points.AddRange(DebugData.debugPoints4);
  735. InternalLine uut = new InternalLine(points);
  736. Assert.AreEqual(false, uut.isPoint);
  737. uut.MakePermanent(5);
  738. Assert.AreEqual(true, uut.isPoint);
  739. Assert.AreEqual(5, uut.GetID());
  740. Assert.AreEqual(0, uut.GetLength());
  741. }
  742. [DataTestMethod]
  743. [DataRow(new int[] { 1 ,1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, false, 2.828427125)]
  744. [DataRow(new int[] { 1, 1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, true, 2.828427125)]
  745. [DataRow(new int[] { 1, 1, 1, 4 ,3, 4 }, new int[] { 1, 1, 1, 2, 1, 3, 1, 4, 2, 4, 3, 4 }, false, 5)]
  746. [DataRow(new int[] { 1, 1, 1, 4, 3, 4 }, new int[] { 1, 1, 1, 2, 1, 3, 1, 4, 2, 4, 3, 4 }, true, 5)]
  747. public void PermanentLineTest(int[] inPoints, int[] outPoints, bool isTemp, double len)
  748. {
  749. List<Point> inLine = new List<Point>(); List<Point> outLine = new List<Point>();
  750. for (int i = 0; i < inPoints.Length;i += 2) inLine.Add(new Point(inPoints[i], inPoints[i + 1]));
  751. for (int i = 0; i < outPoints.Length; i += 2) outLine.Add(new Point(outPoints[i], outPoints[i + 1]));
  752. InternalLine uut;
  753. if (isTemp)
  754. {
  755. uut = new InternalLine(inLine);
  756. var zip = inLine.Zip(uut.GetPoints(), (a,b) => new Tuple<Point, Point>(a, b));
  757. foreach (Tuple < Point, Point> tup in zip)
  758. {
  759. Assert.AreEqual(tup.Item1, tup.Item2);
  760. }
  761. }
  762. else
  763. {
  764. uut = new InternalLine(inLine,0);
  765. var zip = outLine.Zip(uut.GetPoints(), (a, b) => new Tuple<Point, Point>(a, b));
  766. foreach (Tuple<Point, Point> tup in zip)
  767. {
  768. Assert.AreEqual(tup.Item1, tup.Item2);
  769. }
  770. }
  771. Assert.AreEqual(len, uut.GetLength(), 0.000001);
  772. }
  773. }
  774. }