public void TryFindReturnsNullIfNotPresent()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            IXmlMappingEngine candidate;
            Assert.IsFalse(factory.TryFind("Css.V10_2", out candidate));
            Assert.IsNull(candidate);
        }
        public void FindReturnsLowerMinorVersion()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            var engine = new Mock<IXmlMappingEngine>();
            var e = engine.Object;
            f.Setup(x => x.TryFind("Css.V10", out e)).Returns(true);

            var candidate = factory.Find("Css.V10_2");
            Assert.AreEqual(engine.Object, candidate);
        }
        public void TryFindReturnsEngineIfPresent()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            var engine = new Mock<IXmlMappingEngine>();
            var e = engine.Object;
            f.Setup(x => x.TryFind("Css.V10_2", out e)).Returns(true);

            IXmlMappingEngine candidate;
            Assert.IsTrue(factory.TryFind("Css.V10_2", out candidate));
            Assert.AreEqual(engine.Object, candidate);
        }
        public void FindThrowsUnexpectedSchema()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            try
            {
                factory.Find("Css.V10_2");

                throw new NotImplementedException("Should throw XmlEngineResolutionException");
            }
            catch (XmlEngineResolutionException ex)
            {
                Assert.AreEqual(XmlEngineResolutionErrorCode.UnexpectedSchema, ex.Code);
            }
        }
        public void FindThrowsIfAsmStringInvalid()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            s.Setup(x => x.SchemaExists("Css")).Returns(true);

            try
            {
                factory.Find("Css.V10.1");

                throw new NotImplementedException("Should throw MappingException");
            }
            catch (XmlEngineResolutionException ex)
            {
                Assert.AreEqual(XmlEngineResolutionErrorCode.Undetermined, ex.Code);
            }
        }
        public void FindThrowsVersionTooHigh()
        {
            var f = new Mock<IXmlMappingEngineFactory>();
            var s = new Mock<IXmlSchemaRegistry>();
            var factory = new CompatibleXmlMappingEngineFactory(f.Object, s.Object);

            s.Setup(x => x.SchemaExists("Css")).Returns(true);

            var engine = new Mock<IXmlMappingEngine>();
            var e = engine.Object;
            f.Setup(x => x.TryFind("Css.V9", out e)).Returns(true);

            try
            {
                factory.Find("Css.V10_2");

                throw new NotImplementedException("Should throw XmlEngineResolutionException");
            }
            catch (XmlEngineResolutionException ex)
            {
                Assert.AreEqual(XmlEngineResolutionErrorCode.MessageVersionTooHigh, ex.Code);
            }
        }