PageRenderTime 32ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/test/System.Web.Razor.Test/Parser/CSharp/CsHtmlDocumentTest.cs

https://bitbucket.org/mdavid/aspnetwebstack
C# | 286 lines | 272 code | 14 blank | 0 comment | 0 complexity | 74ea4eb2933fac03916073090be90fdb MD5 | raw file
  1. using System.Web.Razor.Parser;
  2. using System.Web.Razor.Parser.SyntaxTree;
  3. using System.Web.Razor.Resources;
  4. using System.Web.Razor.Test.Framework;
  5. using System.Web.Razor.Text;
  6. using System.Web.Razor.Tokenizer.Symbols;
  7. using Xunit;
  8. namespace System.Web.Razor.Test.Parser.CSharp
  9. {
  10. public class CsHtmlDocumentTest : CsHtmlMarkupParserTestBase
  11. {
  12. [Fact]
  13. public void UnterminatedBlockCommentCausesRazorError()
  14. {
  15. ParseDocumentTest(@"@* Foo Bar",
  16. new MarkupBlock(
  17. Factory.EmptyHtml(),
  18. new CommentBlock(
  19. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition),
  20. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  21. Factory.Comment(" Foo Bar", HtmlSymbolType.RazorComment)
  22. )
  23. ),
  24. new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, SourceLocation.Zero));
  25. }
  26. [Fact]
  27. public void BlockCommentInMarkupDocumentIsHandledCorrectly()
  28. {
  29. ParseDocumentTest(@"<ul>
  30. @* This is a block comment </ul> *@ foo",
  31. new MarkupBlock(
  32. Factory.Markup("<ul>\r\n "),
  33. new CommentBlock(
  34. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition),
  35. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  36. Factory.Comment(" This is a block comment </ul> ", HtmlSymbolType.RazorComment),
  37. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  38. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
  39. ),
  40. Factory.Markup(" foo")
  41. ));
  42. }
  43. [Fact]
  44. public void BlockCommentInMarkupBlockIsHandledCorrectly()
  45. {
  46. ParseBlockTest(@"<ul>
  47. @* This is a block comment </ul> *@ foo </ul>",
  48. new MarkupBlock(
  49. Factory.Markup("<ul>\r\n "),
  50. new CommentBlock(
  51. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition),
  52. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  53. Factory.Comment(" This is a block comment </ul> ", HtmlSymbolType.RazorComment),
  54. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  55. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
  56. ),
  57. Factory.Markup(" foo </ul>").Accepts(AcceptedCharacters.None)
  58. ));
  59. }
  60. [Fact]
  61. public void BlockCommentAtStatementStartInCodeBlockIsHandledCorrectly()
  62. {
  63. ParseDocumentTest(@"@if(Request.IsAuthenticated) {
  64. @* User is logged in! } *@
  65. Write(""Hello friend!"");
  66. }",
  67. new MarkupBlock(
  68. Factory.EmptyHtml(),
  69. new StatementBlock(
  70. Factory.CodeTransition(),
  71. Factory.Code("if(Request.IsAuthenticated) {\r\n ").AsStatement(),
  72. new CommentBlock(
  73. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  74. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  75. Factory.Comment(" User is logged in! } ", CSharpSymbolType.RazorComment),
  76. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  77. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  78. ),
  79. Factory.Code("\r\n Write(\"Hello friend!\");\r\n}").AsStatement())));
  80. }
  81. [Fact]
  82. public void BlockCommentInStatementInCodeBlockIsHandledCorrectly()
  83. {
  84. ParseDocumentTest(@"@if(Request.IsAuthenticated) {
  85. var foo = @* User is logged in! ; *@;
  86. Write(""Hello friend!"");
  87. }",
  88. new MarkupBlock(
  89. Factory.EmptyHtml(),
  90. new StatementBlock(
  91. Factory.CodeTransition(),
  92. Factory.Code("if(Request.IsAuthenticated) {\r\n var foo = ").AsStatement(),
  93. new CommentBlock(
  94. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  95. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  96. Factory.Comment(" User is logged in! ; ", CSharpSymbolType.RazorComment),
  97. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  98. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  99. ),
  100. Factory.Code(";\r\n Write(\"Hello friend!\");\r\n}").AsStatement())));
  101. }
  102. [Fact]
  103. public void BlockCommentInStringIsIgnored()
  104. {
  105. ParseDocumentTest(@"@if(Request.IsAuthenticated) {
  106. var foo = ""@* User is logged in! ; *@"";
  107. Write(""Hello friend!"");
  108. }",
  109. new MarkupBlock(
  110. Factory.EmptyHtml(),
  111. new StatementBlock(
  112. Factory.CodeTransition(),
  113. Factory.Code(@"if(Request.IsAuthenticated) {
  114. var foo = ""@* User is logged in! ; *@"";
  115. Write(""Hello friend!"");
  116. }").AsStatement())));
  117. }
  118. [Fact]
  119. public void BlockCommentInCSharpBlockCommentIsIgnored()
  120. {
  121. ParseDocumentTest(@"@if(Request.IsAuthenticated) {
  122. var foo = /*@* User is logged in! */ *@ */;
  123. Write(""Hello friend!"");
  124. }",
  125. new MarkupBlock(
  126. Factory.EmptyHtml(),
  127. new StatementBlock(
  128. Factory.CodeTransition(),
  129. Factory.Code(@"if(Request.IsAuthenticated) {
  130. var foo = /*@* User is logged in! */ *@ */;
  131. Write(""Hello friend!"");
  132. }").AsStatement())));
  133. }
  134. [Fact]
  135. public void BlockCommentInCSharpLineCommentIsIgnored()
  136. {
  137. ParseDocumentTest(@"@if(Request.IsAuthenticated) {
  138. var foo = //@* User is logged in! */ *@;
  139. Write(""Hello friend!"");
  140. }",
  141. new MarkupBlock(
  142. Factory.EmptyHtml(),
  143. new StatementBlock(
  144. Factory.CodeTransition(),
  145. Factory.Code(@"if(Request.IsAuthenticated) {
  146. var foo = //@* User is logged in! */ *@;
  147. Write(""Hello friend!"");
  148. }").AsStatement())));
  149. }
  150. [Fact]
  151. public void BlockCommentInImplicitExpressionIsHandledCorrectly()
  152. {
  153. ParseDocumentTest(@"@Html.Foo@*bar*@",
  154. new MarkupBlock(
  155. Factory.EmptyHtml(),
  156. new ExpressionBlock(
  157. Factory.CodeTransition(),
  158. Factory.Code("Html.Foo").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
  159. ),
  160. Factory.EmptyHtml(),
  161. new CommentBlock(
  162. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition),
  163. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  164. Factory.Comment("bar", HtmlSymbolType.RazorComment),
  165. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  166. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
  167. ),
  168. Factory.EmptyHtml()));
  169. }
  170. [Fact]
  171. public void BlockCommentAfterDotOfImplicitExpressionIsHandledCorrectly()
  172. {
  173. ParseDocumentTest(@"@Html.@*bar*@",
  174. new MarkupBlock(
  175. Factory.EmptyHtml(),
  176. new ExpressionBlock(
  177. Factory.CodeTransition(),
  178. Factory.Code(@"Html").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
  179. ),
  180. Factory.Markup("."),
  181. new CommentBlock(
  182. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition),
  183. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  184. Factory.Comment("bar", HtmlSymbolType.RazorComment),
  185. Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  186. Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
  187. ),
  188. Factory.EmptyHtml()));
  189. }
  190. [Fact]
  191. public void BlockCommentInParensOfImplicitExpressionIsHandledCorrectly()
  192. {
  193. ParseDocumentTest(@"@Html.Foo(@*bar*@ 4)",
  194. new MarkupBlock(
  195. Factory.EmptyHtml(),
  196. new ExpressionBlock(
  197. Factory.CodeTransition(),
  198. Factory.Code(@"Html.Foo(").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.Any),
  199. new CommentBlock(
  200. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  201. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  202. Factory.Comment("bar", CSharpSymbolType.RazorComment),
  203. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  204. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  205. ),
  206. Factory.Code(" 4)").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
  207. ),
  208. Factory.EmptyHtml()));
  209. }
  210. [Fact]
  211. public void BlockCommentInBracketsOfImplicitExpressionIsHandledCorrectly()
  212. {
  213. ParseDocumentTest(@"@Html.Foo[@*bar*@ 4]",
  214. new MarkupBlock(
  215. Factory.EmptyHtml(),
  216. new ExpressionBlock(
  217. Factory.CodeTransition(),
  218. Factory.Code(@"Html.Foo[").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.Any),
  219. new CommentBlock(
  220. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  221. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  222. Factory.Comment("bar", CSharpSymbolType.RazorComment),
  223. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  224. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  225. ),
  226. Factory.Code(" 4]").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
  227. ),
  228. Factory.EmptyHtml()));
  229. }
  230. [Fact]
  231. public void BlockCommentInParensOfConditionIsHandledCorrectly()
  232. {
  233. ParseDocumentTest(@"@if(@*bar*@) {}",
  234. new MarkupBlock(
  235. Factory.EmptyHtml(),
  236. new StatementBlock(
  237. Factory.CodeTransition(),
  238. Factory.Code(@"if(").AsStatement(),
  239. new CommentBlock(
  240. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  241. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  242. Factory.Comment("bar", CSharpSymbolType.RazorComment),
  243. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  244. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  245. ),
  246. Factory.Code(") {}").AsStatement()
  247. )));
  248. }
  249. [Fact]
  250. public void BlockCommentInExplicitExpressionIsHandledCorrectly()
  251. {
  252. ParseDocumentTest(@"@(1 + @*bar*@ 1)",
  253. new MarkupBlock(
  254. Factory.EmptyHtml(),
  255. new ExpressionBlock(
  256. Factory.CodeTransition(),
  257. Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
  258. Factory.Code(@"1 + ").AsExpression(),
  259. new CommentBlock(
  260. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition),
  261. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  262. Factory.Comment("bar", CSharpSymbolType.RazorComment),
  263. Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar).Accepts(AcceptedCharacters.None),
  264. Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
  265. ),
  266. Factory.Code(" 1").AsExpression(),
  267. Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
  268. ),
  269. Factory.EmptyHtml()));
  270. }
  271. }
  272. }