Beispiel #1
0
        public void GenerateType()
        {
            // Arrange
            Type baseType = typeof(MyBaseType);

            Type[] interfaceTypes = new Type[] { typeof(SomeInterfaceA), typeof(SomeInterfaceB) };

            // Act
            Type newType = DynamicTypeGenerator.GenerateType("SomeTypeName", baseType, interfaceTypes);

            // Assert
            Assert.AreEqual("System.Web.Mvc.{Dynamic}.SomeTypeName", newType.FullName, "New type name is incorrect.");
            Assert.IsTrue(newType.IsPublic, "New type should have public visibility.");
            Assert.IsTrue(newType.IsSubclassOf(baseType), "New type does not have proper base class.");
            Assert.IsTrue(typeof(SomeInterfaceA).IsAssignableFrom(newType), "New type does not implement SomeInterfaceA.");
            Assert.IsTrue(typeof(SomeInterfaceB).IsAssignableFrom(newType), "New type does not implement SomeInterfaceB.");

            ConstructorInfo[] constructors = newType.GetConstructors();
            Assert.AreEqual(3, constructors.Length, "Incorrect number of public constructors.");

            Assert.AreEqual(
                baseType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Length,
                newType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Length,
                "Number of public instance methods should not have increased.");

            MyBaseType o1 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 1, 10, 100, 1000 });

            Assert.AreEqual(1, o1.ParamA);
            Assert.AreEqual(10, o1.ParamB);
            Assert.AreEqual(100, o1.ParamC);
            Assert.AreEqual("public", o1.ConstructorCalled);

            MyBaseType o2 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 0, 0, 0, (short)0 });

            Assert.AreEqual("protected", o2.ConstructorCalled);

            MyBaseType o3 = (MyBaseType)Activator.CreateInstance(newType, new object[] { 0, 0, 0, (long)0 });

            Assert.AreEqual("protected internal", o3.ConstructorCalled);

            SomeInterfaceA oA = (SomeInterfaceA)o1;

            Assert.AreEqual("Hello from sealed A!", oA.SomeMethodA(), "SomeInterfaceA was not implemented correctly.");

            SomeInterfaceB oB = (SomeInterfaceB)o1;

            Assert.AreEqual("Hello from virtual B: 42!", oB.SomeMethodB(42), "SomeInterfaceB was not implemented correctly.");
        }
Beispiel #2
0
        public async Task <Response <MyBaseType> > GetValidAsync(CancellationToken cancellationToken = default)
        {
            using var message = CreateGetValidRequest();
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 200:
            {
                MyBaseType value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                if (document.RootElement.ValueKind == JsonValueKind.Null)
                {
                    value = null;
                }
                else
                {
                    value = MyBaseType.DeserializeMyBaseType(document.RootElement);
                }
                return(Response.FromValue(value, message.Response));
            }