/test/System.Web.WebPages.Test/WebPage/DisplayModeProviderTest.cs

https://bitbucket.org/mdavid/aspnetwebstack
C# | 229 lines | 161 code | 45 blank | 23 comment | 0 complexity | 6e68c919428882afa8d314455a7bb05e MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Moq;
  4. using Xunit;
  5. namespace System.Web.WebPages.Test
  6. {
  7. public class DisplayModesTest
  8. {
  9. [Fact]
  10. public void DefaultInstanceHasDefaultModes()
  11. {
  12. // Act
  13. IList<IDisplayMode> displayModes = DisplayModeProvider.Instance.Modes;
  14. // Assert
  15. Assert.Equal(2, displayModes.Count);
  16. Assert.IsType<DefaultDisplayMode>(displayModes[0]);
  17. Assert.Equal(displayModes[0].DisplayModeId, DisplayModeProvider.MobileDisplayModeId);
  18. Assert.IsType<DefaultDisplayMode>(displayModes[1]);
  19. Assert.Equal(displayModes[1].DisplayModeId, DisplayModeProvider.DefaultDisplayModeId);
  20. }
  21. [Fact]
  22. public void GetDisplayInfoForVirtualPathReturnsDisplayInfoFromFirstDisplayModeToHandleRequest()
  23. {
  24. // Arrange
  25. var displayModeProvider = new DisplayModeProvider();
  26. displayModeProvider.Modes.Clear();
  27. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  28. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  29. displayModeProvider.Modes.Add(displayMode1.Object);
  30. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  31. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  32. displayModeProvider.Modes.Add(displayMode2.Object);
  33. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  34. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  35. displayModeProvider.Modes.Add(displayMode3.Object);
  36. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  37. var expected = new DisplayInfo("Foo", displayMode3.Object);
  38. Func<string, bool> fileExists = path => true;
  39. displayMode3.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(expected);
  40. // Act
  41. DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: null);
  42. // Assert
  43. Assert.Same(expected, result);
  44. }
  45. [Fact]
  46. public void GetDisplayInfoForVirtualPathWithConsistentDisplayModeBeginsSearchAtCurrentDisplayMode()
  47. {
  48. // Arrange
  49. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  50. var displayModeProvider = new DisplayModeProvider();
  51. displayModeProvider.Modes.Clear();
  52. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  53. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  54. displayModeProvider.Modes.Add(displayMode1.Object);
  55. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  56. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  57. displayModeProvider.Modes.Add(displayMode2.Object);
  58. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  59. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  60. displayModeProvider.Modes.Add(displayMode3.Object);
  61. var displayInfo = new DisplayInfo("Foo", displayMode3.Object);
  62. Func<string, bool> fileExists = path => true;
  63. displayMode3.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(displayInfo);
  64. // Act
  65. DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: displayMode2.Object,
  66. requireConsistentDisplayMode: true);
  67. // Assert
  68. Assert.Same(displayInfo, result);
  69. }
  70. [Fact]
  71. public void GetDisplayInfoForVirtualPathWithoutConsistentDisplayModeIgnoresCurrentDisplayMode()
  72. {
  73. // Arrange
  74. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  75. var displayModeProvider = new DisplayModeProvider();
  76. displayModeProvider.Modes.Clear();
  77. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  78. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  79. displayModeProvider.Modes.Add(displayMode1.Object);
  80. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  81. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  82. displayModeProvider.Modes.Add(displayMode2.Object);
  83. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  84. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  85. displayModeProvider.Modes.Add(displayMode3.Object);
  86. var displayInfo = new DisplayInfo("Foo", displayMode3.Object);
  87. Func<string, bool> fileExists = path => true;
  88. displayMode1.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(displayInfo);
  89. // Act
  90. DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: displayMode1.Object,
  91. requireConsistentDisplayMode: false);
  92. // Assert
  93. Assert.Same(displayInfo, result);
  94. }
  95. [Fact]
  96. public void GetDisplayModesForRequestReturnsNullIfNoDisplayModesHandleRequest()
  97. {
  98. // Arrange
  99. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  100. var displayModeProvider = new DisplayModeProvider();
  101. displayModeProvider.Modes.Clear();
  102. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  103. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  104. displayModeProvider.Modes.Add(displayMode1.Object);
  105. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  106. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  107. displayModeProvider.Modes.Add(displayMode2.Object);
  108. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  109. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  110. displayModeProvider.Modes.Add(displayMode3.Object);
  111. // Act
  112. DisplayInfo displayModeForRequest = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, path => false, currentDisplayMode: null);
  113. // Assert
  114. Assert.Null(displayModeForRequest);
  115. }
  116. [Fact]
  117. public void GetAvailableDisplayModesForContextWithRestrictingPageElements()
  118. {
  119. // Arrange
  120. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  121. var displayModeProvider = new DisplayModeProvider();
  122. displayModeProvider.Modes.Clear();
  123. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  124. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  125. displayModeProvider.Modes.Add(displayMode1.Object);
  126. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  127. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  128. displayModeProvider.Modes.Add(displayMode2.Object);
  129. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  130. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  131. displayModeProvider.Modes.Add(displayMode3.Object);
  132. // Act
  133. var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode2.Object, requireConsistentDisplayMode: true).ToList();
  134. // Assert
  135. Assert.Equal(1, availableDisplayModes.Count);
  136. Assert.Equal(displayMode3.Object, availableDisplayModes[0]);
  137. }
  138. [Fact]
  139. public void GetAvailableDisplayModesForContextWithoutRestrictingPageElements()
  140. {
  141. // Arrange
  142. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  143. var displayModeProvider = new DisplayModeProvider();
  144. displayModeProvider.Modes.Clear();
  145. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  146. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  147. displayModeProvider.Modes.Add(displayMode1.Object);
  148. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  149. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  150. displayModeProvider.Modes.Add(displayMode2.Object);
  151. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  152. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  153. displayModeProvider.Modes.Add(displayMode3.Object);
  154. // Act
  155. var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode2.Object, requireConsistentDisplayMode: false).ToList();
  156. // Assert
  157. Assert.Equal(2, availableDisplayModes.Count);
  158. Assert.Same(displayMode1.Object, availableDisplayModes[0]);
  159. Assert.Same(displayMode3.Object, availableDisplayModes[1]);
  160. }
  161. [Fact]
  162. public void GetAvailableDisplayModesReturnsOnlyModesThatCanHandleContext()
  163. {
  164. // Arrange
  165. Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
  166. var displayModeProvider = new DisplayModeProvider();
  167. displayModeProvider.Modes.Clear();
  168. var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
  169. displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  170. displayModeProvider.Modes.Add(displayMode1.Object);
  171. var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
  172. displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
  173. displayModeProvider.Modes.Add(displayMode2.Object);
  174. var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
  175. displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
  176. displayModeProvider.Modes.Add(displayMode3.Object);
  177. // Act
  178. var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode1.Object, requireConsistentDisplayMode: false).ToList();
  179. // Assert
  180. Assert.Equal(1, availableDisplayModes.Count);
  181. Assert.Equal(displayMode2.Object, availableDisplayModes[0]);
  182. }
  183. }
  184. }