WizardTests.cs 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
  1. namespace ViewsTests;
  2. [Collection ("Global Test Setup")]
  3. public class WizardTests
  4. {
  5. #region Constructor Tests
  6. [Fact]
  7. public void Constructor_Initializes_Properties ()
  8. {
  9. // Arrange & Act
  10. Wizard wizard = new ();
  11. // Assert
  12. Assert.NotNull (wizard);
  13. Assert.NotNull (wizard.BackButton);
  14. Assert.NotNull (wizard.NextFinishButton);
  15. Assert.Null (wizard.CurrentStep);
  16. Assert.Equal (LineStyle.Dotted, wizard.BorderStyle);
  17. Assert.False (wizard.Arrangement.HasFlag (ViewArrangement.Movable));
  18. Assert.False (wizard.Arrangement.HasFlag (ViewArrangement.Resizable));
  19. }
  20. [Fact]
  21. public void Constructor_Sets_Button_Properties ()
  22. {
  23. // Arrange & Act
  24. Wizard wizard = new ();
  25. // Assert
  26. Assert.Equal (Strings.wzBack, wizard.BackButton.Text);
  27. Assert.Equal (Strings.wzFinish, wizard.NextFinishButton.Text);
  28. Assert.True (wizard.NextFinishButton.IsDefault);
  29. Assert.Equal (0, wizard.BackButton.X);
  30. Assert.Equal (Pos.AnchorEnd (), wizard.NextFinishButton.X);
  31. }
  32. #endregion Constructor Tests
  33. #region AddStep Tests
  34. [Fact]
  35. public void AddStep_Adds_Step_To_Wizard ()
  36. {
  37. // Arrange
  38. Wizard wizard = new ();
  39. WizardStep step = new () { Title = "Step 1" };
  40. // Act
  41. wizard.AddStep (step);
  42. // Assert
  43. Assert.Single (wizard.SubViews);
  44. Assert.Contains (step, wizard.SubViews);
  45. }
  46. [Fact]
  47. public void AddStep_Multiple_Steps_Maintains_Order ()
  48. {
  49. // Arrange
  50. Wizard wizard = new ();
  51. WizardStep step1 = new () { Title = "Step 1" };
  52. WizardStep step2 = new () { Title = "Step 2" };
  53. WizardStep step3 = new () { Title = "Step 3" };
  54. // Act
  55. wizard.AddStep (step1);
  56. wizard.AddStep (step2);
  57. wizard.AddStep (step3);
  58. // Assert
  59. Assert.Equal (3, wizard.SubViews.Count);
  60. Assert.Equal (step1, wizard.GetFirstStep ());
  61. Assert.Equal (step3, wizard.GetLastStep ());
  62. }
  63. [Fact]
  64. public void AddStep_Sets_Width_And_Height_To_Fill ()
  65. {
  66. // Arrange
  67. Wizard wizard = new ();
  68. WizardStep step = new () { Title = "Step 1" };
  69. // Act
  70. wizard.AddStep (step);
  71. // Assert
  72. Assert.IsType<DimFill> (step.Width);
  73. Assert.IsType<DimFill> (step.Height);
  74. }
  75. #endregion AddStep Tests
  76. #region GetFirstStep Tests
  77. [Fact]
  78. public void GetFirstStep_Returns_Null_When_No_Steps ()
  79. {
  80. // Arrange
  81. Wizard wizard = new ();
  82. // Act
  83. WizardStep? result = wizard.GetFirstStep ();
  84. // Assert
  85. Assert.Null (result);
  86. }
  87. [Fact]
  88. public void GetFirstStep_Returns_First_Enabled_Step ()
  89. {
  90. // Arrange
  91. Wizard wizard = new ();
  92. WizardStep step1 = new () { Title = "Step 1" };
  93. WizardStep step2 = new () { Title = "Step 2" };
  94. wizard.AddStep (step1);
  95. wizard.AddStep (step2);
  96. // Act
  97. WizardStep? result = wizard.GetFirstStep ();
  98. // Assert
  99. Assert.Equal (step1, result);
  100. }
  101. [Fact]
  102. public void GetFirstStep_Skips_Disabled_Steps ()
  103. {
  104. // Arrange
  105. Wizard wizard = new ();
  106. WizardStep step1 = new () { Title = "Step 1", Enabled = false };
  107. WizardStep step2 = new () { Title = "Step 2" };
  108. WizardStep step3 = new () { Title = "Step 3" };
  109. wizard.AddStep (step1);
  110. wizard.AddStep (step2);
  111. wizard.AddStep (step3);
  112. // Act
  113. WizardStep? result = wizard.GetFirstStep ();
  114. // Assert
  115. Assert.Equal (step2, result);
  116. }
  117. [Fact]
  118. public void GetFirstStep_Returns_Null_When_All_Steps_Disabled ()
  119. {
  120. // Arrange
  121. Wizard wizard = new ();
  122. WizardStep step1 = new () { Title = "Step 1", Enabled = false };
  123. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  124. wizard.AddStep (step1);
  125. wizard.AddStep (step2);
  126. // Act
  127. WizardStep? result = wizard.GetFirstStep ();
  128. // Assert
  129. Assert.Null (result);
  130. }
  131. #endregion GetFirstStep Tests
  132. #region GetLastStep Tests
  133. [Fact]
  134. public void GetLastStep_Returns_Null_When_No_Steps ()
  135. {
  136. // Arrange
  137. Wizard wizard = new ();
  138. // Act
  139. WizardStep? result = wizard.GetLastStep ();
  140. // Assert
  141. Assert.Null (result);
  142. }
  143. [Fact]
  144. public void GetLastStep_Returns_Last_Enabled_Step ()
  145. {
  146. // Arrange
  147. Wizard wizard = new ();
  148. WizardStep step1 = new () { Title = "Step 1" };
  149. WizardStep step2 = new () { Title = "Step 2" };
  150. WizardStep step3 = new () { Title = "Step 3" };
  151. wizard.AddStep (step1);
  152. wizard.AddStep (step2);
  153. wizard.AddStep (step3);
  154. // Act
  155. WizardStep? result = wizard.GetLastStep ();
  156. // Assert
  157. Assert.Equal (step3, result);
  158. }
  159. [Fact]
  160. public void GetLastStep_Skips_Disabled_Steps ()
  161. {
  162. // Arrange
  163. Wizard wizard = new ();
  164. WizardStep step1 = new () { Title = "Step 1" };
  165. WizardStep step2 = new () { Title = "Step 2" };
  166. WizardStep step3 = new () { Title = "Step 3", Enabled = false };
  167. wizard.AddStep (step1);
  168. wizard.AddStep (step2);
  169. wizard.AddStep (step3);
  170. // Act
  171. WizardStep? result = wizard.GetLastStep ();
  172. // Assert
  173. Assert.Equal (step2, result);
  174. }
  175. [Fact]
  176. public void GetLastStep_Returns_Null_When_All_Steps_Disabled ()
  177. {
  178. // Arrange
  179. Wizard wizard = new ();
  180. WizardStep step1 = new () { Title = "Step 1", Enabled = false };
  181. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  182. wizard.AddStep (step1);
  183. wizard.AddStep (step2);
  184. // Act
  185. WizardStep? result = wizard.GetLastStep ();
  186. // Assert
  187. Assert.Null (result);
  188. }
  189. #endregion GetLastStep Tests
  190. #region GetNextStep Tests
  191. [Fact]
  192. public void GetNextStep_Returns_Null_When_No_Steps ()
  193. {
  194. // Arrange
  195. Wizard wizard = new ();
  196. // Act
  197. WizardStep? result = wizard.GetNextStep ();
  198. // Assert
  199. Assert.Null (result);
  200. }
  201. [Fact]
  202. public void GetNextStep_Returns_First_Step_When_CurrentStep_Is_Null ()
  203. {
  204. // Arrange
  205. Wizard wizard = new ();
  206. WizardStep step1 = new () { Title = "Step 1" };
  207. WizardStep step2 = new () { Title = "Step 2" };
  208. wizard.AddStep (step1);
  209. wizard.AddStep (step2);
  210. // Act
  211. WizardStep? result = wizard.GetNextStep ();
  212. // Assert
  213. Assert.Equal (step1, result);
  214. }
  215. [Fact]
  216. public void GetNextStep_Returns_Next_Enabled_Step ()
  217. {
  218. // Arrange
  219. Wizard wizard = new ();
  220. WizardStep step1 = new () { Title = "Step 1" };
  221. WizardStep step2 = new () { Title = "Step 2" };
  222. WizardStep step3 = new () { Title = "Step 3" };
  223. wizard.AddStep (step1);
  224. wizard.AddStep (step2);
  225. wizard.AddStep (step3);
  226. wizard.BeginInit ();
  227. wizard.EndInit ();
  228. // Act
  229. WizardStep? result = wizard.GetNextStep ();
  230. // Assert
  231. Assert.Equal (step2, result);
  232. }
  233. [Fact]
  234. public void GetNextStep_Skips_Disabled_Steps ()
  235. {
  236. // Arrange
  237. Wizard wizard = new ();
  238. WizardStep step1 = new () { Title = "Step 1" };
  239. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  240. WizardStep step3 = new () { Title = "Step 3" };
  241. wizard.AddStep (step1);
  242. wizard.AddStep (step2);
  243. wizard.AddStep (step3);
  244. wizard.BeginInit ();
  245. wizard.EndInit ();
  246. // Act
  247. WizardStep? result = wizard.GetNextStep ();
  248. // Assert
  249. Assert.Equal (step3, result);
  250. }
  251. [Fact]
  252. public void GetNextStep_Returns_Null_When_At_Last_Step ()
  253. {
  254. // Arrange
  255. Wizard wizard = new ();
  256. WizardStep step1 = new () { Title = "Step 1" };
  257. WizardStep step2 = new () { Title = "Step 2" };
  258. wizard.AddStep (step1);
  259. wizard.AddStep (step2);
  260. wizard.BeginInit ();
  261. wizard.EndInit ();
  262. wizard.CurrentStep = step2;
  263. // Act
  264. WizardStep? result = wizard.GetNextStep ();
  265. // Assert
  266. Assert.Null (result);
  267. }
  268. [Fact]
  269. public void GetNextStep_Returns_Null_When_All_Remaining_Steps_Disabled ()
  270. {
  271. // Arrange
  272. Wizard wizard = new ();
  273. WizardStep step1 = new () { Title = "Step 1" };
  274. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  275. WizardStep step3 = new () { Title = "Step 3", Enabled = false };
  276. wizard.AddStep (step1);
  277. wizard.AddStep (step2);
  278. wizard.AddStep (step3);
  279. wizard.BeginInit ();
  280. wizard.EndInit ();
  281. // Act
  282. WizardStep? result = wizard.GetNextStep ();
  283. // Assert
  284. Assert.Null (result);
  285. }
  286. #endregion GetNextStep Tests
  287. #region GetPreviousStep Tests
  288. [Fact]
  289. public void GetPreviousStep_Returns_Null_When_No_Steps ()
  290. {
  291. // Arrange
  292. Wizard wizard = new ();
  293. // Act
  294. WizardStep? result = wizard.GetPreviousStep ();
  295. // Assert
  296. Assert.Null (result);
  297. }
  298. [Fact]
  299. public void GetPreviousStep_Returns_Last_Step_When_CurrentStep_Is_Null ()
  300. {
  301. // Arrange
  302. Wizard wizard = new ();
  303. WizardStep step1 = new () { Title = "Step 1" };
  304. WizardStep step2 = new () { Title = "Step 2" };
  305. wizard.AddStep (step1);
  306. wizard.AddStep (step2);
  307. // Act
  308. WizardStep? result = wizard.GetPreviousStep ();
  309. // Assert
  310. Assert.Equal (step2, result);
  311. }
  312. [Fact]
  313. public void GetPreviousStep_Returns_Previous_Enabled_Step ()
  314. {
  315. // Arrange
  316. Wizard wizard = new ();
  317. WizardStep step1 = new () { Title = "Step 1" };
  318. WizardStep step2 = new () { Title = "Step 2" };
  319. WizardStep step3 = new () { Title = "Step 3" };
  320. wizard.AddStep (step1);
  321. wizard.AddStep (step2);
  322. wizard.AddStep (step3);
  323. wizard.BeginInit ();
  324. wizard.EndInit ();
  325. wizard.CurrentStep = step3;
  326. // Act
  327. WizardStep? result = wizard.GetPreviousStep ();
  328. // Assert
  329. Assert.Equal (step2, result);
  330. }
  331. [Fact]
  332. public void GetPreviousStep_Skips_Disabled_Steps ()
  333. {
  334. // Arrange
  335. Wizard wizard = new ();
  336. WizardStep step1 = new () { Title = "Step 1" };
  337. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  338. WizardStep step3 = new () { Title = "Step 3" };
  339. wizard.AddStep (step1);
  340. wizard.AddStep (step2);
  341. wizard.AddStep (step3);
  342. wizard.BeginInit ();
  343. wizard.EndInit ();
  344. wizard.CurrentStep = step3;
  345. // Act
  346. WizardStep? result = wizard.GetPreviousStep ();
  347. // Assert
  348. Assert.Equal (step1, result);
  349. }
  350. [Fact]
  351. public void GetPreviousStep_Returns_Null_When_At_First_Step ()
  352. {
  353. // Arrange
  354. Wizard wizard = new ();
  355. WizardStep step1 = new () { Title = "Step 1" };
  356. WizardStep step2 = new () { Title = "Step 2" };
  357. wizard.AddStep (step1);
  358. wizard.AddStep (step2);
  359. wizard.BeginInit ();
  360. wizard.EndInit ();
  361. // Act
  362. WizardStep? result = wizard.GetPreviousStep ();
  363. // Assert
  364. Assert.Null (result);
  365. }
  366. [Fact]
  367. public void GetPreviousStep_Returns_Null_When_All_Previous_Steps_Disabled ()
  368. {
  369. // Arrange
  370. Wizard wizard = new ();
  371. WizardStep step1 = new () { Title = "Step 1", Enabled = false };
  372. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  373. WizardStep step3 = new () { Title = "Step 3" };
  374. wizard.AddStep (step1);
  375. wizard.AddStep (step2);
  376. wizard.AddStep (step3);
  377. wizard.BeginInit ();
  378. wizard.EndInit ();
  379. // Act
  380. WizardStep? result = wizard.GetPreviousStep ();
  381. // Assert
  382. Assert.Null (result);
  383. }
  384. #endregion GetPreviousStep Tests
  385. #region GoToStep Tests
  386. [Fact]
  387. public void GoToStep_Sets_CurrentStep ()
  388. {
  389. // Arrange
  390. Wizard wizard = new ();
  391. WizardStep step1 = new () { Title = "Step 1" };
  392. WizardStep step2 = new () { Title = "Step 2" };
  393. wizard.AddStep (step1);
  394. wizard.AddStep (step2);
  395. wizard.BeginInit ();
  396. wizard.EndInit ();
  397. // Act
  398. bool result = wizard.GoToStep (step2);
  399. // Assert
  400. Assert.True (result);
  401. Assert.Equal (step2, wizard.CurrentStep);
  402. }
  403. [Fact]
  404. public void GoToStep_Hides_Other_Steps ()
  405. {
  406. // Arrange
  407. Wizard wizard = new ();
  408. WizardStep step1 = new () { Title = "Step 1" };
  409. WizardStep step2 = new () { Title = "Step 2" };
  410. WizardStep step3 = new () { Title = "Step 3" };
  411. wizard.AddStep (step1);
  412. wizard.AddStep (step2);
  413. wizard.AddStep (step3);
  414. wizard.BeginInit ();
  415. wizard.EndInit ();
  416. // Act
  417. wizard.GoToStep (step2);
  418. // Assert
  419. Assert.False (step1.Visible);
  420. Assert.True (step2.Visible);
  421. Assert.False (step3.Visible);
  422. }
  423. [Fact]
  424. public void GoToStep_Raises_StepChanging_Event ()
  425. {
  426. // Arrange
  427. Wizard wizard = new ();
  428. WizardStep step1 = new () { Title = "Step 1" };
  429. WizardStep step2 = new () { Title = "Step 2" };
  430. wizard.AddStep (step1);
  431. wizard.AddStep (step2);
  432. wizard.BeginInit ();
  433. wizard.EndInit ();
  434. var eventRaised = false;
  435. WizardStep? oldStep = null;
  436. WizardStep? newStep = null;
  437. wizard.StepChanging += (sender, args) =>
  438. {
  439. eventRaised = true;
  440. oldStep = args.CurrentValue;
  441. newStep = args.NewValue;
  442. };
  443. // Act
  444. wizard.GoToStep (step2);
  445. // Assert
  446. Assert.True (eventRaised);
  447. Assert.Equal (step1, oldStep);
  448. Assert.Equal (step2, newStep);
  449. }
  450. [Fact]
  451. public void GoToStep_Raises_StepChanged_Event ()
  452. {
  453. // Arrange
  454. Wizard wizard = new ();
  455. WizardStep step1 = new () { Title = "Step 1" };
  456. WizardStep step2 = new () { Title = "Step 2" };
  457. wizard.AddStep (step1);
  458. wizard.AddStep (step2);
  459. var eventRaised = false;
  460. WizardStep? newStep = null;
  461. wizard.BeginInit ();
  462. wizard.EndInit ();
  463. // Subscribe after EndInit to avoid capturing the initial CurrentStep setting
  464. wizard.StepChanged += (sender, args) =>
  465. {
  466. eventRaised = true;
  467. newStep = args.NewValue;
  468. };
  469. // Act
  470. wizard.GoToStep (step2);
  471. // Assert
  472. Assert.True (eventRaised);
  473. Assert.Same (step2, newStep);
  474. }
  475. [Fact]
  476. public void GoToStep_Can_Be_Cancelled_Via_StepChanging_Event ()
  477. {
  478. // Arrange
  479. Wizard wizard = new ();
  480. WizardStep step1 = new () { Title = "Step 1" };
  481. WizardStep step2 = new () { Title = "Step 2" };
  482. wizard.AddStep (step1);
  483. wizard.AddStep (step2);
  484. wizard.BeginInit ();
  485. wizard.EndInit ();
  486. wizard.StepChanging += (sender, args) => { args.Handled = true; };
  487. // Act
  488. bool result = wizard.GoToStep (step2);
  489. // Assert
  490. Assert.False (result);
  491. Assert.Equal (step1, wizard.CurrentStep);
  492. }
  493. #endregion GoToStep Tests
  494. #region GoNext Tests
  495. [Fact]
  496. public void GoNext_Moves_To_Next_Step ()
  497. {
  498. // Arrange
  499. Wizard wizard = new ();
  500. WizardStep step1 = new () { Title = "Step 1" };
  501. WizardStep step2 = new () { Title = "Step 2" };
  502. wizard.AddStep (step1);
  503. wizard.AddStep (step2);
  504. wizard.BeginInit ();
  505. wizard.EndInit ();
  506. // Act
  507. bool result = wizard.GoNext ();
  508. // Assert
  509. Assert.True (result);
  510. Assert.Equal (step2, wizard.CurrentStep);
  511. }
  512. [Fact]
  513. public void GoNext_Returns_False_When_No_Next_Step ()
  514. {
  515. // Arrange
  516. Wizard wizard = new ();
  517. WizardStep step1 = new () { Title = "Step 1" };
  518. wizard.AddStep (step1);
  519. wizard.BeginInit ();
  520. wizard.EndInit ();
  521. // Act
  522. bool result = wizard.GoNext ();
  523. // Assert
  524. Assert.False (result);
  525. Assert.Equal (step1, wizard.CurrentStep);
  526. }
  527. [Fact]
  528. public void GoNext_Skips_Disabled_Steps ()
  529. {
  530. // Arrange
  531. Wizard wizard = new ();
  532. WizardStep step1 = new () { Title = "Step 1" };
  533. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  534. WizardStep step3 = new () { Title = "Step 3" };
  535. wizard.AddStep (step1);
  536. wizard.AddStep (step2);
  537. wizard.AddStep (step3);
  538. wizard.BeginInit ();
  539. wizard.EndInit ();
  540. // Act
  541. bool result = wizard.GoNext ();
  542. // Assert
  543. Assert.True (result);
  544. Assert.Equal (step3, wizard.CurrentStep);
  545. }
  546. #endregion GoNext Tests
  547. #region GoBack Tests
  548. [Fact]
  549. public void GoBack_Moves_To_Previous_Step ()
  550. {
  551. // Arrange
  552. Wizard wizard = new ();
  553. WizardStep step1 = new () { Title = "Step 1" };
  554. WizardStep step2 = new () { Title = "Step 2" };
  555. wizard.AddStep (step1);
  556. wizard.AddStep (step2);
  557. wizard.BeginInit ();
  558. wizard.EndInit ();
  559. wizard.CurrentStep = step2;
  560. // Act
  561. bool result = wizard.GoBack ();
  562. // Assert
  563. Assert.True (result);
  564. Assert.Equal (step1, wizard.CurrentStep);
  565. }
  566. [Fact]
  567. public void GoBack_Returns_False_When_No_Previous_Step ()
  568. {
  569. // Arrange
  570. Wizard wizard = new ();
  571. WizardStep step1 = new () { Title = "Step 1" };
  572. wizard.AddStep (step1);
  573. wizard.BeginInit ();
  574. wizard.EndInit ();
  575. // Act
  576. bool result = wizard.GoBack ();
  577. // Assert
  578. Assert.False (result);
  579. Assert.Equal (step1, wizard.CurrentStep);
  580. }
  581. [Fact]
  582. public void GoBack_Skips_Disabled_Steps ()
  583. {
  584. // Arrange
  585. Wizard wizard = new ();
  586. WizardStep step1 = new () { Title = "Step 1" };
  587. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  588. WizardStep step3 = new () { Title = "Step 3" };
  589. wizard.AddStep (step1);
  590. wizard.AddStep (step2);
  591. wizard.AddStep (step3);
  592. wizard.BeginInit ();
  593. wizard.EndInit ();
  594. wizard.CurrentStep = step3;
  595. // Act
  596. bool result = wizard.GoBack ();
  597. // Assert
  598. Assert.True (result);
  599. Assert.Equal (step1, wizard.CurrentStep);
  600. }
  601. #endregion GoBack Tests
  602. #region CurrentStep Tests
  603. [Fact]
  604. public void CurrentStep_Setter_Calls_GoToStep ()
  605. {
  606. // Arrange
  607. Wizard wizard = new ();
  608. WizardStep step1 = new () { Title = "Step 1" };
  609. WizardStep step2 = new () { Title = "Step 2" };
  610. wizard.AddStep (step1);
  611. wizard.AddStep (step2);
  612. wizard.BeginInit ();
  613. wizard.EndInit ();
  614. // Act
  615. wizard.CurrentStep = step2;
  616. // Assert
  617. Assert.Equal (step2, wizard.CurrentStep);
  618. }
  619. [Fact]
  620. public void CurrentStep_Can_Be_Set_To_Null ()
  621. {
  622. // Arrange
  623. Wizard wizard = new ();
  624. WizardStep step1 = new () { Title = "Step 1" };
  625. wizard.AddStep (step1);
  626. wizard.BeginInit ();
  627. wizard.EndInit ();
  628. // Act
  629. wizard.CurrentStep = null;
  630. // Assert
  631. Assert.Null (wizard.CurrentStep);
  632. }
  633. #endregion CurrentStep Tests
  634. #region Title Tests
  635. [Fact]
  636. public void Title_Updates_With_Wizard_And_Step_Title ()
  637. {
  638. // Arrange
  639. Wizard wizard = new () { Title = "Setup" };
  640. WizardStep step1 = new () { Title = "Step 1" };
  641. wizard.AddStep (step1);
  642. wizard.BeginInit ();
  643. wizard.EndInit ();
  644. // Act & Assert
  645. Assert.Contains ("Setup", wizard.Title);
  646. Assert.Contains ("Step 1", wizard.Title);
  647. }
  648. [Fact]
  649. public void Title_Updates_When_Step_Changes ()
  650. {
  651. // Arrange
  652. Wizard wizard = new () { Title = "Setup" };
  653. WizardStep step1 = new () { Title = "Step 1" };
  654. WizardStep step2 = new () { Title = "Step 2" };
  655. wizard.AddStep (step1);
  656. wizard.AddStep (step2);
  657. wizard.BeginInit ();
  658. wizard.EndInit ();
  659. // Act
  660. wizard.GoNext ();
  661. // Assert
  662. Assert.Contains ("Step 2", wizard.Title);
  663. Assert.DoesNotContain ("Step 1", wizard.Title);
  664. }
  665. #endregion Title Tests
  666. #region Button Visibility Tests
  667. [Fact]
  668. public void BackButton_Not_Visible_On_First_Step ()
  669. {
  670. // Arrange
  671. Wizard wizard = new ();
  672. WizardStep step1 = new () { Title = "Step 1" };
  673. WizardStep step2 = new () { Title = "Step 2" };
  674. wizard.AddStep (step1);
  675. wizard.AddStep (step2);
  676. wizard.BeginInit ();
  677. wizard.EndInit ();
  678. // Act & Assert
  679. Assert.False (wizard.BackButton.Visible);
  680. }
  681. [Fact]
  682. public void BackButton_Visible_On_Non_First_Steps ()
  683. {
  684. // Arrange
  685. Wizard wizard = new ();
  686. WizardStep step1 = new () { Title = "Step 1" };
  687. WizardStep step2 = new () { Title = "Step 2" };
  688. wizard.AddStep (step1);
  689. wizard.AddStep (step2);
  690. wizard.BeginInit ();
  691. wizard.EndInit ();
  692. // Act
  693. wizard.GoNext ();
  694. // Assert
  695. Assert.True (wizard.BackButton.Visible);
  696. }
  697. [Fact]
  698. public void NextFinishButton_Shows_Next_On_Non_Last_Steps ()
  699. {
  700. // Arrange
  701. Wizard wizard = new ();
  702. WizardStep step1 = new () { Title = "Step 1" };
  703. WizardStep step2 = new () { Title = "Step 2" };
  704. wizard.AddStep (step1);
  705. wizard.AddStep (step2);
  706. wizard.BeginInit ();
  707. wizard.EndInit ();
  708. // Act & Assert
  709. Assert.Equal (Strings.wzNext, wizard.NextFinishButton.Text);
  710. }
  711. [Fact]
  712. public void NextFinishButton_Shows_Finish_On_Last_Step ()
  713. {
  714. // Arrange
  715. Wizard wizard = new ();
  716. WizardStep step1 = new () { Title = "Step 1" };
  717. WizardStep step2 = new () { Title = "Step 2" };
  718. wizard.AddStep (step1);
  719. wizard.AddStep (step2);
  720. wizard.BeginInit ();
  721. wizard.EndInit ();
  722. // Act
  723. wizard.GoNext ();
  724. // Assert
  725. Assert.Equal (Strings.wzFinish, wizard.NextFinishButton.Text);
  726. }
  727. #endregion Button Visibility Tests
  728. #region Custom Button Text Tests
  729. [Fact]
  730. public void BackButton_Uses_Custom_Text_From_Step ()
  731. {
  732. // Arrange
  733. Wizard wizard = new ();
  734. WizardStep step1 = new () { Title = "Step 1" };
  735. WizardStep step2 = new () { Title = "Step 2", BackButtonText = "Go Back" };
  736. wizard.AddStep (step1);
  737. wizard.AddStep (step2);
  738. wizard.BeginInit ();
  739. wizard.EndInit ();
  740. // Act
  741. wizard.GoNext ();
  742. // Assert
  743. Assert.Equal ("Go Back", wizard.BackButton.Text);
  744. }
  745. [Fact]
  746. public void NextFinishButton_Uses_Custom_Text_From_Step ()
  747. {
  748. // Arrange
  749. Wizard wizard = new ();
  750. WizardStep step1 = new () { Title = "Step 1", NextButtonText = "Proceed" };
  751. wizard.AddStep (step1);
  752. wizard.BeginInit ();
  753. wizard.EndInit ();
  754. // Act & Assert
  755. Assert.Equal ("Proceed", wizard.NextFinishButton.Text);
  756. }
  757. #endregion Custom Button Text Tests
  758. #region Event Tests
  759. [Fact]
  760. public void MovingNext_Event_Raised_When_Next_Button_Clicked ()
  761. {
  762. // Arrange
  763. Wizard wizard = new ();
  764. WizardStep step1 = new () { Title = "Step 1" };
  765. WizardStep step2 = new () { Title = "Step 2" };
  766. wizard.AddStep (step1);
  767. wizard.AddStep (step2);
  768. wizard.BeginInit ();
  769. wizard.EndInit ();
  770. var eventRaised = false;
  771. wizard.MovingNext += (sender, args) => { eventRaised = true; };
  772. // Act
  773. wizard.NextFinishButton.InvokeCommand (Command.Accept);
  774. // Assert
  775. Assert.True (eventRaised);
  776. }
  777. [Fact]
  778. public void MovingBack_Event_Raised_When_Back_Button_Clicked ()
  779. {
  780. // Arrange
  781. Wizard wizard = new ();
  782. WizardStep step1 = new () { Title = "Step 1" };
  783. WizardStep step2 = new () { Title = "Step 2" };
  784. wizard.AddStep (step1);
  785. wizard.AddStep (step2);
  786. wizard.BeginInit ();
  787. wizard.EndInit ();
  788. wizard.GoNext ();
  789. var eventRaised = false;
  790. wizard.MovingBack += (sender, args) => { eventRaised = true; };
  791. // Act
  792. wizard.BackButton.InvokeCommand (Command.Accept);
  793. // Assert
  794. Assert.True (eventRaised);
  795. }
  796. #endregion Event Tests
  797. #region Enabled State Tests
  798. [Fact]
  799. public void Disabling_Step_Updates_Navigation ()
  800. {
  801. // Arrange
  802. Wizard wizard = new ();
  803. WizardStep step1 = new () { Title = "Step 1" };
  804. WizardStep step2 = new () { Title = "Step 2" };
  805. WizardStep step3 = new () { Title = "Step 3" };
  806. wizard.AddStep (step1);
  807. wizard.AddStep (step2);
  808. wizard.AddStep (step3);
  809. wizard.BeginInit ();
  810. wizard.EndInit ();
  811. // Act - Disable middle step
  812. step2.Enabled = false;
  813. // Assert - GetNextStep from step1 should skip to step3
  814. WizardStep? nextStep = wizard.GetNextStep ();
  815. Assert.Equal (step3, nextStep);
  816. }
  817. [Fact]
  818. public void Enabling_Step_Updates_Navigation ()
  819. {
  820. // Arrange
  821. Wizard wizard = new ();
  822. WizardStep step1 = new () { Title = "Step 1" };
  823. WizardStep step2 = new () { Title = "Step 2", Enabled = false };
  824. WizardStep step3 = new () { Title = "Step 3" };
  825. wizard.AddStep (step1);
  826. wizard.AddStep (step2);
  827. wizard.AddStep (step3);
  828. wizard.BeginInit ();
  829. wizard.EndInit ();
  830. // Act - Enable middle step
  831. step2.Enabled = true;
  832. // Assert - GetNextStep from step1 should now return step2
  833. WizardStep? nextStep = wizard.GetNextStep ();
  834. Assert.Equal (step2, nextStep);
  835. }
  836. #endregion Enabled State Tests
  837. }