PageRenderTime 60ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/mcs/class/System.ComponentModel.Composition/Tests/ComponentModelUnitTest/System/ComponentModel/Composition/CompositionContainerTests.cs

https://bitbucket.org/danipen/mono
C# | 2998 lines | 2298 code | 673 blank | 27 comment | 2 complexity | eafdfad5cf3fe070986bfd888a4a30ce MD5 | raw file
Possible License(s): Unlicense, Apache-2.0, LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. // -----------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // -----------------------------------------------------------------------
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel.Composition;
  7. using System.Linq;
  8. using System.Linq.Expressions;
  9. using System.Runtime.Serialization;
  10. using Microsoft.VisualStudio.TestTools.UnitTesting;
  11. using System.ComponentModel.Composition.Factories;
  12. using System.UnitTesting;
  13. using System.ComponentModel.Composition.AttributedModel;
  14. using System.ComponentModel.Composition.Hosting;
  15. using System.ComponentModel.Composition.Primitives;
  16. using System.ComponentModel.Composition.UnitTesting;
  17. namespace System.ComponentModel.Composition
  18. {
  19. [TestClass]
  20. public class CompositionContainerTests
  21. {
  22. [TestMethod]
  23. public void Constructor2_ArrayWithNullElementAsProvidersArgument_ShouldThrowArgumentException()
  24. {
  25. ExceptionAssert.ThrowsArgument<ArgumentException>("providers", () =>
  26. {
  27. new CompositionContainer(new ExportProvider[] { null });
  28. });
  29. }
  30. [TestMethod]
  31. public void Constructor3_ArrayWithNullElementAsProvidersArgument_ShouldThrowArgumentException()
  32. {
  33. var catalog = CatalogFactory.Create();
  34. ExceptionAssert.ThrowsArgument<ArgumentException>("providers", () =>
  35. {
  36. new CompositionContainer(catalog, new ExportProvider[] { null });
  37. });
  38. }
  39. [TestMethod]
  40. public void Constructor2_ArrayAsProvidersArgument_ShouldNotAllowModificationAfterConstruction()
  41. {
  42. var providers = new ExportProvider[] { ExportProviderFactory.Create() };
  43. var container = new CompositionContainer(providers);
  44. providers[0] = null;
  45. Assert.IsNotNull(container.Providers[0]);
  46. }
  47. [TestMethod]
  48. public void Constructor3_ArrayAsProvidersArgument_ShouldNotAllowModificationAfterConstruction()
  49. {
  50. var providers = new ExportProvider[] { ExportProviderFactory.Create() };
  51. var container = new CompositionContainer(CatalogFactory.Create(), providers);
  52. providers[0] = null;
  53. Assert.IsNotNull(container.Providers[0]);
  54. }
  55. [TestMethod]
  56. public void Constructor1_ShouldSetProvidersPropertyToEmptyCollection()
  57. {
  58. var container = new CompositionContainer();
  59. EnumerableAssert.IsEmpty(container.Providers);
  60. }
  61. [TestMethod]
  62. public void Constructor2_EmptyArrayAsProvidersArgument_ShouldSetProvidersPropertyToEmpty()
  63. {
  64. var container = new CompositionContainer(new ExportProvider[0]);
  65. EnumerableAssert.IsEmpty(container.Providers);
  66. }
  67. [TestMethod]
  68. public void Constructor3_EmptyArrayAsProvidersArgument_ShouldSetProvidersPropertyToEmpty()
  69. {
  70. var container = new CompositionContainer(CatalogFactory.Create(), new ExportProvider[0]);
  71. EnumerableAssert.IsEmpty(container.Providers);
  72. }
  73. [TestMethod]
  74. public void Constructor1_ShouldSetCatalogPropertyToNull()
  75. {
  76. var container = new CompositionContainer();
  77. Assert.IsNull(container.Catalog);
  78. }
  79. [TestMethod]
  80. public void Constructor2_ShouldSetCatalogPropertyToNull()
  81. {
  82. var container = new CompositionContainer(new ExportProvider[0]);
  83. Assert.IsNull(container.Catalog);
  84. }
  85. [TestMethod]
  86. public void Constructor3_NullAsCatalogArgument_ShouldSetCatalogPropertyToNull()
  87. {
  88. var container = new CompositionContainer((ComposablePartCatalog)null, new ExportProvider[0]);
  89. Assert.IsNull(container.Catalog);
  90. }
  91. [TestMethod]
  92. public void Constructor3_ValueAsCatalogArgument_ShouldSetCatalogProperty()
  93. {
  94. var expectations = Expectations.GetCatalogs();
  95. foreach (var e in expectations)
  96. {
  97. var container = new CompositionContainer(e, new ExportProvider[0]);
  98. Assert.AreSame(e, container.Catalog);
  99. }
  100. }
  101. [TestMethod]
  102. public void Catalog_WhenDisposed_ShouldThrowObjectDisposed()
  103. {
  104. var container = CreateCompositionContainer();
  105. container.Dispose();
  106. ExceptionAssert.ThrowsDisposed(container, () =>
  107. {
  108. var catalog = container.Catalog;
  109. });
  110. }
  111. [TestMethod]
  112. public void Providers_WhenDisposed_ShouldThrowObjectDisposed()
  113. {
  114. var container = CreateCompositionContainer();
  115. container.Dispose();
  116. ExceptionAssert.ThrowsDisposed(container, () =>
  117. {
  118. var providers = container.Providers;
  119. });
  120. }
  121. [TestMethod]
  122. [Ignore]
  123. [WorkItem(579990)] // NullReferenceException
  124. public void ExportsChanged_Add_WhenDisposed_ShouldThrowObjectDisposed()
  125. {
  126. var container = CreateCompositionContainer();
  127. container.Dispose();
  128. ExceptionAssert.ThrowsDisposed(container, () =>
  129. {
  130. container.ExportsChanged += (o, s) => { };
  131. });
  132. }
  133. [TestMethod]
  134. [Ignore]
  135. [WorkItem(579990)] // NullReferenceException
  136. public void ExportsChanged_Remove_WhenDisposed_ShouldThrowObjectDisposed()
  137. {
  138. var container = CreateCompositionContainer();
  139. container.Dispose();
  140. ExceptionAssert.ThrowsDisposed(container, () =>
  141. {
  142. container.ExportsChanged -= (o, s) => { };
  143. });
  144. }
  145. [TestMethod]
  146. public void AddPart1_ImportOnlyPart_ShouldNotGetGarbageCollected()
  147. {
  148. var container = CreateCompositionContainer();
  149. var import = PartFactory.CreateImporter("Value", ImportCardinality.ZeroOrMore);
  150. CompositionBatch batch = new CompositionBatch();
  151. batch.AddPart(import);
  152. container.Compose(batch);
  153. var weakRef = new WeakReference(import);
  154. import = null;
  155. GC.Collect();
  156. GC.WaitForPendingFinalizers();
  157. Assert.IsNotNull(weakRef.Target, "Import only part should not have been collected!");
  158. GC.KeepAlive(container);
  159. }
  160. [TestMethod]
  161. public void Compose_WhenContainerDisposed_ShouldThrowObjectDisposed()
  162. {
  163. var container = CreateCompositionContainer();
  164. container.Dispose();
  165. CompositionBatch batch = new CompositionBatch();
  166. ExceptionAssert.ThrowsDisposed(container, () =>
  167. {
  168. container.Compose(batch);
  169. });
  170. }
  171. [TestMethod]
  172. public void GetExportOfT1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  173. {
  174. var container = CreateCompositionContainer();
  175. container.Dispose();
  176. ExceptionAssert.ThrowsDisposed(container, () =>
  177. {
  178. container.GetExport<string>();
  179. });
  180. }
  181. [TestMethod]
  182. public void GetExportOfT2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  183. {
  184. var container = CreateCompositionContainer();
  185. container.Dispose();
  186. ExceptionAssert.ThrowsDisposed(container, () =>
  187. {
  188. container.GetExport<string>("Contract");
  189. });
  190. }
  191. [TestMethod]
  192. public void GetExportOfTTMetadataView1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  193. {
  194. var container = CreateCompositionContainer();
  195. container.Dispose();
  196. ExceptionAssert.ThrowsDisposed(container, () =>
  197. {
  198. container.GetExport<string, object>();
  199. });
  200. }
  201. [TestMethod]
  202. public void GetExportOfTTMetadataView2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  203. {
  204. var container = CreateCompositionContainer();
  205. container.Dispose();
  206. ExceptionAssert.ThrowsDisposed(container, () =>
  207. {
  208. container.GetExport<string, object>("Contract");
  209. });
  210. }
  211. [TestMethod]
  212. public void GetExports1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  213. {
  214. var container = CreateCompositionContainer();
  215. container.Dispose();
  216. var definition = ImportDefinitionFactory.Create();
  217. ExceptionAssert.ThrowsDisposed(container, () =>
  218. {
  219. container.GetExports(definition);
  220. });
  221. }
  222. [TestMethod]
  223. public void GetExports2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  224. {
  225. var container = CreateCompositionContainer();
  226. container.Dispose();
  227. ExceptionAssert.ThrowsDisposed(container, () =>
  228. {
  229. container.GetExports(typeof(string), typeof(object), "Contract");
  230. });
  231. }
  232. [TestMethod]
  233. public void GetExportsOfT1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  234. {
  235. var container = CreateCompositionContainer();
  236. container.Dispose();
  237. ExceptionAssert.ThrowsDisposed(container, () =>
  238. {
  239. container.GetExports<string>();
  240. });
  241. }
  242. [TestMethod]
  243. public void GetExportsOfT2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  244. {
  245. var container = CreateCompositionContainer();
  246. container.Dispose();
  247. ExceptionAssert.ThrowsDisposed(container, () =>
  248. {
  249. container.GetExports<string>("Contract");
  250. });
  251. }
  252. [TestMethod]
  253. public void GetExportsOfTTMetadataView1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  254. {
  255. var container = CreateCompositionContainer();
  256. container.Dispose();
  257. ExceptionAssert.ThrowsDisposed(container, () =>
  258. {
  259. container.GetExports<string, object>();
  260. });
  261. }
  262. [TestMethod]
  263. public void GetExportsOfTTMetadataView2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  264. {
  265. var container = CreateCompositionContainer();
  266. container.Dispose();
  267. ExceptionAssert.ThrowsDisposed(container, () =>
  268. {
  269. container.GetExports<string, object>("Contract");
  270. });
  271. }
  272. [TestMethod]
  273. public void GetExportedValueOfT1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  274. {
  275. var container = CreateCompositionContainer();
  276. container.Dispose();
  277. ExceptionAssert.ThrowsDisposed(container, () =>
  278. {
  279. container.GetExportedValue<string>();
  280. });
  281. }
  282. [TestMethod]
  283. public void GetExportedValueOfT2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  284. {
  285. var container = CreateCompositionContainer();
  286. container.Dispose();
  287. ExceptionAssert.ThrowsDisposed(container, () =>
  288. {
  289. container.GetExportedValue<string>("Contract");
  290. });
  291. }
  292. [TestMethod]
  293. public void GetExportedValueOrDefaultOfT1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  294. {
  295. var container = CreateCompositionContainer();
  296. container.Dispose();
  297. ExceptionAssert.ThrowsDisposed(container, () =>
  298. {
  299. container.GetExportedValueOrDefault<string>();
  300. });
  301. }
  302. [TestMethod]
  303. public void GetExportedValueOrDefaultOfT2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  304. {
  305. var container = CreateCompositionContainer();
  306. container.Dispose();
  307. ExceptionAssert.ThrowsDisposed(container, () =>
  308. {
  309. container.GetExportedValueOrDefault<string>("Contract");
  310. });
  311. }
  312. [TestMethod]
  313. public void GetExportedValuesOfT1_WhenContainerDisposed_ShouldThrowObjectDisposed()
  314. {
  315. var container = CreateCompositionContainer();
  316. container.Dispose();
  317. ExceptionAssert.ThrowsDisposed(container, () =>
  318. {
  319. container.GetExportedValues<string>();
  320. });
  321. }
  322. [TestMethod]
  323. public void GetExportedValuesOfT2_WhenContainerDisposed_ShouldThrowObjectDisposed()
  324. {
  325. var container = CreateCompositionContainer();
  326. container.Dispose();
  327. ExceptionAssert.ThrowsDisposed(container, () =>
  328. {
  329. container.GetExportedValues<string>("Contract");
  330. });
  331. }
  332. [TestMethod]
  333. public void GetExports1_NullAsImportDefinitionArgument_ShouldThrowArgumentNull()
  334. {
  335. var container = CreateCompositionContainer();
  336. ExceptionAssert.ThrowsArgument<ArgumentNullException>("definition", () =>
  337. {
  338. container.GetExports((ImportDefinition)null);
  339. });
  340. }
  341. [TestMethod]
  342. public void GetExports2_NullAsTypeArgument_ShouldThrowArgumentNull()
  343. {
  344. var container = CreateCompositionContainer();
  345. ExceptionAssert.ThrowsArgument<ArgumentNullException>("type", () =>
  346. {
  347. container.GetExports((Type)null, typeof(string), "ContractName");
  348. });
  349. }
  350. [TestMethod]
  351. public void GetExportOfT1_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  352. {
  353. var container = CreateCompositionContainer();
  354. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  355. {
  356. container.GetExport<string>();
  357. });
  358. }
  359. [TestMethod]
  360. public void GetExportOfT2_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  361. {
  362. var container = CreateCompositionContainer();
  363. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  364. {
  365. container.GetExport<string>("Contract");
  366. });
  367. }
  368. [TestMethod]
  369. public void GetExportOfTTMetadataView1_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  370. {
  371. var container = CreateCompositionContainer();
  372. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  373. {
  374. container.GetExport<string, object>();
  375. });
  376. }
  377. [TestMethod]
  378. public void GetExportOfTTMetadataView2_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  379. {
  380. var container = CreateCompositionContainer();
  381. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  382. {
  383. container.GetExport<string, object>("Contract");
  384. });
  385. }
  386. [TestMethod]
  387. public void GetExports1_DefinitionAskingForExactlyOneContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  388. {
  389. var container = CreateCompositionContainer();
  390. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ExactlyOne);
  391. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  392. {
  393. container.GetExports(definition);
  394. });
  395. }
  396. [TestMethod]
  397. public void GetExports1_DefinitionAskingForExactlyZeroOrOneContractThatDoesNotExist_ShouldReturnEmpty()
  398. {
  399. var container = CreateCompositionContainer();
  400. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrOne);
  401. var exports = container.GetExports(definition);
  402. EnumerableAssert.IsEmpty(exports);
  403. }
  404. [TestMethod]
  405. public void GetExports1_DefinitionAskingForExactlyZeroOrMoreContractThatDoesNotExist_ShouldReturnEmpty()
  406. {
  407. var container = CreateCompositionContainer();
  408. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrMore);
  409. var exports = container.GetExports(definition);
  410. EnumerableAssert.IsEmpty(exports);
  411. }
  412. [TestMethod]
  413. public void GetExports2_AskingForContractThatDoesNotExist_ShouldReturnNoExports()
  414. {
  415. var container = CreateCompositionContainer();
  416. var exports = container.GetExports(typeof(string), (Type)null, "Contract");
  417. EnumerableAssert.IsEmpty(exports);
  418. }
  419. [TestMethod]
  420. public void GetExportsOfT1_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  421. {
  422. var container = CreateCompositionContainer();
  423. var exports = container.GetExports<string>();
  424. EnumerableAssert.IsEmpty(exports);
  425. }
  426. [TestMethod]
  427. public void GetExportsOfT2_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  428. {
  429. var container = CreateCompositionContainer();
  430. var exports = container.GetExports<string>("Contract");
  431. EnumerableAssert.IsEmpty(exports);
  432. }
  433. [TestMethod]
  434. public void GetExportsOfTTMetadataView1_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  435. {
  436. var container = CreateCompositionContainer();
  437. var exports = container.GetExports<string, object>();
  438. EnumerableAssert.IsEmpty(exports);
  439. }
  440. [TestMethod]
  441. public void GetExportsOfTTMetadataView2_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  442. {
  443. var container = CreateCompositionContainer();
  444. var exports = container.GetExports<string, object>("Contract");
  445. EnumerableAssert.IsEmpty(exports);
  446. }
  447. [TestMethod]
  448. public void GetExportedValueOfT1_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  449. {
  450. var container = CreateCompositionContainer();
  451. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  452. {
  453. container.GetExportedValue<string>();
  454. });
  455. }
  456. [TestMethod]
  457. public void GetExportedValueOfT2_AskingForContractThatDoesNotExist_ShouldThrowCardinalityMismatch()
  458. {
  459. var container = CreateCompositionContainer();
  460. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  461. {
  462. container.GetExportedValue<string>("Contract");
  463. });
  464. }
  465. [TestMethod]
  466. public void GetExportedValueOrDefaultOfT1_AskingForStringContractThatDoesNotExist_ShouldReturnNull()
  467. {
  468. var container = CreateCompositionContainer();
  469. var exportedValue = container.GetExportedValueOrDefault<string>();
  470. Assert.IsNull(exportedValue);
  471. }
  472. [TestMethod]
  473. public void GetExportedValueOrDefaultOfT2_AskingForStringContractThatDoesNotExist_ShouldReturnNull()
  474. {
  475. var container = CreateCompositionContainer();
  476. var exportedValue = container.GetExportedValueOrDefault<string>("Contract");
  477. Assert.IsNull(exportedValue);
  478. }
  479. [TestMethod]
  480. public void GetExportedValueOrDefaultOfT1_AskingForInt32ContractThatDoesNotExist_ShouldReturnZero()
  481. {
  482. var container = CreateCompositionContainer();
  483. var exportedValue = container.GetExportedValueOrDefault<int>();
  484. Assert.AreEqual(0, exportedValue);
  485. }
  486. [TestMethod]
  487. public void GetExportedValueOrDefaultOfT2_AskingForInt32ContractThatDoesNotExist_ShouldReturnZero()
  488. {
  489. var container = CreateCompositionContainer();
  490. var exportedValue = container.GetExportedValueOrDefault<int>("Contract");
  491. Assert.AreEqual(0, exportedValue);
  492. }
  493. [TestMethod]
  494. public void GetExportedValuesOfT1_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  495. {
  496. var container = CreateCompositionContainer();
  497. var exports = container.GetExportedValues<string>();
  498. EnumerableAssert.IsEmpty(exports);
  499. }
  500. [TestMethod]
  501. public void GetExportedValuesOfT2_AskingForContractThatDoesNotExist_ShouldReturnEmpty()
  502. {
  503. var container = CreateCompositionContainer();
  504. var exports = container.GetExports<string>("Contract");
  505. EnumerableAssert.IsEmpty(exports);
  506. }
  507. [TestMethod]
  508. public void GetExportOfT1_AskingForContractWithOneExport_ShouldReturnExport()
  509. {
  510. var container = ContainerFactory.Create(new MicroExport(ContractFromType(typeof(String)), "Value"));
  511. var export = container.GetExport<string>();
  512. Assert.AreEqual("Value", export.Value);
  513. }
  514. [TestMethod]
  515. public void GetExportOfT2_AskingForContractWithOneExport_ShouldReturnExport()
  516. {
  517. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  518. var export = container.GetExport<string>("Contract");
  519. Assert.AreEqual("Value", export.Value);
  520. }
  521. [TestMethod]
  522. public void GetExportOfTTMetadataView1_AskingForContractWithOneExport_ShouldReturnExport()
  523. {
  524. var container = ContainerFactory.Create(new MicroExport(ContractFromType(typeof(String)), "Value"));
  525. var export = container.GetExport<string, object>();
  526. Assert.AreEqual("Value", export.Value);
  527. }
  528. [TestMethod]
  529. public void GetExportOfTTMetadataView2_AskingForContractWithOneExport_ShouldReturnExport()
  530. {
  531. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  532. var export = container.GetExport<string, object>("Contract");
  533. Assert.AreEqual("Value", export.Value);
  534. }
  535. [TestMethod]
  536. public void GetExports1_AskingForExactlyOneContractWithOneExport_ShouldReturnExport()
  537. {
  538. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  539. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ExactlyOne);
  540. var exports = container.GetExports(definition);
  541. ExportsAssert.AreEqual(exports, "Value");
  542. }
  543. [TestMethod]
  544. public void GetExports1_AskingForZeroOrOneContractWithOneExport_ShouldReturnExport()
  545. {
  546. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  547. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrOne);
  548. var exports = container.GetExports(definition);
  549. ExportsAssert.AreEqual(exports, "Value");
  550. }
  551. [TestMethod]
  552. public void GetExports1_AskingForZeroOrMoreContractWithOneExport_ShouldReturnExport()
  553. {
  554. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  555. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrMore);
  556. var exports = container.GetExports(definition);
  557. ExportsAssert.AreEqual(exports, "Value");
  558. }
  559. [TestMethod]
  560. public void GetExports2_AskingForContractWithOneExport_ShouldReturnOneExport()
  561. {
  562. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  563. var exports = container.GetExports(typeof(string), (Type)null, "Contract");
  564. ExportsAssert.AreEqual(exports, "Value");
  565. }
  566. [TestMethod]
  567. public void GetExportsOfT1_AskingForContractWithOneExport_ShouldReturnOneExport()
  568. {
  569. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value"));
  570. var exports = container.GetExports<string>();
  571. ExportsAssert.AreEqual(exports, "Value");
  572. }
  573. [TestMethod]
  574. public void GetExportsOfT2_AskingForContractWithOneExport_ShouldReturnOneExport()
  575. {
  576. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  577. var exports = container.GetExports<string>("Contract");
  578. ExportsAssert.AreEqual(exports, "Value");
  579. }
  580. [TestMethod]
  581. public void GetExportsOfTTMetadataView1_AskingForContractWithOneExport_ShouldReturnOneExport()
  582. {
  583. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value"));
  584. var exports = container.GetExports<string, object>();
  585. ExportsAssert.AreEqual(exports, "Value");
  586. }
  587. [TestMethod]
  588. public void GetExportsOfTTMetadataView2_AskingForContractWithOneExport_ShouldReturnOneExport()
  589. {
  590. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  591. var exports = container.GetExports<string, object>("Contract");
  592. ExportsAssert.AreEqual(exports, "Value");
  593. }
  594. [TestMethod]
  595. public void GetExportedValueOfT1_AskingForContractWithOneExport_ShouldReturnExport()
  596. {
  597. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value"));
  598. var exportedValue = container.GetExportedValue<string>();
  599. Assert.AreEqual("Value", exportedValue);
  600. }
  601. [TestMethod]
  602. public void GetExportedValueOfT2_AskingForContractWithOneExport_ShouldReturnExport()
  603. {
  604. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  605. var exportedValue = container.GetExportedValue<string>("Contract");
  606. Assert.AreEqual("Value", exportedValue);
  607. }
  608. [TestMethod]
  609. public void GetExportedValueOrDefaultOfT1_AskingForContractWithOneExport_ShouldReturnExport()
  610. {
  611. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value"));
  612. var exportedValue = container.GetExportedValueOrDefault<string>();
  613. Assert.AreEqual("Value", exportedValue);
  614. }
  615. [TestMethod]
  616. public void GetExportedValueOrDefaultOfT2_AskingForContractWithOneExport_ShouldReturnExport()
  617. {
  618. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  619. var exportedValue = container.GetExportedValueOrDefault<string>("Contract");
  620. Assert.AreEqual("Value", exportedValue);
  621. }
  622. [TestMethod]
  623. public void GetExportedValuesOfT1_AskingForContractWithOneExport_ShouldReturnOneExport()
  624. {
  625. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value"));
  626. var exportedValues = container.GetExportedValues<string>();
  627. EnumerableAssert.AreEqual(exportedValues, "Value");
  628. }
  629. [TestMethod]
  630. public void GetExportedValuesOfT2_AskingForContractWithOneExport_ShouldReturnOneExport()
  631. {
  632. var container = ContainerFactory.Create(new MicroExport("Contract", "Value"));
  633. var exportedValues = container.GetExportedValues<string>("Contract");
  634. EnumerableAssert.AreEqual(exportedValues, "Value");
  635. }
  636. [TestMethod]
  637. public void GetExportOfT1_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  638. {
  639. var container = ContainerFactory.Create(new MicroExport(ContractFromType(typeof(String)), "Value1", "Value2"));
  640. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  641. {
  642. container.GetExport<string>();
  643. });
  644. }
  645. [TestMethod]
  646. public void GetExportOfT2_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  647. {
  648. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  649. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  650. {
  651. container.GetExport<string>("Contract");
  652. });
  653. }
  654. [TestMethod]
  655. public void GetExportOfTTMetadataView1_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  656. {
  657. var container = ContainerFactory.Create(new MicroExport(ContractFromType(typeof(String)), "Value1", "Value2"));
  658. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  659. {
  660. container.GetExport<string, object>();
  661. });
  662. }
  663. [TestMethod]
  664. public void GetExportOfTTMetadataView2_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  665. {
  666. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  667. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  668. {
  669. container.GetExport<string, object>("Contract");
  670. });
  671. }
  672. [TestMethod]
  673. public void GetExports1_AskingForExactlyOneContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  674. {
  675. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  676. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ExactlyOne);
  677. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  678. {
  679. container.GetExports(definition);
  680. });
  681. }
  682. [TestMethod]
  683. public void GetExports1_AskingForZeroOrOneContractWithMultipleExports_ShouldReturnZero()
  684. {
  685. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  686. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrOne);
  687. Assert.AreEqual(0, container.GetExports(definition).Count());
  688. }
  689. [TestMethod]
  690. public void GetExports1_AskingForZeroOrMoreContractWithMultipleExports_ShouldReturnMultipleExports()
  691. {
  692. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  693. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrMore);
  694. var exports = container.GetExports(definition);
  695. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  696. }
  697. [TestMethod]
  698. public void GetExports2_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  699. {
  700. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  701. var exports = container.GetExports(typeof(string), (Type)null, "Contract");
  702. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  703. }
  704. [TestMethod]
  705. public void GetExportsOfT1_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  706. {
  707. var container = ContainerFactory.Create(new MicroExport(typeof(String), "Value1", "Value2"));
  708. var exports = container.GetExports<string>();
  709. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  710. }
  711. [TestMethod]
  712. public void GetExportsOfT2_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  713. {
  714. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  715. var exports = container.GetExports<string>("Contract");
  716. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  717. }
  718. [TestMethod]
  719. public void GetExportsOfTTMetadataView1_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  720. {
  721. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value1", "Value2"));
  722. var exports = container.GetExports<string, object>();
  723. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  724. }
  725. [TestMethod]
  726. public void GetExportsOfTTMetadataView2_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  727. {
  728. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  729. var exports = container.GetExports<string, object>("Contract");
  730. ExportsAssert.AreEqual(exports, "Value1", "Value2");
  731. }
  732. [TestMethod]
  733. public void GetExportedValueOfT1_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  734. {
  735. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value1", "Value2"));
  736. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  737. {
  738. container.GetExportedValue<string>();
  739. });
  740. }
  741. [TestMethod]
  742. public void GetExportedValueOfT2_AskingForContractWithMultipleExports_ShouldThrowCardinalityMismatch()
  743. {
  744. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  745. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  746. {
  747. container.GetExportedValue<string>("Contract");
  748. });
  749. }
  750. [TestMethod]
  751. public void GetExportedValueOrDefaultOfT1_AskingForContractWithMultipleExports_ShouldReturnZero()
  752. {
  753. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value1", "Value2"));
  754. Assert.IsNull(container.GetExportedValueOrDefault<string>());
  755. }
  756. [TestMethod]
  757. public void GetExportedValueOrDefaultOfT2_AskingForContractWithMultipleExports_ShouldReturnZero()
  758. {
  759. var container = ContainerFactory.Create(new MicroExport("Contract", "Value1", "Value2"));
  760. Assert.IsNull(container.GetExportedValueOrDefault<string>("Contract"));
  761. }
  762. [TestMethod]
  763. public void GetExportedValuesOfT1_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  764. {
  765. var container = ContainerFactory.Create(new MicroExport(typeof(string), "Value1", "Value2"));
  766. var exportedValues = container.GetExportedValues<string>();
  767. EnumerableAssert.AreEqual(exportedValues, "Value1", "Value2");
  768. }
  769. [TestMethod]
  770. public void GetExportedValuesOfT2_AskingForContractWithMultipleExports_ShouldReturnMultipleExports()
  771. {
  772. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), "Value1", "Value2"));
  773. var exportedValues = container.GetExportedValues<string>("Contract");
  774. EnumerableAssert.AreEqual(exportedValues, "Value1", "Value2");
  775. }
  776. [TestMethod]
  777. public void GetExports1_AskingForExactlyOneAndAll_ShouldThrowCardinalityMismatch()
  778. {
  779. var container = ContainerFactory.Create(new MicroExport("Contract1", "Value1", "Value2", "Value3"),
  780. new MicroExport("Contract2", "Value4", "Value5", "Value6"));
  781. var definition = ImportDefinitionFactory.Create(import => true, ImportCardinality.ExactlyOne);
  782. ExceptionAssert.Throws<ImportCardinalityMismatchException>(() =>
  783. {
  784. container.GetExports(definition);
  785. });
  786. }
  787. [TestMethod]
  788. public void GetExports1_AskingForZeroOrOneAndAll_ShouldReturnZero()
  789. {
  790. var container = ContainerFactory.Create(new MicroExport("Contract1", "Value1", "Value2", "Value3"),
  791. new MicroExport("Contract2", "Value4", "Value5", "Value6"));
  792. var definition = ImportDefinitionFactory.Create(import => true, ImportCardinality.ZeroOrOne);
  793. Assert.AreEqual(0, container.GetExports(definition).Count());
  794. }
  795. [TestMethod]
  796. public void GetExports1_AskingForZeroOrMoreAndAll_ShouldReturnAll()
  797. {
  798. var container = ContainerFactory.Create(new MicroExport("Contract1", "Value1", "Value2", "Value3"),
  799. new MicroExport("Contract2", "Value4", "Value5", "Value6"));
  800. var definition = ImportDefinitionFactory.Create(import => true, ImportCardinality.ZeroOrMore);
  801. var exports = container.GetExports(definition);
  802. ExportsAssert.AreEqual(exports, "Value1", "Value2", "Value3",
  803. "Value4", "Value5", "Value6");
  804. }
  805. [TestMethod]
  806. public void GetExportOfT1_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  807. {
  808. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  809. var export = container.GetExport<string>();
  810. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  811. {
  812. var value = export.Value;
  813. });
  814. }
  815. [TestMethod]
  816. public void GetExportOfT2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  817. {
  818. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  819. var export = container.GetExport<string>("Contract");
  820. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  821. {
  822. var value = export.Value;
  823. });
  824. }
  825. [TestMethod]
  826. public void GetExportOfTTMetadataView1_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  827. {
  828. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  829. var export = container.GetExport<string, object>();
  830. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  831. {
  832. var value = export.Value;
  833. });
  834. }
  835. [TestMethod]
  836. public void GetExportOfTTMetadataView2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  837. {
  838. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  839. var export = container.GetExport<string, object>("Contract");
  840. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  841. {
  842. var value = export.Value;
  843. });
  844. }
  845. [TestMethod]
  846. public void GetExports2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  847. {
  848. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  849. var exports = container.GetExports(typeof(string), (Type)null, "Contract");
  850. Assert.AreEqual(1, exports.Count());
  851. var export = exports.ElementAt(0);
  852. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  853. {
  854. var value = export.Value;
  855. });
  856. }
  857. [TestMethod]
  858. public void GetExportsOfT1_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  859. {
  860. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  861. var exports = container.GetExports<string>();
  862. Assert.AreEqual(1, exports.Count());
  863. var export = exports.ElementAt(0);
  864. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  865. {
  866. var value = export.Value;
  867. });
  868. }
  869. [TestMethod]
  870. public void GetExportsOfT2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  871. {
  872. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  873. var exports = container.GetExports<string>("Contract");
  874. Assert.AreEqual(1, exports.Count());
  875. var export = exports.ElementAt(0);
  876. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  877. {
  878. var value = export.Value;
  879. });
  880. }
  881. [TestMethod]
  882. public void GetExportsOfTTMetadataView1_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  883. {
  884. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  885. var exports = container.GetExports<string, object>();
  886. Assert.AreEqual(1, exports.Count());
  887. var export = exports.ElementAt(0);
  888. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  889. {
  890. var value = export.Value;
  891. });
  892. }
  893. [TestMethod]
  894. public void GetExportsOfTTMetadataView2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  895. {
  896. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  897. var exports = container.GetExports<string, object>("Contract");
  898. Assert.AreEqual(1, exports.Count());
  899. var export = exports.ElementAt(0);
  900. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  901. {
  902. var value = export.Value;
  903. });
  904. }
  905. [TestMethod]
  906. public void GetExportedValueOfT1_StringAsTTypeArgumentAskingForContractWithObjectExport_ShouldThrowContractMismatch()
  907. {
  908. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  909. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  910. {
  911. container.GetExportedValue<string>();
  912. });
  913. }
  914. [TestMethod]
  915. public void GetExportedValueOfT2_StringAsTTypeArgumentAskingForContractWithObjectExport_ShouldThrowContractMismatch()
  916. {
  917. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  918. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  919. {
  920. container.GetExportedValue<string>("Contract");
  921. });
  922. }
  923. [TestMethod]
  924. public void GetExportedValueOrDefaultOfT1_StringAsTTypeArgumentAskingForContractWithObjectExport_ShouldThrowContractMismatch()
  925. {
  926. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  927. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  928. {
  929. container.GetExportedValueOrDefault<string>();
  930. });
  931. }
  932. [TestMethod]
  933. public void GetExportedValueOrDefaultOfT2_StringAsTTypeArgumentAskingForContractWithObjectExport_ShouldThrowContractMismatch()
  934. {
  935. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  936. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  937. {
  938. container.GetExportedValueOrDefault<string>("Contract");
  939. });
  940. }
  941. [TestMethod]
  942. public void GetExportedValuesOfT1_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  943. {
  944. var container = ContainerFactory.Create(new MicroExport(typeof(string), new object()));
  945. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  946. {
  947. container.GetExportedValues<string>();
  948. });
  949. }
  950. [TestMethod]
  951. public void GetExportedValuesOfT2_StringAsTTypeArgumentAskingForContractWithOneObjectExport_ShouldThrowContractMismatch()
  952. {
  953. var container = ContainerFactory.Create(new MicroExport("Contract", typeof(string), new object()));
  954. ExceptionAssert.Throws<CompositionContractMismatchException>(() =>
  955. {
  956. container.GetExportedValues<string>("Contract");
  957. });
  958. }
  959. [TestMethod]
  960. public void GetExportOfT1_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  961. {
  962. var parent = ContainerFactory.Create(new MicroExport(typeof(string), "Parent"));
  963. var child = ContainerFactory.Create(parent);
  964. var export = child.GetExport<string>();
  965. Assert.AreEqual("Parent", export.Value);
  966. }
  967. [TestMethod]
  968. public void GetExportOfT2_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  969. {
  970. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  971. var child = ContainerFactory.Create(parent);
  972. var export = child.GetExport<string>("Contract");
  973. Assert.AreEqual("Parent", export.Value);
  974. }
  975. [TestMethod]
  976. public void GetExportOfTTMetadataView1_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  977. {
  978. var parent = ContainerFactory.Create(new MicroExport(typeof(string), "Parent"));
  979. var child = ContainerFactory.Create(parent);
  980. var export = child.GetExport<string, object>();
  981. Assert.AreEqual("Parent", export.Value);
  982. }
  983. [TestMethod]
  984. public void GetExportOfTTMetadataView2_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  985. {
  986. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  987. var child = ContainerFactory.Create(parent);
  988. var export = child.GetExport<string, object>("Contract");
  989. Assert.AreEqual("Parent", export.Value);
  990. }
  991. [TestMethod]
  992. public void GetExports1_AskingForExactlyOneContractFromChildWithExportInParentContainer_ShouldReturnExport()
  993. {
  994. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  995. var child = ContainerFactory.Create(parent);
  996. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ExactlyOne);
  997. var exports = child.GetExports(definition);
  998. ExportsAssert.AreEqual(exports, "Parent");
  999. }
  1000. [TestMethod]
  1001. public void GetExports1_AskingForZeroOrOneContractFromChildWithExportInParentContainer_ShouldReturnExport()
  1002. {
  1003. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  1004. var child = ContainerFactory.Create(parent);
  1005. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrOne);
  1006. var exports = child.GetExports(definition);
  1007. ExportsAssert.AreEqual(exports, "Parent");
  1008. }
  1009. [TestMethod]
  1010. public void GetExports1_AskingForZeroOrMoreContractFromChildWithExportInParentContainer_ShouldReturnExport()
  1011. {
  1012. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  1013. var child = ContainerFactory.Create(parent);
  1014. var definition = ImportDefinitionFactory.Create("Contract", ImportCardinality.ZeroOrMore);
  1015. var exports = child.GetExports(definition);
  1016. ExportsAssert.AreEqual(exports, "Parent");
  1017. }
  1018. [TestMethod]
  1019. public void GetExports2_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  1020. {
  1021. var parent = ContainerFactory.Create(new MicroExport("Contract", "Parent"));
  1022. var child = ContainerFactory.Create(parent);
  1023. var exports = child.GetExports(typeof(string), (Type)null, "Contract");
  1024. ExportsAssert.AreEqual(exports, "Parent");
  1025. }
  1026. [TestMethod]
  1027. public void GetExportsOfT1_AskingForContractFromChildWithExportInParentContainer_ShouldReturnExport()
  1028. {
  1029. var parent = ContainerFactory.Create(new MicroExport(typeof(string), "Parent"));
  1030. var child = ContainerFactory.Create(parent);
  1031. var exports = child.GetExports<string>();
  1032. ExportsAsse

Large files files are truncated, but you can click here to view the full file