HtmlTextWriterTest.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  1. //
  2. // HtmlTextWriterTest.cs
  3. // - Unit tests for System.Web.UI.HtmlTextWriter
  4. //
  5. // Authors:
  6. // Sebastien Pouliot <[email protected]>
  7. // Ben Maurer <[email protected]>
  8. //
  9. // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
  10. //
  11. // Permission is hereby granted, free of charge, to any person obtaining
  12. // a copy of this software and associated documentation files (the
  13. // "Software"), to deal in the Software without restriction, including
  14. // without limitation the rights to use, copy, modify, merge, publish,
  15. // distribute, sublicense, and/or sell copies of the Software, and to
  16. // permit persons to whom the Software is furnished to do so, subject to
  17. // the following conditions:
  18. //
  19. // The above copyright notice and this permission notice shall be
  20. // included in all copies or substantial portions of the Software.
  21. //
  22. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  23. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  24. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  25. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  26. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  27. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29. //
  30. using System;
  31. using System.IO;
  32. using System.Web.UI;
  33. using HtwTag = System.Web.UI.HtmlTextWriterTag;
  34. using HtwAttribute = System.Web.UI.HtmlTextWriterAttribute;
  35. using HtwStyle = System.Web.UI.HtmlTextWriterStyle;
  36. using NUnit.Framework;
  37. namespace MonoTests.System.Web.UI {
  38. [TestFixture]
  39. public class HtmlTextWriterTest {
  40. StringWriter sw;
  41. HtmlTextWriter w;
  42. [SetUp]
  43. public void SetupTests ()
  44. {
  45. sw = new StringWriter ();
  46. sw.NewLine = "\n"; // Keep sanity.
  47. w = new HtmlTextWriter (sw);
  48. }
  49. [Test]
  50. public void DefaultConstFields ()
  51. {
  52. Assert.AreEqual ("=\"", HtmlTextWriter.EqualsDoubleQuoteString, "EqualsDoubleQuoteString");
  53. // add more
  54. }
  55. [Test]
  56. public void NullWriter ()
  57. {
  58. HtmlTextWriter htw = new HtmlTextWriter (null);
  59. Assert.IsNotNull (htw, "NullWriter");
  60. Assert.IsNull (htw.InnerWriter, "InnerWriter");
  61. }
  62. [Test]
  63. public void WriteAttributes_NullValue ()
  64. {
  65. w.WriteAttribute ("name", null);
  66. Assert.AreEqual (" name", w.InnerWriter.ToString ());
  67. }
  68. [Test]
  69. public void Write1 ()
  70. {
  71. w.RenderBeginTag ("a");
  72. w.RenderEndTag ();
  73. Assert.AreEqual ("<a></a>", sw.ToString ());
  74. }
  75. [Test]
  76. public void WriteATagByKey ()
  77. {
  78. w.RenderBeginTag (HtwTag.A);
  79. w.RenderEndTag ();
  80. Assert.AreEqual ("<a></a>", sw.ToString ());
  81. }
  82. [Test]
  83. public void WriteDivTagByKey ()
  84. {
  85. w.RenderBeginTag (HtwTag.Div);
  86. w.RenderEndTag ();
  87. Assert.AreEqual ("<div>\n\n</div>", sw.ToString ());
  88. }
  89. [Test]
  90. public void WriteOptionTagByKey ()
  91. {
  92. w.RenderBeginTag (HtwTag.Option);
  93. w.RenderEndTag ();
  94. Assert.AreEqual ("<option>\n\n</option>", sw.ToString ());
  95. }
  96. [Test]
  97. public void WriteDivAndATagByKey ()
  98. {
  99. w.RenderBeginTag (HtwTag.Div);
  100. w.RenderBeginTag (HtwTag.A);
  101. w.RenderEndTag ();
  102. w.RenderEndTag ();
  103. Assert.AreEqual ("<div>\n\t<a></a>\n</div>", sw.ToString ());
  104. }
  105. [Test]
  106. public void NestedIndent ()
  107. {
  108. w.RenderBeginTag (HtwTag.Div);
  109. w.RenderBeginTag (HtwTag.Div);
  110. w.RenderEndTag ();
  111. w.RenderEndTag ();
  112. Assert.AreEqual ("<div>\n\t<div>\n\n\t</div>\n</div>", sw.ToString ());
  113. }
  114. [Test]
  115. public void WriteDivAndATagByKeyWithAttr ()
  116. {
  117. w.RenderBeginTag (HtwTag.Div);
  118. w.AddAttribute (HtwAttribute.Href, "http://slashdot.org/");
  119. w.RenderBeginTag (HtwTag.A);
  120. w.RenderEndTag ();
  121. w.RenderEndTag ();
  122. Assert.AreEqual ("<div>\n\t<a href=\"http://slashdot.org/\"></a>\n</div>", sw.ToString ());
  123. }
  124. [Test]
  125. public void WriteDivTagWithStyle ()
  126. {
  127. w.AddAttribute ("id", "foo");
  128. w.AddAttribute ("style", "align:left");
  129. w.AddStyleAttribute (HtwStyle.Color, "red");
  130. w.AddStyleAttribute (HtwStyle.FontWeight, "bold");
  131. w.RenderBeginTag (HtwTag.Div);
  132. w.RenderEndTag ();
  133. Assert.AreEqual ("<div id=\"foo\" style=\"color:red;font-weight:bold;align:left\">\n\n</div>", sw.ToString ());
  134. }
  135. [Test]
  136. public void EscapeJScript ()
  137. {
  138. w.AddAttribute (HtwAttribute.Onclick, "this.style.color = \"red\"");
  139. w.RenderBeginTag (HtwTag.Div);
  140. w.RenderEndTag ();
  141. Assert.AreEqual ("<div onclick=\"this.style.color = &quot;red&quot;\">\n\n</div>", sw.ToString ());
  142. }
  143. [Test]
  144. public void EscapeUrl ()
  145. {
  146. w.AddAttribute (HtwAttribute.Href, "http://www.google.com/search?hl=en&q=i+love+nunit&btnG=Google+Search");
  147. w.RenderBeginTag (HtwTag.A);
  148. w.RenderEndTag ();
  149. Assert.AreEqual ("<a href=\"http://www.google.com/search?hl=en&amp;q=i+love+nunit&amp;btnG=Google+Search\"></a>", sw.ToString ());
  150. }
  151. // Which attrs fall here
  152. [Test]
  153. public void NoEscapeAttrName ()
  154. {
  155. w.AddAttribute (HtwAttribute.Name, "cookies&cream");
  156. w.RenderBeginTag (HtwTag.Div);
  157. w.RenderEndTag ();
  158. Assert.AreEqual ("<div name=\"cookies&cream\">\n\n</div>", sw.ToString ());
  159. }
  160. [Test]
  161. public void NoEscapeAttrName2 () {
  162. w.AddAttribute ("name", "cookies&cream");
  163. w.RenderBeginTag (HtwTag.Div);
  164. w.RenderEndTag ();
  165. Assert.AreEqual ("<div name=\"cookies&cream\">\n\n</div>", sw.ToString ());
  166. }
  167. [Test]
  168. public void NoEscapeAttrName3 () {
  169. w.AddAttribute (HtwAttribute.Name, "cookies&cream", true);
  170. w.RenderBeginTag (HtwTag.Div);
  171. w.RenderEndTag ();
  172. Assert.AreEqual ("<div name=\"cookies&amp;cream\">\n\n</div>", sw.ToString ());
  173. }
  174. [Test]
  175. public void NoEscapeAttrName4 () {
  176. w.AddAttribute ("NaMe", "cookies&cream");
  177. w.RenderBeginTag (HtwTag.Div);
  178. w.RenderEndTag ();
  179. Assert.AreEqual ("<div NaMe=\"cookies&cream\">\n\n</div>", sw.ToString ());
  180. }
  181. [Test]
  182. public void EscapeAttribute1 () {
  183. sw = new StringWriter ();
  184. sw.NewLine = "\n"; // Keep sanity.
  185. Poker w1 = new Poker (sw);
  186. w1.AddAttribute ("attr", "cookies&cream");
  187. w1.RenderBeginTag (HtwTag.Div);
  188. w1.RenderEndTag ();
  189. Assert.AreEqual ("cookies&amp;cream", w1.AttrValue_At_AddAttribute, "AttrValue_At_AddAttribute");
  190. Assert.AreEqual ("cookies&amp;cream", w1.AttrValue_At_OnAttributeRender, "AttrValue_At_OnAttributeRender");
  191. Assert.AreEqual ("<div attr=\"cookies&amp;cream\">\n\n</div>", sw.ToString ());
  192. }
  193. [Test]
  194. public void EscapeAttribute2 () {
  195. sw = new StringWriter ();
  196. sw.NewLine = "\n"; // Keep sanity.
  197. Poker w1 = new Poker (sw);
  198. w1.AddAttribute ("attr", "cookies&cream", false);
  199. w1.RenderBeginTag (HtwTag.Div);
  200. w1.RenderEndTag ();
  201. Assert.AreEqual ("cookies&cream", w1.AttrValue_At_AddAttribute, "AttrValue_At_AddAttribute");
  202. Assert.AreEqual ("cookies&cream", w1.AttrValue_At_OnAttributeRender, "AttrValue_At_OnAttributeRender");
  203. Assert.AreEqual ("<div attr=\"cookies&cream\">\n\n</div>", sw.ToString ());
  204. }
  205. [Test]
  206. public void EscapeAttribute3 () {
  207. sw = new StringWriter ();
  208. sw.NewLine = "\n"; // Keep sanity.
  209. Poker w1 = new Poker (sw);
  210. w1.AddAttribute ("attr", "cookies&cream", true);
  211. w1.RenderBeginTag (HtwTag.Div);
  212. w1.RenderEndTag ();
  213. Assert.AreEqual ("cookies&amp;cream", w1.AttrValue_At_AddAttribute, "AttrValue_At_AddAttribute");
  214. Assert.AreEqual ("cookies&amp;cream", w1.AttrValue_At_OnAttributeRender, "AttrValue_At_OnAttributeRender");
  215. Assert.AreEqual ("<div attr=\"cookies&amp;cream\">\n\n</div>", sw.ToString ());
  216. }
  217. [Test]
  218. public void WriteInput ()
  219. {
  220. w.RenderBeginTag (HtwTag.Input);
  221. w.RenderEndTag ();
  222. Assert.AreEqual ("<input />", sw.ToString ());
  223. }
  224. [Test]
  225. public void WriteInputStringTag ()
  226. {
  227. w.RenderBeginTag ("input");
  228. w.RenderEndTag ();
  229. Assert.AreEqual ("<input />", sw.ToString ());
  230. }
  231. [Test]
  232. public void WriteDivStringTag ()
  233. {
  234. w.RenderBeginTag ("div");
  235. w.RenderEndTag ();
  236. Assert.AreEqual ("<div>\n\n</div>", sw.ToString ());
  237. }
  238. [Test]
  239. public void WriteUnknownTag ()
  240. {
  241. w.RenderBeginTag ("somerandomtag");
  242. w.RenderEndTag ();
  243. Assert.AreEqual ("<somerandomtag>\n\n</somerandomtag>", sw.ToString ());
  244. }
  245. [Test]
  246. public void WritePartialBlock ()
  247. {
  248. w.RenderBeginTag ("div");
  249. Assert.AreEqual ("<div>\n", sw.ToString ());
  250. }
  251. [Test]
  252. public void WritePartialInline ()
  253. {
  254. w.RenderBeginTag ("a");
  255. Assert.AreEqual ("<a>", sw.ToString ());
  256. }
  257. [Test]
  258. public void WritePartialSelfClosing ()
  259. {
  260. w.RenderBeginTag ("input");
  261. Assert.AreEqual ("<input />", sw.ToString ());
  262. }
  263. [Test]
  264. [ExpectedException (typeof (InvalidOperationException))]
  265. public void NoMatchingClose ()
  266. {
  267. w.RenderEndTag ();
  268. }
  269. [Test]
  270. public void AttributeAfterBegin ()
  271. {
  272. w.RenderBeginTag ("div");
  273. w.AddAttribute ("class", "foo");
  274. w.RenderEndTag ();
  275. w.RenderBeginTag ("div");
  276. w.RenderEndTag ();
  277. Assert.AreEqual ("<div>\n\n</div><div class=\"foo\">\n\n</div>", sw.ToString ());
  278. }
  279. [Test]
  280. public void StyleAttribute ()
  281. {
  282. w.WriteStyleAttribute ("a", "b");
  283. Assert.AreEqual ("a:b;", sw.ToString ());
  284. }
  285. [Test]
  286. public void TagByNameGetsCaseChanged ()
  287. {
  288. w.RenderBeginTag ("InPuT");
  289. Assert.AreEqual ("<input />", sw.ToString ());
  290. }
  291. [Test]
  292. public void EnsurePopWorks ()
  293. {
  294. w.RenderBeginTag (HtwTag.A);
  295. w.RenderBeginTag (HtwTag.B);
  296. w.RenderEndTag ();
  297. w.RenderEndTag ();
  298. Assert.AreEqual ("<a><b></b></a>", sw.ToString ());
  299. }
  300. [Test]
  301. public void AddAttributeTwice_SameValue ()
  302. {
  303. w.AddAttribute (HtmlTextWriterAttribute.Border, "0");
  304. w.AddAttribute (HtmlTextWriterAttribute.Border, "0");
  305. w.RenderBeginTag ("div");
  306. w.RenderEndTag ();
  307. Assert.AreEqual ("<div border=\"0\" border=\"0\">\n\n</div>", sw.ToString ());
  308. }
  309. [Test]
  310. public void AddAttributeTwice_DifferentValue ()
  311. {
  312. w.AddAttribute (HtmlTextWriterAttribute.Border, "0");
  313. w.AddAttribute (HtmlTextWriterAttribute.Border, "1");
  314. w.RenderBeginTag ("div");
  315. w.RenderEndTag ();
  316. Assert.AreEqual ("<div border=\"0\" border=\"1\">\n\n</div>", sw.ToString ());
  317. }
  318. [Test]
  319. public void AddStyleAttribute1 ()
  320. {
  321. w.AddStyleAttribute (HtmlTextWriterStyle.BackgroundImage, "http://www.go-mono.com/");
  322. w.RenderBeginTag ("div");
  323. w.RenderEndTag ();
  324. #if NET_2_0
  325. Assert.AreEqual ("<div style=\"background-image:url(http://www.go-mono.com/);\">\n\n</div>", sw.ToString ());
  326. #else
  327. // the url(...) is missing in fx 1.x
  328. Assert.AreEqual ("<div style=\"background-image:http://www.go-mono.com/;\">\n\n</div>", sw.ToString ());
  329. #endif
  330. }
  331. [Test]
  332. public void AddStyleAttribute3 ()
  333. {
  334. sw = new StringWriter ();
  335. sw.NewLine = "\n"; // Keep sanity.
  336. Poker w1 = new Poker (sw);
  337. w1.AddStyleAttribute ("mystyle", "my value&space");
  338. w1.RenderBeginTag ("div");
  339. w1.RenderEndTag ();
  340. #if NET_2_0
  341. Assert.AreEqual ("my value&space", w1.StyleValue_At_AddStyleAttribute, "StyleValue_At_AddStyleAttribute");
  342. Assert.AreEqual ("my value&amp;space", w1.StyleValue_At_OnStyleAttributeRender, "StyleValue_At_OnStyleAttributeRender");
  343. Assert.AreEqual ("<div style=\"mystyle:my value&amp;space;\">\n\n</div>", sw.ToString ());
  344. #else
  345. Assert.AreEqual ("<div style=\"mystyle:my value&space;\">\n\n</div>", sw.ToString ());
  346. #endif
  347. }
  348. [Test]
  349. public void WriteAttribute1 ()
  350. {
  351. w.WriteAttribute ("attr", "my value&space");
  352. Assert.AreEqual (" attr=\"my value&space\"", sw.ToString ());
  353. }
  354. [Test]
  355. public void WriteAttribute2 ()
  356. {
  357. w.WriteAttribute ("attr", "my value&space", false);
  358. Assert.AreEqual (" attr=\"my value&space\"", sw.ToString ());
  359. }
  360. [Test]
  361. public void WriteAttribute3 ()
  362. {
  363. w.WriteAttribute ("attr", "my value&space", true);
  364. Assert.AreEqual (" attr=\"my value&amp;space\"", sw.ToString ());
  365. }
  366. [Test]
  367. public void WriteStyleAttribute1 ()
  368. {
  369. w.WriteStyleAttribute ("mystyle", "my value&space");
  370. Assert.AreEqual ("mystyle:my value&space;", sw.ToString ());
  371. }
  372. [Test]
  373. public void WriteStyleAttribute2 ()
  374. {
  375. w.WriteStyleAttribute ("mystyle", "my value&space", false);
  376. Assert.AreEqual ("mystyle:my value&space;", sw.ToString ());
  377. }
  378. [Test]
  379. public void WriteStyleAttribute3 ()
  380. {
  381. w.WriteStyleAttribute ("mystyle", "my value&space", true);
  382. Assert.AreEqual ("mystyle:my value&amp;space;", sw.ToString ());
  383. }
  384. #if NET_2_0
  385. [Test]
  386. public void WriteStyleAttribute_BackgroundImage1 ()
  387. {
  388. w.WriteStyleAttribute ("background-image", "http://www.mainsoft.com/space here?a=b&c=d");
  389. Assert.AreEqual ("background-image:http://www.mainsoft.com/space here?a=b&c=d;", sw.ToString ());
  390. }
  391. [Test]
  392. public void WriteStyleAttribute_BackgroundImage2 ()
  393. {
  394. w.WriteStyleAttribute ("BackGround-Image", "http://www.mainsoft.com/space here?a=b&c=d");
  395. Assert.AreEqual ("BackGround-Image:http://www.mainsoft.com/space here?a=b&c=d;", sw.ToString ());
  396. }
  397. [Test]
  398. public void AddStyleAttribute_BackgroundImage1 ()
  399. {
  400. sw = new StringWriter ();
  401. sw.NewLine = "\n"; // Keep sanity.
  402. Poker w1 = new Poker (sw);
  403. w1.AddStyleAttribute (HtmlTextWriterStyle.BackgroundImage, "http://www.mainsoft.com/space here?a=b&c=d");
  404. w1.RenderBeginTag ("div");
  405. w1.RenderEndTag ();
  406. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&c=d", w1.StyleValue_At_AddStyleAttribute, "StyleValue_At_AddStyleAttribute");
  407. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&amp;c=d", w1.StyleValue_At_OnStyleAttributeRender, "StyleValue_At_OnStyleAttributeRender");
  408. Assert.AreEqual ("<div style=\"background-image:url(http://www.mainsoft.com/space%20here?a=b&amp;c=d);\">\n\n</div>", sw.ToString ());
  409. }
  410. [Test]
  411. public void AddStyleAttribute_BackgroundImage2 ()
  412. {
  413. sw = new StringWriter ();
  414. sw.NewLine = "\n"; // Keep sanity.
  415. Poker w1 = new Poker (sw);
  416. w1.AddStyleAttribute ("background-image", "http://www.mainsoft.com/space here?a=b&c=d");
  417. w1.RenderBeginTag ("div");
  418. w1.RenderEndTag ();
  419. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&c=d", w1.StyleValue_At_AddStyleAttribute, "StyleValue_At_AddStyleAttribute");
  420. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&amp;c=d", w1.StyleValue_At_OnStyleAttributeRender, "StyleValue_At_OnStyleAttributeRender");
  421. Assert.AreEqual ("<div style=\"background-image:url(http://www.mainsoft.com/space%20here?a=b&amp;c=d);\">\n\n</div>", sw.ToString ());
  422. }
  423. [Test]
  424. public void AddStyleAttribute_BackgroundImage3 ()
  425. {
  426. sw = new StringWriter ();
  427. sw.NewLine = "\n"; // Keep sanity.
  428. Poker w1 = new Poker (sw);
  429. w1.AddStyleAttribute ("BackGround-Image", "http://www.mainsoft.com/space here?a=b&c=d");
  430. w1.RenderBeginTag ("div");
  431. w1.RenderEndTag ();
  432. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&c=d", w1.StyleValue_At_AddStyleAttribute, "StyleValue_At_AddStyleAttribute");
  433. Assert.AreEqual ("http://www.mainsoft.com/space here?a=b&amp;c=d", w1.StyleValue_At_OnStyleAttributeRender, "StyleValue_At_OnStyleAttributeRender");
  434. Assert.AreEqual ("<div style=\"BackGround-Image:url(http://www.mainsoft.com/space%20here?a=b&amp;c=d);\">\n\n</div>", sw.ToString ());
  435. }
  436. #endif
  437. [Test]
  438. public void AddStyleAttribute2 ()
  439. {
  440. w.AddStyleAttribute (HtmlTextWriterStyle.BackgroundColor, "Aqua");
  441. w.RenderBeginTag ("div");
  442. w.RenderEndTag ();
  443. Assert.AreEqual ("<div style=\"background-color:Aqua;\">\n\n</div>", sw.ToString ());
  444. }
  445. [Test]
  446. public void WriteIndentation ()
  447. {
  448. w.RenderBeginTag (HtwTag.Div);
  449. w.Write ("Hello");
  450. w.RenderEndTag ();
  451. Assert.AreEqual ("<div>\n\tHello\n</div>", sw.ToString ());
  452. }
  453. [Test]
  454. public void WriteIndentation2 ()
  455. {
  456. w.RenderBeginTag (HtwTag.Div);
  457. w.Write ("");
  458. w.RenderEndTag ();
  459. Assert.AreEqual ("<div>\n\t\n</div>", sw.ToString ());
  460. }
  461. [Test]
  462. public void WriteIndentation3 ()
  463. {
  464. w.RenderBeginTag (HtwTag.Div);
  465. w.RenderEndTag ();
  466. Assert.AreEqual ("<div>\n\n</div>", sw.ToString ());
  467. }
  468. #if NET_2_0
  469. [Test]
  470. public void WriteBreakTest ()
  471. {
  472. w.WriteBreak ();
  473. Assert.AreEqual ("<br />", sw.ToString (), "WriteBreakTest01");
  474. }
  475. #endif
  476. class MyHttpTextWriter : HtmlTextWriter {
  477. int i = 0;
  478. public MyHttpTextWriter(TextWriter tw) : base(tw) {
  479. }
  480. protected override bool OnAttributeRender(string name, string value, HtmlTextWriterAttribute key) {
  481. switch (i++) {
  482. case 0:
  483. case 1: Assert.AreEqual(HtmlTextWriterAttribute.Border, key);
  484. break;
  485. case 2: Assert.AreEqual((HtmlTextWriterAttribute)(-1), key);
  486. break;
  487. }
  488. return base.OnAttributeRender (name, value, key);
  489. }
  490. }
  491. class Poker : HtmlTextWriter
  492. {
  493. public string StyleValue_At_OnStyleAttributeRender;
  494. public string StyleValue_At_AddStyleAttribute;
  495. public string AttrValue_At_OnAttributeRender;
  496. public string AttrValue_At_AddAttribute;
  497. public Poker (TextWriter tw)
  498. : base (tw)
  499. {
  500. }
  501. protected override bool OnAttributeRender (string name, string value, HtmlTextWriterAttribute key)
  502. {
  503. AttrValue_At_OnAttributeRender = value;
  504. return base.OnAttributeRender (name, value, key);
  505. }
  506. protected override bool OnStyleAttributeRender (string name, string value, HtmlTextWriterStyle key)
  507. {
  508. StyleValue_At_OnStyleAttributeRender = value;
  509. return base.OnStyleAttributeRender (name, value, key);
  510. }
  511. protected override void AddStyleAttribute (string name, string value, HtmlTextWriterStyle key)
  512. {
  513. StyleValue_At_AddStyleAttribute = value;
  514. base.AddStyleAttribute (name, value, key);
  515. }
  516. protected override void AddAttribute (string name, string value, HtmlTextWriterAttribute key)
  517. {
  518. AttrValue_At_AddAttribute = value;
  519. base.AddAttribute (name, value, key);
  520. }
  521. }
  522. [Test]
  523. public void TestOnAttributeRender() {
  524. MyHttpTextWriter myw = new MyHttpTextWriter (sw);
  525. myw.AddAttribute ("border", "0");
  526. myw.AddAttribute ("BoRDeR", "0");
  527. myw.AddAttribute ("error", "0");
  528. myw.RenderBeginTag ("div");
  529. myw.RenderEndTag ();
  530. }
  531. }
  532. }