UITest.cs 54 KB

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