UITest.cs 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014
  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. using Application = TestStack.White.Application;
  22. using Window = TestStack.White.UIItems.WindowItems.Window;
  23. using System.Drawing;
  24. using System.Drawing.Imaging;
  25. namespace WhiteTests
  26. {
  27. [TestClass]
  28. public class UITest
  29. {
  30. private TestStack.White.Application application;
  31. /// <summary>
  32. /// The directory of the input files, saved for repeated use
  33. /// </summary>
  34. private String input_file_dir = null;
  35. /// <summary>
  36. /// instance of TestContext to be able to access deployed files
  37. /// </summary>
  38. private TestContext testContextInstance;
  39. /// <summary>
  40. ///Gets or sets the test context which provides
  41. ///information about and functionality for the current test run.
  42. ///</summary>
  43. public TestContext TestContext
  44. {
  45. get
  46. {
  47. return testContextInstance;
  48. }
  49. set
  50. {
  51. testContextInstance = value;
  52. }
  53. }
  54. /// <summary>
  55. /// A function that returns the path to the test_input_files folder.
  56. /// Do with it what you want.
  57. /// </summary>
  58. /// <returns>the path to the test_input_files folder</returns>
  59. public String getSketchAssistantDirectory()
  60. {
  61. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  62. Match match = rx.Match(TestContext.DeploymentDirectory);
  63. String SketchAssistDir = match.Groups[1].Value;
  64. if (input_file_dir == null)
  65. {
  66. if (Directory.Exists(SketchAssistDir + @"WhiteTests\test_input_files\"))
  67. {
  68. input_file_dir = SketchAssistDir + @"WhiteTests\test_input_files\";
  69. }
  70. else if (Directory.Exists(SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\"))
  71. {
  72. input_file_dir = SketchAssistDir + @"WhiteTests\bin\Debug\test_input_files\";
  73. }
  74. else
  75. {
  76. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  77. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  78. String ProjectsDir = match_0.Groups[1].Value;
  79. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  80. input_file_dir = dirs[0];
  81. }
  82. }
  83. return input_file_dir;
  84. }
  85. public Window setupapp()
  86. {
  87. string outputDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  88. string editedDir = outputDir.Replace("WhiteTests", "SketchAssistantWPF");
  89. string app_path = editedDir + @"\SketchAssistantWPF.exe";
  90. ProcessStartInfo processStart = new ProcessStartInfo(app_path, "-debug");
  91. application = Application.Launch(processStart);
  92. return application.GetWindow("Sketch Assistant");
  93. }
  94. [DataTestMethod]
  95. [TestCategory("FileIO")]
  96. [DataRow("line")]
  97. public void LoadSVGFileTest(String filename)
  98. {
  99. Window mainWindow = setupapp();
  100. InputSimulator inputSimulator = new InputSimulator();
  101. Thread.Sleep(20);
  102. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\whitelisted", "*.svg", SearchOption.AllDirectories);
  103. Thread.Sleep(20);
  104. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("LoadMenuButton")).Click();
  105. Thread.Sleep(20);
  106. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("SVGMenuButton")).Click();
  107. Thread.Sleep(1000);
  108. inputSimulator.Keyboard.TextEntry(getSketchAssistantDirectory() + @"whitelisted\" + filename + ".svg");
  109. Thread.Sleep(1000);
  110. inputSimulator.Keyboard.KeyPress(VirtualKeyCode.RETURN);
  111. Thread.Sleep(1000);
  112. //Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  113. mainWindow.Close();
  114. }
  115. [TestMethod]
  116. [TestCategory("DirectInput")]
  117. public void DrawLineOnCanvasTest()
  118. {
  119. Window mainWindow = setupapp();
  120. Thread.Sleep(20);
  121. InputSimulator inputSimulator = new InputSimulator();
  122. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  123. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  124. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  125. Thread.Sleep(20);
  126. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  127. Thread.Sleep(20);
  128. inputSimulator.Mouse.MoveMouseBy(100,100);
  129. inputSimulator.Mouse.LeftButtonDown();
  130. Thread.Sleep(20);
  131. inputSimulator.Mouse.MoveMouseBy(100, 100);
  132. Thread.Sleep(20);
  133. inputSimulator.Mouse.LeftButtonUp();
  134. Thread.Sleep(20);
  135. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  136. mainWindow.Close();
  137. }
  138. [TestMethod]
  139. [TestCategory("DirectInput")]
  140. public void UndoLineOnCanvasTest()
  141. {
  142. Window mainWindow = setupapp();
  143. Thread.Sleep(20);
  144. InputSimulator inputSimulator = new InputSimulator();
  145. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  146. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  147. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  148. Thread.Sleep(20);
  149. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  150. Thread.Sleep(20);
  151. inputSimulator.Mouse.MoveMouseBy(0, 200);
  152. inputSimulator.Mouse.LeftButtonDown();
  153. Thread.Sleep(20);
  154. inputSimulator.Mouse.MoveMouseBy(500, 300);
  155. Thread.Sleep(20);
  156. inputSimulator.Mouse.LeftButtonUp();
  157. Thread.Sleep(20);
  158. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  159. Thread.Sleep(20);
  160. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  161. Thread.Sleep(100);
  162. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  163. mainWindow.Close();
  164. }
  165. [TestMethod]
  166. [TestCategory("DirectInput")]
  167. public void InvalidLineTest()
  168. {
  169. Window mainWindow = setupapp();
  170. Thread.Sleep(20);
  171. InputSimulator inputSimulator = new InputSimulator();
  172. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  173. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  174. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  175. Thread.Sleep(20);
  176. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  177. Thread.Sleep(20);
  178. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DrawButton")).Click();
  179. Thread.Sleep(20);
  180. inputSimulator.Mouse.LeftButtonDown();
  181. inputSimulator.Mouse.MoveMouseBy(0, 200);
  182. Thread.Sleep(20);
  183. inputSimulator.Mouse.MoveMouseBy(500, 300);
  184. Thread.Sleep(20);
  185. inputSimulator.Mouse.LeftButtonUp();
  186. Thread.Sleep(20);
  187. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  188. Thread.Sleep(20);
  189. inputSimulator.Mouse.MoveMouseBy(-1000, 0);
  190. Thread.Sleep(20);
  191. inputSimulator.Mouse.LeftButtonDown();
  192. inputSimulator.Mouse.MoveMouseBy(1000, 0);
  193. inputSimulator.Mouse.LeftButtonUp();
  194. Thread.Sleep(20);
  195. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  196. mainWindow.Close();
  197. }
  198. [TestMethod]
  199. [TestCategory("DirectInput")]
  200. public void PointsOnCanvasSimilarityTest()
  201. {
  202. Window mainWindow = setupapp();
  203. Thread.Sleep(20);
  204. InputSimulator inputSimulator = new InputSimulator();
  205. MouseSimulator mouseSimulator = new MouseSimulator(inputSimulator);
  206. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  207. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  208. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  209. inputSimulator.Mouse.MoveMouseBy(0, 200);
  210. inputSimulator.Mouse.LeftButtonDown();
  211. Thread.Sleep(20);
  212. inputSimulator.Mouse.LeftButtonUp();
  213. Thread.Sleep(20);
  214. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  215. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  216. Thread.Sleep(20);
  217. inputSimulator.Mouse.LeftButtonDown();
  218. Thread.Sleep(20);
  219. inputSimulator.Mouse.LeftButtonUp();
  220. Thread.Sleep(20);
  221. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  222. Assert.AreEqual("1", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  223. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  224. Thread.Sleep(20);
  225. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  226. Assert.AreEqual("-", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  227. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  228. Thread.Sleep(20);
  229. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  230. Assert.AreEqual("1", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LineSimilarityBox")).Text.ToString());
  231. mainWindow.Close();
  232. }
  233. [TestMethod]
  234. [TestCategory("DebugInput")]
  235. public void CreateCanvasTest()
  236. {
  237. Window mainWindow = setupapp();
  238. Thread.Sleep(20);
  239. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  240. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  241. Thread.Sleep(20);
  242. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  243. mainWindow.Close();
  244. }
  245. [TestMethod]
  246. [TestCategory("DebugInput")]
  247. public void DrawLineTest()
  248. {
  249. Window mainWindow = setupapp();
  250. Thread.Sleep(20);
  251. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  252. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  253. Thread.Sleep(20);
  254. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  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("DebugOne")).Click();
  260. Thread.Sleep(7000);
  261. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  262. mainWindow.Close();
  263. }
  264. [TestMethod]
  265. [TestCategory("DebugInput")]
  266. public void DeleteLineTest()
  267. {
  268. Window mainWindow = setupapp();
  269. Thread.Sleep(20);
  270. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  271. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  272. Thread.Sleep(20);
  273. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  274. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DrawButton")).Click();
  275. Thread.Sleep(20);
  276. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  277. Thread.Sleep(20);
  278. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  279. Thread.Sleep(20);
  280. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  281. Thread.Sleep(7000);
  282. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  283. Thread.Sleep(20);
  284. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  285. Thread.Sleep(20);
  286. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  287. Thread.Sleep(20);
  288. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  289. Thread.Sleep(20);
  290. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  291. Thread.Sleep(7000);
  292. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  293. mainWindow.Close();
  294. }
  295. [TestMethod]
  296. [TestCategory("DebugInput")]
  297. public void UndoTest()
  298. {
  299. Window mainWindow = setupapp();
  300. Thread.Sleep(20);
  301. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  302. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  303. Thread.Sleep(20);
  304. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  305. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  306. Thread.Sleep(20);
  307. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  308. Thread.Sleep(20);
  309. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  310. Thread.Sleep(7000);
  311. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  312. Thread.Sleep(20);
  313. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  314. Thread.Sleep(20);
  315. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  316. mainWindow.Close();
  317. }
  318. [TestMethod]
  319. [TestCategory("DebugInput")]
  320. public void RedoTest()
  321. {
  322. Window mainWindow = setupapp();
  323. Thread.Sleep(20);
  324. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  325. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  326. Thread.Sleep(20);
  327. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  328. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  329. Thread.Sleep(20);
  330. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  331. Thread.Sleep(20);
  332. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  333. Thread.Sleep(7000);
  334. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  335. Thread.Sleep(20);
  336. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  337. Thread.Sleep(20);
  338. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  339. Thread.Sleep(20);
  340. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  341. Thread.Sleep(20);
  342. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  343. mainWindow.Close();
  344. }
  345. [TestMethod]
  346. [TestCategory("DebugInput")]
  347. public void DrawSeveralLinesTest()
  348. {
  349. Window mainWindow = setupapp();
  350. Thread.Sleep(20);
  351. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  352. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  353. Thread.Sleep(20);
  354. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  355. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  356. Thread.Sleep(20);
  357. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  358. Thread.Sleep(20);
  359. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  360. Thread.Sleep(7000);
  361. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  362. Thread.Sleep(20);
  363. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  364. Thread.Sleep(20);
  365. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  366. Thread.Sleep(20);
  367. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  368. Thread.Sleep(30000);
  369. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  370. Thread.Sleep(20);
  371. mainWindow.Close();
  372. }
  373. [TestMethod]
  374. [TestCategory("DebugInput")]
  375. public void DeleteSeveralLinesTest()
  376. {
  377. Window mainWindow = setupapp();
  378. Thread.Sleep(20);
  379. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  380. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  381. Thread.Sleep(20);
  382. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  383. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  384. Thread.Sleep(20);
  385. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  386. Thread.Sleep(20);
  387. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  388. Thread.Sleep(7000);
  389. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  390. Thread.Sleep(20);
  391. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  392. Thread.Sleep(20);
  393. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  394. Thread.Sleep(20);
  395. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  396. Thread.Sleep(24000);
  397. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  398. Thread.Sleep(20);
  399. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  400. Thread.Sleep(20);
  401. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  402. Thread.Sleep(20);
  403. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  404. Thread.Sleep(20);
  405. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  406. Thread.Sleep(20);
  407. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  408. Thread.Sleep(10000);
  409. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  410. mainWindow.Close();
  411. }
  412. [TestMethod]
  413. [TestCategory("DebugInput")]
  414. public void UndoSeveralLinesTest()
  415. {
  416. Window mainWindow = setupapp();
  417. Thread.Sleep(20);
  418. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  419. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  420. Thread.Sleep(20);
  421. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  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("DebugOne")).Click();
  427. Thread.Sleep(7000);
  428. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  429. Thread.Sleep(20);
  430. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  431. Thread.Sleep(20);
  432. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  433. Thread.Sleep(20);
  434. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  435. Thread.Sleep(30000);
  436. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  437. Thread.Sleep(20);
  438. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  439. Thread.Sleep(20);
  440. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  441. Thread.Sleep(20);
  442. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  443. Thread.Sleep(20);
  444. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  445. Thread.Sleep(20);
  446. mainWindow.Close();
  447. }
  448. [TestMethod]
  449. [TestCategory("DebugInput")]
  450. public void RedoSeveralLinesTest()
  451. {
  452. Window mainWindow = setupapp();
  453. Thread.Sleep(20);
  454. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  455. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  456. Thread.Sleep(20);
  457. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  458. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  459. Thread.Sleep(20);
  460. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  461. Thread.Sleep(20);
  462. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  463. Thread.Sleep(7000);
  464. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  465. Thread.Sleep(20);
  466. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  467. Thread.Sleep(20);
  468. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  469. Thread.Sleep(20);
  470. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  471. Thread.Sleep(24000);
  472. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  473. Thread.Sleep(20);
  474. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  475. Thread.Sleep(20);
  476. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  477. Thread.Sleep(20);
  478. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  479. Thread.Sleep(20);
  480. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  481. Thread.Sleep(20);
  482. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  483. Thread.Sleep(20);
  484. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  485. Thread.Sleep(20);
  486. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  487. Thread.Sleep(20);
  488. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  489. Thread.Sleep(20);
  490. mainWindow.Close();
  491. }
  492. [TestMethod]
  493. [TestCategory("DebugInput")]
  494. public void UndoAndRedoTest()
  495. {
  496. Window mainWindow = setupapp();
  497. Thread.Sleep(20);
  498. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  499. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  500. Thread.Sleep(20);
  501. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  502. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  503. Thread.Sleep(20);
  504. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  505. Thread.Sleep(20);
  506. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugOne")).Click();
  507. Thread.Sleep(7000);
  508. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  509. Thread.Sleep(20);
  510. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  511. Thread.Sleep(20);
  512. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  513. Thread.Sleep(20);
  514. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugTwo")).Click();
  515. Thread.Sleep(24000);
  516. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  517. Thread.Sleep(20);
  518. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  519. Thread.Sleep(20);
  520. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  521. Thread.Sleep(20);
  522. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  523. Thread.Sleep(20);
  524. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  525. Thread.Sleep(20);
  526. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  527. Thread.Sleep(20);
  528. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  529. Thread.Sleep(20);
  530. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("RedoButton")).Click();
  531. Thread.Sleep(20);
  532. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  533. Thread.Sleep(20);
  534. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  535. Thread.Sleep(20);
  536. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  537. Thread.Sleep(20);
  538. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  539. Thread.Sleep(20);
  540. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  541. Thread.Sleep(7000);
  542. Assert.AreEqual("Last Action: Line number 0 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  543. Thread.Sleep(20);
  544. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  545. Thread.Sleep(20);
  546. Assert.AreEqual("Last Action: Line number 1 was deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  547. Thread.Sleep(20);
  548. mainWindow.Close();
  549. }
  550. [TestMethod]
  551. [TestCategory("DebugInput")]
  552. public void UndoAndDrawTest()
  553. {
  554. Window mainWindow = setupapp();
  555. Thread.Sleep(20);
  556. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  557. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  558. Thread.Sleep(20);
  559. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  560. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  561. Thread.Sleep(20);
  562. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  563. Thread.Sleep(20);
  564. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  565. Thread.Sleep(2000);
  566. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  567. Thread.Sleep(20);
  568. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("UndoButton")).Click();
  569. Thread.Sleep(20);
  570. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  571. Thread.Sleep(20);
  572. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  573. Thread.Sleep(20);
  574. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  575. Thread.Sleep(20);
  576. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  577. Thread.Sleep(2000);
  578. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  579. Thread.Sleep(20);
  580. mainWindow.Close();
  581. }
  582. [TestMethod]
  583. [TestCategory("DebugInput")]
  584. public void DeleteSeveralLinesAtOnceTest()
  585. {
  586. Window mainWindow = setupapp();
  587. Thread.Sleep(20);
  588. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  589. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  590. Thread.Sleep(20);
  591. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  592. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  593. Thread.Sleep(20);
  594. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  595. Thread.Sleep(20);
  596. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  597. Thread.Sleep(2000);
  598. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  599. Thread.Sleep(20);
  600. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  601. Thread.Sleep(20);
  602. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  603. Thread.Sleep(20);
  604. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  605. Thread.Sleep(2000);
  606. Assert.AreEqual("Last Action: Line number 1 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  607. Thread.Sleep(20);
  608. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("DeleteButton")).Click();
  609. Thread.Sleep(20);
  610. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  611. Thread.Sleep(20);
  612. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  613. Thread.Sleep(20);
  614. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  615. Thread.Sleep(2000);
  616. Assert.AreEqual("Last Action: Several Lines were deleted.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  617. Thread.Sleep(20);
  618. mainWindow.Close();
  619. }
  620. [TestMethod]
  621. [TestCategory("DebugInput")]
  622. public void PointDrawTest()
  623. {
  624. Window mainWindow = setupapp();
  625. Thread.Sleep(20);
  626. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  627. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  628. Thread.Sleep(20);
  629. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  630. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  631. Thread.Sleep(20);
  632. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  633. Thread.Sleep(20);
  634. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugFour")).Click();
  635. Thread.Sleep(4000);
  636. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  637. Thread.Sleep(20);
  638. mainWindow.Close();
  639. }
  640. [TestMethod]
  641. [TestCategory("DebugInput")]
  642. public void NewCanvasAfterDrawTest()
  643. {
  644. Window mainWindow = setupapp();
  645. Thread.Sleep(20);
  646. Assert.AreEqual("none", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  647. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  648. Thread.Sleep(20);
  649. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  650. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("EditMenuButton")).Click();
  651. Thread.Sleep(20);
  652. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugMode")).Click();
  653. Thread.Sleep(20);
  654. mainWindow.Get<Menu>(SearchCriteria.ByAutomationId("DebugThree")).Click();
  655. Thread.Sleep(4000);
  656. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  657. Thread.Sleep(20);
  658. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  659. Thread.Sleep(20);
  660. // Click on No button in warning
  661. Window messageBox0 = mainWindow.MessageBox("Warning");
  662. messageBox0.Get<Button>(SearchCriteria.ByText("No")).Click();
  663. Thread.Sleep(20);
  664. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  665. Thread.Sleep(20);
  666. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  667. Thread.Sleep(20);
  668. // close warning
  669. Window messageBox1 = mainWindow.MessageBox("Warning");
  670. messageBox1.Close();
  671. Thread.Sleep(20);
  672. Assert.AreEqual("Last Action: Line number 0 was drawn.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  673. Thread.Sleep(20);
  674. mainWindow.Get<Button>(SearchCriteria.ByAutomationId("CanvasButton")).Click();
  675. Thread.Sleep(20);
  676. // click yes button on warning
  677. Window messageBox2 = mainWindow.MessageBox("Warning");
  678. messageBox2.Get<Button>(SearchCriteria.ByText("Yes")).Click();
  679. Thread.Sleep(20);
  680. Assert.AreEqual("Last Action: A new canvas was created.", mainWindow.Get<TextBox>(SearchCriteria.ByAutomationId("LastActionBox")).Text.ToString());
  681. Thread.Sleep(20);
  682. mainWindow.Close();
  683. }
  684. }
  685. [TestClass]
  686. public class FileImporterTests
  687. {
  688. /// <summary>
  689. /// The directory of the input files, saved for repeated use
  690. /// </summary>
  691. private String input_file_dir = null;
  692. /// <summary>
  693. /// instance of TestContext to be able to access deployed files
  694. /// </summary>
  695. private TestContext testContextInstance;
  696. /// <summary>
  697. ///Gets or sets the test context which provides
  698. ///information about and functionality for the current test run.
  699. ///</summary>
  700. public TestContext TestContext
  701. {
  702. get
  703. {
  704. return testContextInstance;
  705. }
  706. set
  707. {
  708. testContextInstance = value;
  709. }
  710. }
  711. /// <summary>
  712. /// A function that returns the path to the test_input_files folder.
  713. /// Do with it what you want.
  714. /// </summary>
  715. /// <returns>the path to the test_input_files folder</returns>
  716. public String getSketchAssistantDirectory()
  717. {
  718. Regex rx = new Regex(@"^(.*\\SketchAssistant\\)");
  719. Match match = rx.Match(TestContext.DeploymentDirectory);
  720. String SketchAssistDir = match.Groups[1].Value;
  721. if (input_file_dir == null)
  722. {
  723. if (Directory.Exists(SketchAssistDir + @"\WhiteTests\test_input_files\"))
  724. {
  725. input_file_dir = SketchAssistDir + @"\WhiteTests\test_input_files\";
  726. }
  727. else if (Directory.Exists(SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\"))
  728. {
  729. input_file_dir = SketchAssistDir + @"\WhiteTests\bin\Debug\test_input_files\";
  730. }
  731. else
  732. {
  733. Regex rx_0 = new Regex(@"^(.*\\projects\\)");
  734. Match match_0 = rx_0.Match(TestContext.DeploymentDirectory);
  735. String ProjectsDir = match_0.Groups[1].Value;
  736. var dirs = Directory.GetDirectories(ProjectsDir, "test_input_files", SearchOption.AllDirectories);
  737. input_file_dir = dirs[0];
  738. }
  739. }
  740. return input_file_dir;
  741. }
  742. /// <summary>
  743. /// 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
  744. /// </summary>
  745. /// <param name="xCoordinates">an array containing the x coordinates of the points that will be created (length divisible by 3)</param>
  746. /// <param name="yCoordinates">an array containing the y coordinates of the points that will be created (length divisible by 3)</param>
  747. [DataTestMethod]
  748. [TestCategory("FileIO")]
  749. [DataRow(new int[] { 54, 43, 57, 11, 145, 34, 113, 299, 0 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  750. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 })]
  751. [DataRow(new int[] { 33, 42, 140, 30, 30, 30, 32, 145, 2 }, new int[] { 54, 43, 57, 11, 145, 34, 113, 199, 0 })]
  752. public void ParseISADInputSuccessfulTest(int[] xCoordinates, int[] yCoordinates)
  753. {
  754. FileImporter uut = new FileImporter();
  755. List<String> file = new List<string>();
  756. file.Add("drawing");
  757. file.Add("300x200");
  758. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  759. {
  760. file.Add("line");
  761. file.Add(xCoordinates[i] + ";" + yCoordinates[i]);
  762. file.Add(xCoordinates[i + 1] + ";" + yCoordinates[i + 1]);
  763. file.Add(xCoordinates[i + 2] + ";" + yCoordinates[i + 2]);
  764. file.Add("endline");
  765. }
  766. file.Add("enddrawing");
  767. Tuple<int, int, List<InternalLine>> values = uut.ParseISADInputForTesting(file.ToArray());
  768. Assert.AreEqual(xCoordinates.Length / 3, values.Item3.Count);
  769. InternalLine[] lines = values.Item3.ToArray();
  770. for (int i = 0; i < xCoordinates.Length - 2; i += 3)
  771. {
  772. Point[] currentLine = lines[i / 3].GetPoints().ToArray();
  773. Assert.AreEqual(3, currentLine.Length);
  774. for (int j = 0; j < 3; j++)
  775. {
  776. Assert.IsTrue(currentLine[j].X == xCoordinates[i + j] && currentLine[j].Y == yCoordinates[i + j]);
  777. }
  778. }
  779. }
  780. /// <summary>
  781. /// parses teh given invalid .isad files and verifies that a FileImporterException is thrown, but no other exception
  782. /// </summary>
  783. /// <param name="file">the input file represented as an array of lines</param>
  784. [DataTestMethod]
  785. [TestCategory("FileIO")]
  786. [DataRow(new String[] { })]
  787. [DataRow(new String[] { "begindrawing", "300x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  788. [DataRow(new String[] { "drawing", "300;300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  789. [DataRow(new String[] { "drawing", "30.5x300", "line", "50;50", "100;50", "endline", "enddrawing" })]
  790. [DataRow(new String[] { "drawing", "line", "50;50", "100;50", "endline", "enddrawing" })]
  791. [DataRow(new String[] { "drawing", "300x300", "beginline", "50;50", "100;50", "endline", "enddrawing" })]
  792. [DataRow(new String[] { "drawing", "300x300", "line", "500;50", "100;50", "endline", "enddrawing" })]
  793. [DataRow(new String[] { "drawing", "300x300", "line", "50x50", "100;50", "endline", "enddrawing" })]
  794. [DataRow(new String[] { "drawing", "300x300", "line", "50", "100", "endline", "enddrawing" })]
  795. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "line", "endline", "enddrawing" })]
  796. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "stopline", "enddrawing" })]
  797. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "enddrawing" })]
  798. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline", "endrawing" })]
  799. [DataRow(new String[] { "drawing", "300x300", "line", "50;50", "100;50", "endline" })]
  800. public void ParseISADInputExceptionTest(String[] file)
  801. {
  802. bool correctExceptionThrown = false;
  803. FileImporter uut = new FileImporter();
  804. try
  805. {
  806. //try to initialize the left image with an invalid isad drawing
  807. Tuple<int, int, List<InternalLine>> values1 = uut.ParseISADInputForTesting(file);
  808. }
  809. catch (FileImporterException e)
  810. {
  811. //save the occurence of an exception
  812. correctExceptionThrown = true;
  813. System.Diagnostics.Debug.WriteLine(e.ToString());
  814. }
  815. catch (Exception)
  816. {
  817. //don't set success flag
  818. }
  819. //check that an exception has been thrown
  820. Assert.IsTrue(correctExceptionThrown);
  821. }
  822. /// <summary>
  823. /// 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)
  824. /// </summary>
  825. [TestMethod]
  826. [TestCategory("FileIO")]
  827. public void ParseSVGInputNoErrorForWhitelistedFilesTest()
  828. {
  829. FileImporter uut = new FileImporter();
  830. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\whitelisted", "*.svg", SearchOption.AllDirectories);
  831. Assert.IsTrue(files.Length > 0);
  832. foreach (string s in files) //parse each of the whitelisted files
  833. {
  834. Console.WriteLine(s);
  835. bool noExceptionThrown = true;
  836. try
  837. {
  838. uut.ParseSVGInputFile(s, 10000, 10000);
  839. }
  840. catch (Exception)
  841. {
  842. noExceptionThrown = false;
  843. }
  844. Assert.IsTrue(noExceptionThrown);
  845. }
  846. }
  847. /// <summary>
  848. /// parses all blacklisted files and ensures an instance of FileIporterException is thrown for each file, but no other exceptions occur
  849. /// </summary>
  850. [TestMethod]
  851. [TestCategory("FileIO")]
  852. public void ParseSVGInputNoErrorForBlacklistedFilesTest()
  853. {
  854. FileImporter uut = new FileImporter();
  855. string[] files = Directory.GetFiles(getSketchAssistantDirectory() + @"\blacklisted", "*.svg", SearchOption.AllDirectories);
  856. Assert.IsTrue(files.Length > 0);
  857. foreach (string s in files) //parse each of the blacklisted files
  858. {
  859. bool correctExceptionThrown = false;
  860. try
  861. {
  862. uut.ParseSVGInputFile(s, 10000, 10000);
  863. }
  864. catch (FileImporterException e)
  865. {
  866. System.Diagnostics.Debug.WriteLine(e.ToString());
  867. correctExceptionThrown = true;
  868. }
  869. catch (Exception)
  870. {
  871. }
  872. Assert.IsTrue(correctExceptionThrown);
  873. }
  874. }
  875. }
  876. [TestClass]
  877. public class SimilarityCalculationTests
  878. {
  879. /// <summary>
  880. /// The debug data element used to generate random lines.
  881. /// </summary>
  882. private DebugData DebugData = new DebugData();
  883. /// <summary>
  884. /// Generates random lines and tests how similar they are.
  885. /// To test the similarity score always stays between 0 and 1.
  886. /// </summary>
  887. [TestMethod]
  888. [TestCategory("UnitTest")]
  889. public void StaysWithinParameters()
  890. {
  891. Parallel.For(1, 100,
  892. i =>
  893. {
  894. InternalLine l0 = DebugData.GetRandomLine(1, (uint)i);
  895. InternalLine l1 = DebugData.GetRandomLine(1, (uint)i);
  896. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  897. Assert.IsTrue((sim >= 0));
  898. Assert.IsTrue((sim <= 1));
  899. });
  900. }
  901. [TestMethod]
  902. [TestCategory("UnitTest")]
  903. public void CorrectSimilarity()
  904. {
  905. Parallel.ForEach(DebugData.GetSimilarityTestData(),
  906. tup =>
  907. {
  908. InternalLine l0 = tup.Item1;
  909. InternalLine l1 = tup.Item2;
  910. var sim = GeometryCalculator.CalculateSimilarity(l0, l1);
  911. Assert.AreEqual(tup.Item3, sim, 0.00000001);
  912. });
  913. }
  914. }
  915. [TestClass]
  916. public class InternalLineUnitTests
  917. {
  918. /// <summary>
  919. /// The debug data element used to generate random lines.
  920. /// </summary>
  921. private DebugData DebugData = new DebugData();
  922. [TestMethod]
  923. [TestCategory("UnitTest")]
  924. public void MakePermanentTest()
  925. {
  926. List<Point> points = new List<Point>();
  927. points.AddRange(DebugData.debugPoints4);
  928. InternalLine uut = new InternalLine(points);
  929. Assert.AreEqual(false, uut.isPoint);
  930. uut.MakePermanent(5);
  931. Assert.AreEqual(true, uut.isPoint);
  932. Assert.AreEqual(5, uut.GetID());
  933. Assert.AreEqual(0, uut.GetLength());
  934. }
  935. [DataTestMethod]
  936. [TestCategory("UnitTest")]
  937. [DataRow(new int[] { 1 ,1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, false, 2.828427125)]
  938. [DataRow(new int[] { 1, 1, 3, 3 }, new int[] { 1, 1, 2, 2, 3, 3 }, true, 2.828427125)]
  939. [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)]
  940. [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)]
  941. public void PermanentLineTest(int[] inPoints, int[] outPoints, bool isTemp, double len)
  942. {
  943. List<Point> inLine = new List<Point>(); List<Point> outLine = new List<Point>();
  944. for (int i = 0; i < inPoints.Length;i += 2) inLine.Add(new Point(inPoints[i], inPoints[i + 1]));
  945. for (int i = 0; i < outPoints.Length; i += 2) outLine.Add(new Point(outPoints[i], outPoints[i + 1]));
  946. InternalLine uut;
  947. if (isTemp)
  948. {
  949. uut = new InternalLine(inLine);
  950. var zip = inLine.Zip(uut.GetPoints(), (a,b) => new Tuple<Point, Point>(a, b));
  951. foreach (Tuple < Point, Point> tup in zip)
  952. {
  953. Assert.AreEqual(tup.Item1, tup.Item2);
  954. }
  955. }
  956. else
  957. {
  958. uut = new InternalLine(inLine,0);
  959. var zip = outLine.Zip(uut.GetPoints(), (a, b) => new Tuple<Point, Point>(a, b));
  960. foreach (Tuple<Point, Point> tup in zip)
  961. {
  962. Assert.AreEqual(tup.Item1, tup.Item2);
  963. }
  964. }
  965. Assert.AreEqual(len, uut.GetLength(), 0.000001);
  966. }
  967. }
  968. }