public void WriteManifest_ForExportWithMetadata_Succeeds()
        {
            var writer   = new StringWriter();
            var metadata = new Dictionary <string, object>();

            metadata["mykey"]    = "simple text";
            metadata["v"]        = 100;
            metadata["identity"] = typeof(DefinitionsCacheWriterTestCase);

            DefinitionsCacheWriter.write_manifest(writer,
                                                  new[] { new ExportDefinition("contractName", metadata) },
                                                  new ImportDefinition[0]);

            writer.GetStringBuilder().ToString().Should().Be(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<manifest>
  <exports>
    <export>
      <contract>contractName</contract>
      <metadata>
        <entry key=""mykey"" type=""System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">simple text</entry>
        <entry key=""v"" type=""System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">100</entry>
        <entry key=""identity"" type=""System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">Castle.Extensibility.Tests.DefinitionsCacheWriterTestCase, Castle.Extensibility.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</entry>
      </metadata>
    </export>
  </exports>
  <imports />
</manifest>");
        }
        public void CacheWriterProduction_IsSuccessfullyReadByCacheReader_2()
        {
            var writer   = new StringWriter();
            var metadata = new Dictionary <string, object>();

            metadata["mykey"]    = "simple text";
            metadata["v"]        = 100;
            metadata["identity"] = typeof(DefinitionsCacheWriterTestCase);

            DefinitionsCacheWriter.write_manifest(writer,
                                                  new[] { new ExportDefinition("contractName", metadata) },
                                                  new ImportDefinition[0]);

            var cache = DefinitionsCacheReader.build_manifest(
                new StringReader(writer.GetStringBuilder().ToString()),
                "path",
                new StubBindingContext(typeof(DefinitionsCacheWriterTestCase)), BundleName);

            cache.Exports.Count().Should().Be(1);
            cache.Imports.Count().Should().Be(0);
            var def = cache.Exports.ElementAt(0);

            def.ContractName.Should().Be("contractName");
            var emetadata = def.Metadata;

            emetadata.Count.Should().Be(4);
            emetadata["mykey"].Should().Be("simple text");
            emetadata["v"].Should().Be(100);
            emetadata["identity"].Should().Be(typeof(DefinitionsCacheWriterTestCase));
        }
        public void WriteManifest_ForEmptyDefinitions_Succeeds()
        {
            var writer = new StringWriter();

            DefinitionsCacheWriter.write_manifest(writer, new ExportDefinition[0], new ImportDefinition[0]);
            writer.GetStringBuilder().ToString().Should().Be(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<manifest>
  <exports />
  <imports />
</manifest>");
        }
        public void WriteManifest_ForExport_Succeeds()
        {
            var writer = new StringWriter();

            DefinitionsCacheWriter.write_manifest(writer,
                                                  new[] { new ExportDefinition("contractName", new Dictionary <string, object>()) },
                                                  new ImportDefinition[0]);

            writer.GetStringBuilder().ToString().Should().Be(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<manifest>
  <exports>
    <export>
      <contract>contractName</contract>
    </export>
  </exports>
  <imports />
</manifest>");
        }
        public void WriteManifest_ForImport_Succeeds()
        {
            var writer = new StringWriter();

            DefinitionsCacheWriter.write_manifest(writer,
                                                  new ExportDefinition[0],
                                                  new [] { new ContractBasedImportDefinition("Name",
                                                                                             "typeIdentity", Enumerable.Empty <KeyValuePair <string, Type> >(), ImportCardinality.ZeroOrOne, true, false, CreationPolicy.Any) });

            writer.GetStringBuilder().ToString().Should().Be(
                @"<?xml version=""1.0"" encoding=""utf-16""?>
<manifest>
  <exports />
  <imports>
    <import>
      <contract>Name</contract>
      <cardinality>ZeroOrOne</cardinality>
    </import>
  </imports>
</manifest>");
        }
        public void CacheWriterProduction_IsSuccessfullyReadByCacheReader_1()
        {
            var writer = new StringWriter();

            DefinitionsCacheWriter.write_manifest(writer,
                                                  new ExportDefinition[0],
                                                  new[] { new ContractBasedImportDefinition("Name",
                                                                                            "typeIdentity", Enumerable.Empty <KeyValuePair <string, Type> >(), ImportCardinality.ZeroOrOne, true, false, CreationPolicy.Any) });

            var cache = DefinitionsCacheReader.build_manifest(
                new StringReader(writer.GetStringBuilder().ToString()),
                "path",
                new StubBindingContext(), BundleName);

            cache.Exports.Count().Should().Be(0);
            cache.Imports.Count().Should().Be(1);
            var importDef = cache.Imports.ElementAt(0) as ContractBasedImportDefinition;

            importDef.ContractName.Should().Be("Name");
            importDef.Cardinality.Should().Be(ImportCardinality.ZeroOrOne);
        }