PageRenderTime 64ms CodeModel.GetById 6ms RepoModel.GetById 0ms app.codeStats 0ms

/test/2.0/moon-unit/System.Windows.Controls.Primitives/SelectorTest.cs

http://github.com/mono/moon
C# | 532 lines | 423 code | 79 blank | 30 comment | 4 complexity | 80c00eca343b5d7da59b75122c8c2b42 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, MIT, LGPL-2.1, MPL-2.0-no-copyleft-exception, GPL-3.0
  1. //
  2. // Selector Unit Tests
  3. //
  4. // Contact:
  5. // Moonlight List (moonlight-list@lists.ximian.com)
  6. //
  7. // Copyright 2008 Novell, Inc.
  8. //
  9. // Permission is hereby granted, free of charge, to any person obtaining
  10. // a copy of this software and associated documentation files (the
  11. // "Software"), to deal in the Software without restriction, including
  12. // without limitation the rights to use, copy, modify, merge, publish,
  13. // distribute, sublicense, and/or sell copies of the Software, and to
  14. // permit persons to whom the Software is furnished to do so, subject to
  15. // the following conditions:
  16. //
  17. // The above copyright notice and this permission notice shall be
  18. // included in all copies or substantial portions of the Software.
  19. //
  20. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  21. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  23. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  24. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  25. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  26. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27. //
  28. using System;
  29. using System.Windows;
  30. using System.Windows.Controls;
  31. using System.Windows.Controls.Primitives;
  32. using Mono.Moonlight.UnitTesting;
  33. using Microsoft.VisualStudio.TestTools.UnitTesting;
  34. using System.Windows.Shapes;
  35. using Microsoft.Silverlight.Testing;
  36. using System.Collections.Generic;
  37. using System.Windows.Media.Animation;
  38. namespace MoonTest.System.Windows.Controls.Primitives {
  39. public abstract class SelectorTest : ItemsControlTestBase {
  40. public override void ClearContainerForItemOverride ()
  41. {
  42. Assert.Throws<NullReferenceException> (() => {
  43. base.ClearContainerForItemOverride ();
  44. });
  45. }
  46. public override void ClearContainerForItemOverride2 ()
  47. {
  48. Assert.Throws<NullReferenceException> (() => {
  49. base.ClearContainerForItemOverride2 ();
  50. });
  51. }
  52. public override void ClearContainerForItemOverride3 ()
  53. {
  54. Assert.Throws<InvalidCastException> (() => {
  55. base.ClearContainerForItemOverride3 ();
  56. });
  57. }
  58. public override void ClearContainerForItemOverride4 ()
  59. {
  60. Assert.Throws<InvalidCastException> (() => {
  61. base.ClearContainerForItemOverride4 ();
  62. });
  63. }
  64. [TestMethod]
  65. public virtual void ClearContainerForItemOverrideSelector_NotOwnContainer ()
  66. {
  67. IPoker box = CurrentControl;
  68. var items = new ListBoxItem [] { new ListBoxItem () , new ComboBoxItem () };
  69. foreach (ListBoxItem item in items) {
  70. item.IsSelected = true;
  71. item.Content = new object ();
  72. item.DataContext = new object ();
  73. item.ContentTemplate = new DataTemplate();
  74. item.Template = new ControlTemplate();
  75. item.Style = new Style (item.GetType ());
  76. box.ClearContainerForItemOverride_ (item, new object ());
  77. Assert.IsTrue (item.IsSelected, "#1");
  78. Assert.IsNull (item.Content, "#2");
  79. Assert.IsNotNull (item.DataContext, "#3");
  80. Assert.IsNotNull (item.ContentTemplate, "#4");
  81. Assert.IsNotNull (item.Template, "#5");
  82. Assert.IsNotNull (item.Style, "#6");
  83. }
  84. }
  85. [TestMethod]
  86. public virtual void ClearContainerForItemOverrideSelector_OwnContainer ()
  87. {
  88. IPoker box = CurrentControl;
  89. var items = new ListBoxItem [] { new ListBoxItem () , new ComboBoxItem () };
  90. foreach (ListBoxItem item in items) {
  91. item.IsSelected = true;
  92. item.Content = new object ();
  93. item.DataContext = new object ();
  94. item.ContentTemplate = new DataTemplate();
  95. item.Template = new ControlTemplate();
  96. item.Style = new Style (item.GetType ());
  97. box.ClearContainerForItemOverride_ (item, item);
  98. Assert.IsTrue (item.IsSelected, "#1");
  99. Assert.IsNotNull (item.Content, "#2");
  100. Assert.IsNotNull (item.DataContext, "#3");
  101. Assert.IsNotNull (item.ContentTemplate, "#4");
  102. Assert.IsNotNull (item.Template, "#5");
  103. Assert.IsNotNull (item.Style, "#6");
  104. }
  105. }
  106. [TestMethod]
  107. public virtual void ClearContainerForItemOverrideSelector_NotOwnContainer_Style ()
  108. {
  109. IPoker box = CurrentControl;
  110. var items = new ListBoxItem [] { new ListBoxItem (), new ComboBoxItem () };
  111. foreach (ListBoxItem item in items) {
  112. box.ItemContainerStyle = new Style (item.GetType ());
  113. item.Style = box.ItemContainerStyle;
  114. box.ClearContainerForItemOverride_ (item, new object ());
  115. Assert.IsNotNull (item.Style, "#1");
  116. }
  117. }
  118. [TestMethod]
  119. public virtual void ClearContainerForItemOverrideSelector_OwnContainer_Style ()
  120. {
  121. IPoker box = CurrentControl;
  122. var items = new ListBoxItem [] { new ListBoxItem (), new ComboBoxItem () };
  123. foreach (ListBoxItem item in items) {
  124. box.ItemContainerStyle = new Style (item.GetType ());
  125. item.Style = box.ItemContainerStyle;
  126. box.ClearContainerForItemOverride_ (item, item);
  127. Assert.IsNotNull (item.Style, "#1");
  128. }
  129. }
  130. [TestMethod]
  131. [Asynchronous]
  132. [MoonlightBug ("Behaviour changed from SL2 -> SL3. Test now checks for SL3 behaviour")]
  133. public virtual void ChangeContainerStyle ()
  134. {
  135. Selector selector = (Selector) CurrentControl;
  136. Style first = new Style (typeof (ListBoxItem));
  137. ListBoxItem item = (ListBoxItem) CreateContainer ();
  138. item.Content = "A";
  139. Enqueue (() => TestPanel.Children.Add (selector));
  140. Enqueue (() => CurrentControl.ApplyTemplate ());
  141. Enqueue (() => {
  142. if (CurrentControl is ComboBox)
  143. ((ComboBox) CurrentControl).IsDropDownOpen = true;
  144. });
  145. Enqueue (() => CurrentControl.Items.Add (item));
  146. Enqueue (() => CurrentControl.ItemContainerStyle = first);
  147. }
  148. [Asynchronous]
  149. [MoonlightBug]
  150. public override void DataContext_CopyUIElement ()
  151. {
  152. base.DataContext_CopyUIElement ();
  153. EnqueueConditional (() => CurrentControl.LastCreatedContainer != null, "#create");
  154. Enqueue (() => {
  155. Assert.AreEqual (CurrentControl.Items [0], CurrentControl.LastCreatedContainer.GetValue (FrameworkElement.DataContextProperty), "#1");
  156. });
  157. EnqueueTestComplete ();
  158. }
  159. [Asynchronous]
  160. public override void DisplayMemberPathTest2 ()
  161. {
  162. base.DisplayMemberPathTest2 ();
  163. Enqueue (() => { if (CurrentControl is ComboBox)((ComboBox) CurrentControl).IsDropDownOpen = true; });
  164. Enqueue (() => {
  165. var p = (ListBoxItem) CurrentControl.LastCreatedContainer;
  166. Assert.AreEqual (CurrentControl.LastPreparedItem, p.Content, "#content is item");
  167. Assert.AreEqual (p.Content, p.ReadLocalValue (ListBoxItem.ContentProperty), "#content is local");
  168. Assert.AreEqual (CurrentControl.LastPreparedItem, p.DataContext, "#datacontext is item");
  169. Assert.AreEqual (p.DataContext, p.ReadLocalValue (ListBoxItem.DataContextProperty), "#datacontext is local");
  170. Assert.IsNotNull (p.ContentTemplate, "#ContentTemplate has been set");
  171. });
  172. EnqueueTestComplete ();
  173. }
  174. [TestMethod]
  175. public virtual void GetContainerForItemOverride3 ()
  176. {
  177. // Subclass must do the testing of the created item
  178. // when there's a style
  179. Selector s = (Selector)CurrentControl;
  180. s.SetValue (s is ComboBox ? ComboBox.ItemContainerStyleProperty : ListBox.ItemContainerStyleProperty, new Style (typeof (ListBoxItem)));
  181. CurrentControl.GetContainerForItemOverride_ ();
  182. }
  183. [TestMethod]
  184. [Asynchronous]
  185. public virtual void GetInvalidContainerItemTest ()
  186. {
  187. IPoker box = CurrentControl;
  188. TestPanel.Children.Add ((FrameworkElement) box);
  189. Enqueue (() => box.ContainerItem = new Storyboard ());
  190. Enqueue (() => box.ApplyTemplate ());
  191. }
  192. [TestMethod]
  193. public virtual void IsSelectedTest ()
  194. {
  195. IPoker box = CurrentControl;
  196. foreach (ListBoxItem i in new ListBoxItem [] { new ListBoxItem (), new ComboBoxItem () }) {
  197. ListBoxItem item = i;
  198. box.Items.Add (item);
  199. box.SelectedItem = item;
  200. Assert.IsTrue (item.IsSelected, "#1");
  201. box.Items.Remove (item);
  202. Assert.IsFalse (item.IsSelected, "#2");
  203. box.Items.Add (item);
  204. box.SelectedItem = item;
  205. box.Items.Clear ();
  206. Assert.IsFalse (item.IsSelected, "#3");
  207. }
  208. }
  209. [TestMethod]
  210. public virtual void IsSelectedTest2 ()
  211. {
  212. // Add a ListBoxItem/ComboBoxItem which has IsSelected set to true
  213. foreach (var item in new ListBoxItem [] { new ListBoxItem (), new ComboBoxItem () }) {
  214. item.IsSelected = true;
  215. CurrentControl.Items.Add (item);
  216. Assert.AreEqual (0, CurrentControl.SelectedIndex, "#1");
  217. Assert.AreEqual (item, CurrentControl.SelectedItem, "#2");
  218. CurrentControl.Items.Clear ();
  219. }
  220. }
  221. [TestMethod]
  222. public virtual void IsSelectedTest3 ()
  223. {
  224. IPoker box = CurrentControl;
  225. object o = new object ();
  226. box.Items.Add (o);
  227. box.SelectedItem = o;
  228. box.Items.Clear ();
  229. Assert.IsNull (box.SelectedItem);
  230. Assert.AreEqual (-1, box.SelectedIndex);
  231. }
  232. [TestMethod]
  233. [Asynchronous]
  234. public virtual void IsSelectedTest4 ()
  235. {
  236. List<object> items = new List<object> () {
  237. new object (), new object (), new object ()
  238. };
  239. IPoker box = CurrentControl;
  240. TestPanel.Children.Add ((FrameworkElement) box);
  241. Enqueue (() => box.ApplyTemplate ());
  242. Enqueue (() => {
  243. items.ForEach (box.Items.Add);
  244. box.SelectedItem = items [2];
  245. });
  246. Enqueue (() => {
  247. Assert.AreEqual (2, box.SelectedIndex, "#1");
  248. Assert.AreEqual (items [2], box.SelectedItem, "#2");
  249. box.Items.Remove (box.Items [2]);
  250. });
  251. Enqueue (() => {
  252. Assert.AreEqual (-1, box.SelectedIndex, "#3");
  253. Assert.IsNull (box.SelectedItem, "#4");
  254. });
  255. EnqueueTestComplete ();
  256. }
  257. [TestMethod]
  258. public virtual void IsSelectionActiveTest ()
  259. {
  260. IPoker p = CurrentControl;
  261. ListBoxItem item = new ListBoxItem ();
  262. Assert.IsFalse ((bool) item.GetValue (ListBox.IsSelectionActiveProperty), "#1");
  263. Assert.Throws<InvalidOperationException> (() => item.SetValue (ListBox.IsSelectionActiveProperty, true));
  264. Assert.IsFalse ((bool) item.GetValue (ListBox.IsSelectionActiveProperty), "#2");
  265. p.Items.Add (item);
  266. p.SelectedItem = item;
  267. Assert.IsFalse ((bool) item.GetValue (ListBox.IsSelectionActiveProperty), "#3");
  268. p.SelectedIndex = -1;
  269. Assert.IsFalse ((bool) item.GetValue (ListBox.IsSelectionActiveProperty), "#4");
  270. Assert.AreSame (ComboBox.IsSelectionActiveProperty, ListBox.IsSelectionActiveProperty, "#5");
  271. }
  272. [TestMethod]
  273. [Asynchronous]
  274. public virtual void IsSelectionActiveTest2 ()
  275. {
  276. IPoker p = CurrentControl;
  277. Selector selector = (Selector) p;
  278. selector.Items.Add (new object ());
  279. selector.Items.Add (new object ());
  280. selector.ApplyTemplate ();
  281. CreateAsyncTest (selector, () => {
  282. Assert.IsFalse ((bool) selector.GetValue (ListBox.IsSelectionActiveProperty), "#1");
  283. selector.Focus ();
  284. Assert.IsFalse ((bool) selector.GetValue (ListBox.IsSelectionActiveProperty), "#2");
  285. selector.SelectedIndex = 0;
  286. Assert.IsFalse ((bool) selector.GetValue (ListBox.IsSelectionActiveProperty), "#2");
  287. });
  288. }
  289. [TestMethod]
  290. [Asynchronous]
  291. public override void ItemTemplateTest3 ()
  292. {
  293. base.ItemTemplateTest3 ();
  294. Enqueue (() => CurrentControl.SelectedIndex = 0);
  295. EnqueueConditional (() => CurrentControl.LastCreatedContainer != null, "#created");
  296. Enqueue (() => {
  297. ListBoxItem c = (ListBoxItem) CurrentControl.LastCreatedContainer;
  298. Assert.AreSame (c, CurrentControl.LastPreparedContainer, "#prepared");
  299. Assert.IsNull (CurrentControl.LastClearedContainer, "#cleared");
  300. Assert.IsNotNull (c.ContentTemplate, "#content");
  301. });
  302. EnqueueTestComplete ();
  303. }
  304. public override void IsItemItsOwnContainerTest ()
  305. {
  306. base.IsItemItsOwnContainerTest ();
  307. Assert.IsFalse (CurrentControl.IsItemItsOwnContainerOverride_ (CurrentControl));
  308. }
  309. public override void PrepareContainerForItemOverrideTest ()
  310. {
  311. Assert.Throws<NullReferenceException> (() => {
  312. base.PrepareContainerForItemOverrideTest ();
  313. }, "#1");
  314. }
  315. public override void PrepareContainerForItemOverrideTest2 ()
  316. {
  317. Assert.Throws<InvalidCastException> (() => {
  318. base.PrepareContainerForItemOverrideTest2 ();
  319. });
  320. }
  321. public override void PrepareContainerForItemOverrideTest2b ()
  322. {
  323. Assert.Throws<InvalidCastException> (() => {
  324. base.PrepareContainerForItemOverrideTest2b ();
  325. });
  326. }
  327. public override void PrepareContainerForItemOverrideTest3c ()
  328. {
  329. Assert.Throws<InvalidCastException> (() => {
  330. base.PrepareContainerForItemOverrideTest3c ();
  331. });
  332. }
  333. public override void PrepareContainerForItemOverrideTest6 ()
  334. {
  335. Assert.Throws<InvalidCastException> (() => {
  336. base.PrepareContainerForItemOverrideTest6 ();
  337. });
  338. }
  339. [TestMethod]
  340. public virtual void PrepareContainerForItemOverrideSelector2 ()
  341. {
  342. Style style = new Style (typeof (ListBoxItem));
  343. Selector box = (Selector) CurrentControl;
  344. DependencyProperty prop = box is ComboBox ? ComboBox.ItemContainerStyleProperty : ListBox.ItemContainerStyleProperty;
  345. box.SetValue (prop, style);
  346. ComboBoxItem item = new ComboBoxItem ();
  347. Assert.IsNull (item.Style, "#1");
  348. CurrentControl.PrepareContainerForItemOverride_ (item, null);
  349. Assert.AreSame (item.Style, box.GetValue (prop), "#4");
  350. }
  351. [TestMethod]
  352. public virtual void PrepareContainerForItemOverrideSelector3 ()
  353. {
  354. Style style = new Style (typeof (ListBoxItem));
  355. Selector box = (Selector) CurrentControl;
  356. DependencyProperty prop = box is ComboBox ? ComboBox.ItemContainerStyleProperty : ListBox.ItemContainerStyleProperty;
  357. box.SetValue (prop, style);
  358. ListBoxItem item = new ListBoxItem ();
  359. Assert.IsNull (item.Style, "#1");
  360. CurrentControl.PrepareContainerForItemOverride_ (item, null);
  361. Assert.AreSame (item.Style, box.GetValue (prop), "#4");
  362. }
  363. [TestMethod]
  364. public virtual void PrepareContainerForItemOverrideSelector4 ()
  365. {
  366. IPoker box = CurrentControl;
  367. ListBoxItem item = (ListBoxItem) CreateContainer ();
  368. box.PrepareContainerForItemOverride_ (item, item);
  369. Assert.IsNull (item.Content);
  370. }
  371. [TestMethod]
  372. public virtual void PrepareContainerForItemOverrideSelector5 ()
  373. {
  374. Rectangle rect = new Rectangle ();
  375. IPoker box = CurrentControl;
  376. ListBoxItem item = (ListBoxItem) CreateContainer ();
  377. Assert.IsNull (item.Content, "#1");
  378. box.PrepareContainerForItemOverride_ (item, rect);
  379. Assert.AreSame (item.Content, rect, "#2");
  380. }
  381. [TestMethod]
  382. public virtual void PrepareContainerForItemOverrideSelector6 ()
  383. {
  384. Rectangle rect = new Rectangle ();
  385. IPoker box = CurrentControl;
  386. box.Items.Add (rect);
  387. ListBoxItem item = (ListBoxItem) CreateContainer ();
  388. Assert.Throws<InvalidOperationException> (() => box.PrepareContainerForItemOverride_ (item, rect), "#2");
  389. }
  390. [TestMethod]
  391. public virtual void PrepareContainerForItemOverrideTest36 ()
  392. {
  393. Rectangle rect = new Rectangle ();
  394. IPoker box = CurrentControl;
  395. ComboBoxItem item = new ComboBoxItem ();
  396. Assert.IsNull (item.Content);
  397. box.PrepareContainerForItemOverride_ (item, rect);
  398. Assert.AreSame (item.Content, rect);
  399. }
  400. [TestMethod]
  401. public virtual void PrepareContainerForItemOverride_defaults ()
  402. {
  403. IPoker poker = CurrentControl;
  404. ListBoxItem element = (ListBoxItem) poker.GetContainerForItemOverride_ ();
  405. string item = "hi";
  406. poker.PrepareContainerForItemOverride_ (element, item);
  407. Assert.AreEqual (element.Content, item, "string is content");
  408. Assert.IsNotNull (element.ContentTemplate, "content template is null");
  409. Assert.IsNull (element.Style, "style is null");
  410. }
  411. [TestMethod]
  412. public virtual void PrepareContainerForItemOverride_IsSelected ()
  413. {
  414. IPoker poker = CurrentControl;
  415. ListBoxItem element = (ListBoxItem) poker.GetContainerForItemOverride_ ();
  416. string item = "hi";
  417. element.IsSelected = true;
  418. poker.PrepareContainerForItemOverride_ (element, item);
  419. Assert.IsNull (poker.SelectedItem, "selected item before it's been inserted");
  420. Assert.AreEqual (-1, poker.SelectedIndex, "-1 selected index");
  421. }
  422. [TestMethod]
  423. public virtual void PrepareContainerForItemOverride_DisplayMemberPath ()
  424. {
  425. IPoker poker = CurrentControl;
  426. ListBoxItem element = (ListBoxItem) poker.GetContainerForItemOverride_ ();
  427. string item = "hi";
  428. poker.DisplayMemberPath = "length";
  429. poker.PrepareContainerForItemOverride_ (element, item);
  430. Assert.AreEqual (element.ReadLocalValue (ContentControl.ContentProperty), item, "binding is unset");
  431. }
  432. [TestMethod]
  433. public virtual void StyleExistsOnContainer ()
  434. {
  435. ListBoxItem item = null;
  436. item = new ListBoxItem ();
  437. CurrentControl.PrepareContainerForItemOverride_ (item, new object ());
  438. Assert.IsUnset (item, ListBoxItem.StyleProperty, "#1");
  439. CurrentControl.ItemContainerStyle = null;
  440. item = new ListBoxItem ();
  441. CurrentControl.PrepareContainerForItemOverride_ (item, new object ());
  442. Assert.IsUnset (item, ListBoxItem.StyleProperty, "#2");
  443. CurrentControl.ItemContainerStyle = new Style (typeof (ListBoxItem));
  444. item = new ListBoxItem ();
  445. CurrentControl.PrepareContainerForItemOverride_ (item, new object ());
  446. Assert.AreEqual (CurrentControl.ItemContainerStyle, item.ReadLocalValue (ListBoxItem.StyleProperty), "#3");
  447. Style containerStyle = new Style (typeof (ListBoxItem));
  448. item = new ListBoxItem { Style = containerStyle };
  449. CurrentControl.PrepareContainerForItemOverride_ (item, new object ());
  450. Assert.AreEqual (containerStyle, item.ReadLocalValue (ListBoxItem.StyleProperty), "#4");
  451. }
  452. }
  453. }