PageRenderTime 184ms CodeModel.GetById 15ms RepoModel.GetById 2ms app.codeStats 0ms

/test/System.Web.Mvc.Test/Test/ViewEngineCollectionTest.cs

https://bitbucket.org/mdavid/aspnetwebstack
C# | 631 lines | 455 code | 88 blank | 88 comment | 0 complexity | b651b24ba98c784709ec394bd482bca4 MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Moq;
  4. using Xunit;
  5. using Assert = Microsoft.TestCommon.AssertEx;
  6. namespace System.Web.Mvc.Test
  7. {
  8. public class ViewEngineCollectionTest
  9. {
  10. [Fact]
  11. public void ListWrappingConstructor()
  12. {
  13. // Arrange
  14. List<IViewEngine> list = new List<IViewEngine>() { new Mock<IViewEngine>().Object, new Mock<IViewEngine>().Object };
  15. // Act
  16. ViewEngineCollection collection = new ViewEngineCollection(list);
  17. // Assert
  18. Assert.Equal(2, collection.Count);
  19. Assert.Same(list[0], collection[0]);
  20. Assert.Same(list[1], collection[1]);
  21. }
  22. [Fact]
  23. public void ListWrappingConstructorThrowsIfListIsNull()
  24. {
  25. // Act & Assert
  26. Assert.ThrowsArgumentNull(
  27. delegate { new ViewEngineCollection((IList<IViewEngine>)null); },
  28. "list");
  29. }
  30. [Fact]
  31. public void DefaultConstructor()
  32. {
  33. // Act
  34. ViewEngineCollection collection = new ViewEngineCollection();
  35. // Assert
  36. Assert.Empty(collection);
  37. }
  38. [Fact]
  39. public void AddNullViewEngineThrows()
  40. {
  41. // Arrange
  42. ViewEngineCollection collection = new ViewEngineCollection();
  43. // Act & Assert
  44. Assert.ThrowsArgumentNull(
  45. delegate { collection.Add(null); },
  46. "item");
  47. }
  48. [Fact]
  49. public void SetNullViewEngineThrows()
  50. {
  51. // Arrange
  52. ViewEngineCollection collection = new ViewEngineCollection();
  53. collection.Add(new Mock<IViewEngine>().Object);
  54. // Act & Assert
  55. Assert.ThrowsArgumentNull(
  56. delegate { collection[0] = null; },
  57. "item");
  58. }
  59. [Fact]
  60. public void FindPartialViewAggregatesAllSearchedLocationsIfAllEnginesFail()
  61. {
  62. // Arrange
  63. ControllerContext context = new Mock<ControllerContext>().Object;
  64. ViewEngineCollection viewEngineCollection = new ViewEngineCollection();
  65. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  66. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "location1", "location2" });
  67. engine1.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine1Result);
  68. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  69. ViewEngineResult engine2Result = new ViewEngineResult(new[] { "location3", "location4" });
  70. engine2.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine2Result);
  71. viewEngineCollection.Add(engine1.Object);
  72. viewEngineCollection.Add(engine2.Object);
  73. // Act
  74. ViewEngineResult result = viewEngineCollection.FindPartialView(context, "partial");
  75. // Assert
  76. Assert.Null(result.View);
  77. Assert.Equal(4, result.SearchedLocations.Count());
  78. Assert.True(result.SearchedLocations.Contains("location1"));
  79. Assert.True(result.SearchedLocations.Contains("location2"));
  80. Assert.True(result.SearchedLocations.Contains("location3"));
  81. Assert.True(result.SearchedLocations.Contains("location4"));
  82. }
  83. [Fact]
  84. public void FindPartialViewFailureWithOneEngine()
  85. {
  86. // Arrange
  87. ControllerContext context = new Mock<ControllerContext>().Object;
  88. ViewEngineCollection collection = new ViewEngineCollection();
  89. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  90. ViewEngineResult engineResult = new ViewEngineResult(new[] { "location1", "location2" });
  91. engine.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engineResult);
  92. collection.Add(engine.Object);
  93. // Act
  94. ViewEngineResult result = collection.FindPartialView(context, "partial");
  95. // Assert
  96. Assert.Null(result.View);
  97. Assert.Equal(2, result.SearchedLocations.Count());
  98. Assert.True(result.SearchedLocations.Contains("location1"));
  99. Assert.True(result.SearchedLocations.Contains("location2"));
  100. }
  101. [Fact]
  102. public void FindPartialViewLooksAtCacheFirst()
  103. {
  104. // Arrange
  105. ControllerContext context = new Mock<ControllerContext>().Object;
  106. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  107. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  108. engine.Setup(e => e.FindPartialView(context, "partial", true)).Returns(engineResult);
  109. ViewEngineCollection collection = new ViewEngineCollection()
  110. {
  111. engine.Object,
  112. };
  113. // Act
  114. ViewEngineResult result = collection.FindPartialView(context, "partial");
  115. // Assert
  116. Assert.Same(engineResult, result);
  117. engine.Verify(e => e.FindPartialView(context, "partial", true), Times.Once());
  118. engine.Verify(e => e.FindPartialView(context, "partial", false), Times.Never());
  119. }
  120. [Fact]
  121. public void FindPartialViewLooksAtLocatorIfCacheEmpty()
  122. {
  123. // Arrange
  124. ControllerContext context = new Mock<ControllerContext>().Object;
  125. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  126. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  127. engine.Setup(e => e.FindPartialView(context, "partial", true)).Returns(new ViewEngineResult(new[] { "path" }));
  128. engine.Setup(e => e.FindPartialView(context, "partial", false)).Returns(engineResult);
  129. ViewEngineCollection collection = new ViewEngineCollection()
  130. {
  131. engine.Object,
  132. };
  133. // Act
  134. ViewEngineResult result = collection.FindPartialView(context, "partial");
  135. // Assert
  136. Assert.Same(engineResult, result);
  137. engine.Verify(e => e.FindPartialView(context, "partial", true), Times.Once());
  138. engine.Verify(e => e.FindPartialView(context, "partial", false), Times.Once());
  139. }
  140. [Fact]
  141. public void FindPartialViewIgnoresSearchLocationsFromCache()
  142. {
  143. // Arrange
  144. ControllerContext context = new Mock<ControllerContext>().Object;
  145. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  146. engine.Setup(e => e.FindPartialView(context, "partial", true)).Returns(new ViewEngineResult(new[] { "cachePath" }));
  147. engine.Setup(e => e.FindPartialView(context, "partial", false)).Returns(new ViewEngineResult(new[] { "locatorPath" }));
  148. ViewEngineCollection collection = new ViewEngineCollection()
  149. {
  150. engine.Object,
  151. };
  152. // Act
  153. ViewEngineResult result = collection.FindPartialView(context, "partial");
  154. // Assert
  155. string searchedLocation = Assert.Single(result.SearchedLocations);
  156. Assert.Equal("locatorPath", searchedLocation);
  157. engine.Verify(e => e.FindPartialView(context, "partial", true), Times.Once());
  158. engine.Verify(e => e.FindPartialView(context, "partial", false), Times.Once());
  159. }
  160. [Fact]
  161. public void FindPartialViewIteratesThroughCollectionUntilFindsSuccessfulEngine()
  162. {
  163. // Arrange
  164. ControllerContext context = new Mock<ControllerContext>().Object;
  165. ViewEngineCollection collection = new ViewEngineCollection();
  166. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  167. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "location1", "location2" });
  168. engine1.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine1Result);
  169. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  170. ViewEngineResult engine2Result = new ViewEngineResult(new Mock<IView>().Object, engine2.Object);
  171. engine2.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine2Result);
  172. collection.Add(engine1.Object);
  173. collection.Add(engine2.Object);
  174. // Act
  175. ViewEngineResult result = collection.FindPartialView(context, "partial");
  176. // Assert
  177. Assert.Same(engine2Result, result);
  178. }
  179. [Fact]
  180. public void FindPartialViewRemovesDuplicateSearchedLocationsFromMultipleEngines()
  181. {
  182. // Arrange
  183. ControllerContext context = new Mock<ControllerContext>().Object;
  184. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  185. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "repeatLocation", "location1" });
  186. engine1.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine1Result);
  187. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  188. ViewEngineResult engine2Result = new ViewEngineResult(new[] { "location2", "repeatLocation" });
  189. engine2.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine2Result);
  190. ViewEngineCollection viewEngineCollection = new ViewEngineCollection()
  191. {
  192. engine1.Object,
  193. engine2.Object,
  194. };
  195. // Act
  196. ViewEngineResult result = viewEngineCollection.FindPartialView(context, "partial");
  197. // Assert
  198. var expectedLocations = new[] { "repeatLocation", "location1", "location2" };
  199. Assert.Null(result.View);
  200. Assert.Equal(expectedLocations, result.SearchedLocations.ToArray());
  201. }
  202. [Fact]
  203. public void FindPartialViewReturnsNoViewAndEmptySearchedLocationsIfCollectionEmpty()
  204. {
  205. // Arrange
  206. ControllerContext context = new Mock<ControllerContext>().Object;
  207. ViewEngineCollection collection = new ViewEngineCollection();
  208. // Act
  209. ViewEngineResult result = collection.FindPartialView(context, "partial");
  210. // Assert
  211. Assert.Null(result.View);
  212. Assert.Empty(result.SearchedLocations);
  213. }
  214. [Fact]
  215. public void FindPartialViewReturnsValueFromFirstSuccessfulEngine()
  216. {
  217. // Arrange
  218. ControllerContext context = new Mock<ControllerContext>().Object;
  219. ViewEngineCollection collection = new ViewEngineCollection();
  220. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  221. ViewEngineResult engine1Result = new ViewEngineResult(new Mock<IView>().Object, engine1.Object);
  222. engine1.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine1Result);
  223. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  224. ViewEngineResult engine2Result = new ViewEngineResult(new Mock<IView>().Object, engine2.Object);
  225. engine2.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engine2Result);
  226. collection.Add(engine1.Object);
  227. collection.Add(engine2.Object);
  228. // Act
  229. ViewEngineResult result = collection.FindPartialView(context, "partial");
  230. // Assert
  231. Assert.Same(engine1Result, result);
  232. }
  233. [Fact]
  234. public void FindPartialViewSuccessWithOneEngine()
  235. {
  236. // Arrange
  237. ControllerContext context = new Mock<ControllerContext>().Object;
  238. ViewEngineCollection collection = new ViewEngineCollection();
  239. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  240. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  241. engine.Setup(e => e.FindPartialView(context, "partial", It.IsAny<bool>())).Returns(engineResult);
  242. collection.Add(engine.Object);
  243. // Act
  244. ViewEngineResult result = collection.FindPartialView(context, "partial");
  245. // Assert
  246. Assert.Same(engineResult, result);
  247. }
  248. [Fact]
  249. public void FindPartialViewThrowsIfPartialViewNameIsEmpty()
  250. {
  251. // Arrange
  252. ControllerContext context = new Mock<ControllerContext>().Object;
  253. ViewEngineCollection collection = new ViewEngineCollection();
  254. // Act & Assert
  255. Assert.ThrowsArgumentNullOrEmpty(
  256. () => collection.FindPartialView(context, ""),
  257. "partialViewName");
  258. }
  259. [Fact]
  260. public void FindPartialViewThrowsIfPartialViewNameIsNull()
  261. {
  262. // Arrange
  263. ControllerContext context = new Mock<ControllerContext>().Object;
  264. ViewEngineCollection collection = new ViewEngineCollection();
  265. // Act & Assert
  266. Assert.ThrowsArgumentNullOrEmpty(
  267. () => collection.FindPartialView(context, null),
  268. "partialViewName");
  269. }
  270. [Fact]
  271. public void FindPartialViewThrowsIfControllerContextIsNull()
  272. {
  273. // Arrange
  274. ViewEngineCollection collection = new ViewEngineCollection();
  275. // Act & Assert
  276. Assert.ThrowsArgumentNull(
  277. () => collection.FindPartialView(null, "partial"),
  278. "controllerContext");
  279. }
  280. [Fact]
  281. public void FindViewAggregatesAllSearchedLocationsIfAllEnginesFail()
  282. {
  283. // Arrange
  284. ControllerContext context = new Mock<ControllerContext>().Object;
  285. ViewEngineCollection collection = new ViewEngineCollection();
  286. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  287. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "location1", "location2" });
  288. engine1.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine1Result);
  289. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  290. ViewEngineResult engine2Result = new ViewEngineResult(new[] { "location3", "location4" });
  291. engine2.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine2Result);
  292. collection.Add(engine1.Object);
  293. collection.Add(engine2.Object);
  294. // Act
  295. ViewEngineResult result = collection.FindView(context, "view", "master");
  296. // Assert
  297. Assert.Null(result.View);
  298. Assert.Equal(4, result.SearchedLocations.Count());
  299. Assert.True(result.SearchedLocations.Contains("location1"));
  300. Assert.True(result.SearchedLocations.Contains("location2"));
  301. Assert.True(result.SearchedLocations.Contains("location3"));
  302. Assert.True(result.SearchedLocations.Contains("location4"));
  303. }
  304. [Fact]
  305. public void FindViewFailureWithOneEngine()
  306. {
  307. // Arrange
  308. ControllerContext context = new Mock<ControllerContext>().Object;
  309. ViewEngineCollection collection = new ViewEngineCollection();
  310. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  311. ViewEngineResult engineResult = new ViewEngineResult(new[] { "location1", "location2" });
  312. engine.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engineResult);
  313. collection.Add(engine.Object);
  314. // Act
  315. ViewEngineResult result = collection.FindView(context, "view", "master");
  316. // Assert
  317. Assert.Null(result.View);
  318. Assert.Equal(2, result.SearchedLocations.Count());
  319. Assert.True(result.SearchedLocations.Contains("location1"));
  320. Assert.True(result.SearchedLocations.Contains("location2"));
  321. }
  322. [Fact]
  323. public void FindViewLooksAtCacheFirst()
  324. {
  325. // Arrange
  326. ControllerContext context = new Mock<ControllerContext>().Object;
  327. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  328. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  329. engine.Setup(e => e.FindView(context, "view", "master", true)).Returns(engineResult);
  330. ViewEngineCollection collection = new ViewEngineCollection()
  331. {
  332. engine.Object,
  333. };
  334. // Act
  335. ViewEngineResult result = collection.FindView(context, "view", "master");
  336. // Assert
  337. Assert.Same(engineResult, result);
  338. engine.Verify(e => e.FindView(context, "view", "master", true), Times.Once());
  339. engine.Verify(e => e.FindView(context, "view", "master", false), Times.Never());
  340. }
  341. [Fact]
  342. public void FindViewLooksAtLocatorIfCacheEmpty()
  343. {
  344. // Arrange
  345. ControllerContext context = new Mock<ControllerContext>().Object;
  346. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  347. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  348. engine.Setup(e => e.FindView(context, "view", "master", true)).Returns(new ViewEngineResult(new[] { "path" }));
  349. engine.Setup(e => e.FindView(context, "view", "master", false)).Returns(engineResult);
  350. ViewEngineCollection collection = new ViewEngineCollection()
  351. {
  352. engine.Object,
  353. };
  354. // Act
  355. ViewEngineResult result = collection.FindView(context, "view", "master");
  356. // Assert
  357. Assert.Same(engineResult, result);
  358. engine.Verify(e => e.FindView(context, "view", "master", true), Times.Once());
  359. engine.Verify(e => e.FindView(context, "view", "master", false), Times.Once());
  360. }
  361. [Fact]
  362. public void FindViewIgnoresSearchLocationsFromCache()
  363. {
  364. // Arrange
  365. ControllerContext context = new Mock<ControllerContext>().Object;
  366. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  367. engine.Setup(e => e.FindView(context, "view", "master", true)).Returns(new ViewEngineResult(new[] { "cachePath" }));
  368. engine.Setup(e => e.FindView(context, "view", "master", false)).Returns(new ViewEngineResult(new[] { "locatorPath" }));
  369. ViewEngineCollection collection = new ViewEngineCollection()
  370. {
  371. engine.Object,
  372. };
  373. // Act
  374. ViewEngineResult result = collection.FindView(context, "view", "master");
  375. // Assert
  376. string searchedLocation = Assert.Single(result.SearchedLocations);
  377. Assert.Equal("locatorPath", searchedLocation);
  378. engine.Verify(e => e.FindView(context, "view", "master", true), Times.Once());
  379. engine.Verify(e => e.FindView(context, "view", "master", false), Times.Once());
  380. }
  381. [Fact]
  382. public void FindViewIteratesThroughCollectionUntilFindsSuccessfulEngine()
  383. {
  384. // Arrange
  385. ControllerContext context = new Mock<ControllerContext>().Object;
  386. ViewEngineCollection collection = new ViewEngineCollection();
  387. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  388. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "location1", "location2" });
  389. engine1.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine1Result);
  390. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  391. ViewEngineResult engine2Result = new ViewEngineResult(new Mock<IView>().Object, engine2.Object);
  392. engine2.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine2Result);
  393. collection.Add(engine1.Object);
  394. collection.Add(engine2.Object);
  395. // Act
  396. ViewEngineResult result = collection.FindView(context, "view", "master");
  397. // Assert
  398. Assert.Same(engine2Result, result);
  399. }
  400. [Fact]
  401. public void FindViewRemovesDuplicateSearchedLocationsFromMultipleEngines()
  402. {
  403. // Arrange
  404. ControllerContext context = new Mock<ControllerContext>().Object;
  405. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  406. ViewEngineResult engine1Result = new ViewEngineResult(new[] { "repeatLocation", "location1" });
  407. engine1.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine1Result);
  408. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  409. ViewEngineResult engine2Result = new ViewEngineResult(new[] { "location2", "repeatLocation" });
  410. engine2.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine2Result);
  411. ViewEngineCollection collection = new ViewEngineCollection()
  412. {
  413. engine1.Object,
  414. engine2.Object,
  415. };
  416. // Act
  417. ViewEngineResult result = collection.FindView(context, "view", "master");
  418. // Assert
  419. Assert.Null(result.View);
  420. var expectedLocations = new[] { "repeatLocation", "location1", "location2" };
  421. Assert.Equal(expectedLocations, result.SearchedLocations.ToArray());
  422. }
  423. [Fact]
  424. public void FindViewReturnsNoViewAndEmptySearchedLocationsIfCollectionEmpty()
  425. {
  426. // Arrange
  427. ControllerContext context = new Mock<ControllerContext>().Object;
  428. ViewEngineCollection collection = new ViewEngineCollection();
  429. // Act
  430. ViewEngineResult result = collection.FindView(context, "view", null);
  431. // Assert
  432. Assert.Null(result.View);
  433. Assert.Empty(result.SearchedLocations);
  434. }
  435. [Fact]
  436. public void FindViewReturnsValueFromFirstSuccessfulEngine()
  437. {
  438. // Arrange
  439. ControllerContext context = new Mock<ControllerContext>().Object;
  440. ViewEngineCollection collection = new ViewEngineCollection();
  441. Mock<IViewEngine> engine1 = new Mock<IViewEngine>();
  442. ViewEngineResult engine1Result = new ViewEngineResult(new Mock<IView>().Object, engine1.Object);
  443. engine1.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine1Result);
  444. Mock<IViewEngine> engine2 = new Mock<IViewEngine>();
  445. ViewEngineResult engine2Result = new ViewEngineResult(new Mock<IView>().Object, engine2.Object);
  446. engine2.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engine2Result);
  447. collection.Add(engine1.Object);
  448. collection.Add(engine2.Object);
  449. // Act
  450. ViewEngineResult result = collection.FindView(context, "view", "master");
  451. // Assert
  452. Assert.Same(engine1Result, result);
  453. }
  454. [Fact]
  455. public void FindViewSuccessWithOneEngine()
  456. {
  457. // Arrange
  458. ControllerContext context = new Mock<ControllerContext>().Object;
  459. ViewEngineCollection collection = new ViewEngineCollection();
  460. Mock<IViewEngine> engine = new Mock<IViewEngine>();
  461. ViewEngineResult engineResult = new ViewEngineResult(new Mock<IView>().Object, engine.Object);
  462. engine.Setup(e => e.FindView(context, "view", "master", It.IsAny<bool>())).Returns(engineResult);
  463. collection.Add(engine.Object);
  464. // Act
  465. ViewEngineResult result = collection.FindView(context, "view", "master");
  466. // Assert
  467. Assert.Same(engineResult, result);
  468. }
  469. [Fact]
  470. public void FindViewThrowsIfControllerContextIsNull()
  471. {
  472. // Arrange
  473. ViewEngineCollection collection = new ViewEngineCollection();
  474. // Act & Assert
  475. Assert.ThrowsArgumentNull(
  476. () => collection.FindView(null, "view", null),
  477. "controllerContext"
  478. );
  479. }
  480. [Fact]
  481. public void FindViewThrowsIfViewNameIsEmpty()
  482. {
  483. // Arrange
  484. ControllerContext context = new Mock<ControllerContext>().Object;
  485. ViewEngineCollection collection = new ViewEngineCollection();
  486. // Act & Assert
  487. Assert.ThrowsArgumentNullOrEmpty(
  488. () => collection.FindView(context, "", null),
  489. "viewName"
  490. );
  491. }
  492. [Fact]
  493. public void FindViewThrowsIfViewNameIsNull()
  494. {
  495. // Arrange
  496. ControllerContext context = new Mock<ControllerContext>().Object;
  497. ViewEngineCollection collection = new ViewEngineCollection();
  498. // Act & Assert
  499. Assert.ThrowsArgumentNullOrEmpty(
  500. () => collection.FindView(context, null, null),
  501. "viewName"
  502. );
  503. }
  504. [Fact]
  505. public void FindViewDelegatesToResolver()
  506. {
  507. // Arrange
  508. Mock<IView> view = new Mock<IView>();
  509. ControllerContext context = new ControllerContext();
  510. Mock<IViewEngine> locatedEngine = new Mock<IViewEngine>();
  511. ViewEngineResult engineResult = new ViewEngineResult(view.Object, locatedEngine.Object);
  512. locatedEngine.Setup(e => e.FindView(context, "ViewName", "MasterName", true))
  513. .Returns(engineResult);
  514. Mock<IViewEngine> secondEngine = new Mock<IViewEngine>();
  515. Resolver<IEnumerable<IViewEngine>> resolver = new Resolver<IEnumerable<IViewEngine>> { Current = new IViewEngine[] { locatedEngine.Object, secondEngine.Object } };
  516. ViewEngineCollection engines = new ViewEngineCollection(resolver);
  517. // Act
  518. ViewEngineResult result = engines.FindView(context, "ViewName", "MasterName");
  519. // Assert
  520. Assert.Same(engineResult, result);
  521. secondEngine.Verify(e => e.FindView(context, "ViewName", "MasterName", It.IsAny<bool>()), Times.Never());
  522. }
  523. [Fact]
  524. public void FindPartialViewDelegatesToResolver()
  525. {
  526. // Arrange
  527. Mock<IView> view = new Mock<IView>();
  528. ControllerContext context = new ControllerContext();
  529. Mock<IViewEngine> locatedEngine = new Mock<IViewEngine>();
  530. ViewEngineResult engineResult = new ViewEngineResult(view.Object, locatedEngine.Object);
  531. locatedEngine.Setup(e => e.FindPartialView(context, "ViewName", true))
  532. .Returns(engineResult);
  533. Mock<IViewEngine> secondEngine = new Mock<IViewEngine>();
  534. Resolver<IEnumerable<IViewEngine>> resolver = new Resolver<IEnumerable<IViewEngine>> { Current = new IViewEngine[] { locatedEngine.Object, secondEngine.Object } };
  535. ViewEngineCollection engines = new ViewEngineCollection(resolver);
  536. // Act
  537. ViewEngineResult result = engines.FindPartialView(context, "ViewName");
  538. // Assert
  539. Assert.Same(engineResult, result);
  540. secondEngine.Verify(e => e.FindPartialView(context, "ViewName", It.IsAny<bool>()), Times.Never());
  541. }
  542. }
  543. }