Example #1
0
        public void setter_with_incorrect_target_type()
        {
            var propertyName = "DictionaryProperty";
            var publicOuter  = PublicOuter.Create();

            Assert.Throws <ArgumentException>(() => VisibilityBypasser.Instance.GeneratePropertySetter <int>(publicOuter, propertyName));
        }
        public void derived_class_return_type()
        {
            var fieldName   = "DerivedField";
            var publicOuter = PublicOuter.Create();

            Assert.Throws <Exception>(() => VisibilityBypasser.Instance.GenerateFieldReadAccessor <PublicOuter, Derived>(fieldName));
        }
        public void incorrect_result_type()
        {
            var fieldName   = "_int32Field";
            var publicOuter = PublicOuter.Create();

            Assert.Throws <Exception>(() => VisibilityBypasser.Instance.GenerateFieldReadAccessor <PublicOuter, string>(fieldName));
        }
        public void correctly_write_private_value_type()
        {
            var fieldName   = "_writeableIntField";
            var publicOuter = PublicOuter.Create();
            var newIntValue = 42;
            var action      = VisibilityBypasser.Instance.GenerateFieldWriteAccessor <int>(typeof(PublicOuter), fieldName);

            Assert.DoesNotThrow(() => action(publicOuter, newIntValue));
            Assert.That(publicOuter.GetWriteableIntField == newIntValue);
        }
        public void private_reference_returning_method_on_public_object()
        {
            var methodName  = "PublicOuterReturningMethod";
            var publicOuter = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GenerateParameterlessMethodCaller <PublicOuter, PublicOuter>(methodName);
            var actualValue  = methodCaller(publicOuter);

            Assert.NotNull(actualValue);
        }
        public void private_reference_property_on_public_object()
        {
            var propertyName = "PublicOuterProperty";
            var publicOuter  = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, PublicOuter>(propertyName);
            var actualValue  = methodCaller(publicOuter);

            Assert.NotNull(actualValue);
        }
        public void incorrect_object_reference_does_not_throw()
        {
            var fieldName      = "_writableStringField";
            var publicOuter    = PublicOuter.Create();
            var newStringValue = "newStringValue";
            var action         = VisibilityBypasser.Instance.GenerateFieldWriteAccessor <string>(typeof(PublicOuter), fieldName);

            Assert.DoesNotThrow(() => action(new List <string>(), newStringValue));
            Assert.That(publicOuter.GetWritableStringField != newStringValue);
        }
        public void private_int32_on_public_object()
        {
            var fieldName     = "_int32Field";
            var publicOuter   = PublicOuter.Create();
            var expectedValue = 7;

            var fieldAccessor = VisibilityBypasser.Instance.GenerateFieldReadAccessor <PublicOuter, int>(fieldName);
            var actualValue   = fieldAccessor(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void base_class_return_type()
        {
            var fieldName     = "DerivedField";
            var publicOuter   = PublicOuter.Create();
            var expectedValue = publicOuter.DerivedField;

            var fieldAccessor = VisibilityBypasser.Instance.GenerateFieldReadAccessor <PublicOuter, object>(fieldName);
            var actualValue   = fieldAccessor(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void base_result_type()
        {
            var propertyName  = "Int32Property";
            var expectedValue = 13;
            var publicOuter   = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, object>(propertyName);
            var actualValue  = methodCaller(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void base_result_type()
        {
            var methodName    = "Int32ReturningMethod";
            var expectedValue = 9;
            var publicOuter   = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GenerateParameterlessMethodCaller <PublicOuter, object>(methodName);
            var actualValue  = methodCaller(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
Example #12
0
        public void private_reference_property_on_public_object()
        {
            var propertyName = "DictionaryProperty";
            var publicOuter  = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, Dictionary <string, object> >(propertyName);
            var actualValue  = methodCaller(publicOuter);

            Assert.NotNull(actualValue);
            Assert.That((string)actualValue["originalKey"] == "originalValue");
        }
        public void private_value_property_on_public_object()
        {
            var propertyName  = "Int32Property";
            var expectedValue = 13;
            var publicOuter   = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, int>(propertyName);
            var actualValue  = methodCaller(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void method_with_parameter_unknown_type()
        {
            var methodName    = "StringTakingAndReturningMethod";
            var publicOuter   = PublicOuter.Create();
            var expectedValue = "foo";

            var methodCaller = VisibilityBypasser.Instance.GenerateOneParameterMethodCaller <PublicOuter, object, string>(methodName);
            var actualValue  = methodCaller(publicOuter, expectedValue);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void private_value_returning_method_on_public_object()
        {
            var methodName    = "Int32ReturningMethod";
            var expectedValue = 9;
            var publicOuter   = PublicOuter.Create();

            var methodCaller = VisibilityBypasser.Instance.GenerateParameterlessMethodCaller <PublicOuter, int>(methodName);
            var actualValue  = methodCaller(publicOuter);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void private_reference_property_on_private_object()
        {
            var assemblyName = Assembly.GetExecutingAssembly().FullName;
            var typeName     = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var propertyName = "PrivateInnerProperty";
            var privateInner = PublicOuter.CreatePrivateInner();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <object>(assemblyName, typeName, propertyName);
            var actualValue  = methodCaller(privateInner);

            Assert.NotNull(actualValue);
        }
        public void private_value_property_on_private_object()
        {
            var assemblyName  = Assembly.GetExecutingAssembly().FullName;
            var typeName      = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var propertyName  = "Int32Property";
            var expectedValue = 11;
            var privateInner  = PublicOuter.CreatePrivateInner();

            var methodCaller = VisibilityBypasser.Instance.GeneratePropertyAccessor <int>(assemblyName, typeName, propertyName);
            var actualValue  = methodCaller(privateInner);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void method_with_parameter_unknown_instance_types()
        {
            var assemblyName  = Assembly.GetExecutingAssembly().FullName;
            var typeName      = "NewRelic.Reflection.UnitTests.PublicOuter";
            var methodName    = "StringTakingAndReturningMethod";
            var publicOuter   = PublicOuter.Create();
            var expectedValue = "foo";

            var methodCaller = VisibilityBypasser.Instance.GenerateOneParameterMethodCaller <string, string>(assemblyName, typeName, methodName);
            var actualValue  = methodCaller(publicOuter, expectedValue);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void private_value_returning_method_on_private_object()
        {
            var assemblyName  = Assembly.GetExecutingAssembly().FullName;
            var typeName      = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var methodName    = "Int32ReturningMethod";
            var expectedValue = 5;
            var privateInner  = PublicOuter.CreatePrivateInner();

            var methodCaller = VisibilityBypasser.Instance.GenerateParameterlessMethodCaller <int>(assemblyName, typeName, methodName);
            var actualValue  = methodCaller(privateInner);

            Assert.AreEqual(expectedValue, actualValue);
        }
        public void private_int32_on_private_object()
        {
            var assemblyName  = Assembly.GetExecutingAssembly().FullName;
            var typeName      = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var fieldName     = "_int32Field";
            var privateInner  = PublicOuter.CreatePrivateInner();
            var expectedValue = 3;

            var fieldAccessor = VisibilityBypasser.Instance.GenerateFieldReadAccessor <int>(assemblyName, typeName, fieldName);
            var actualValue   = fieldAccessor(privateInner);

            Assert.AreEqual(expectedValue, actualValue);
        }
Example #21
0
        public void set_private_value_property_on_public_object()
        {
            var propertyName = "Int32Property";
            var publicOuter  = PublicOuter.Create();

            var getter        = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, int>(propertyName);
            var originalValue = getter(publicOuter);

            var setter = VisibilityBypasser.Instance.GeneratePropertySetter <int>(publicOuter, propertyName);

            setter(originalValue + 1);

            var newValue = getter(publicOuter);

            Assert.AreEqual(newValue, originalValue + 1);
        }
Example #22
0
        public void set_private_value_property_on_private_object()
        {
            var assemblyName = Assembly.GetExecutingAssembly().FullName;
            var typeName     = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var propertyName = "Int32Property";
            var privateInner = PublicOuter.CreatePrivateInner();

            var getter        = VisibilityBypasser.Instance.GeneratePropertyAccessor <int>(assemblyName, typeName, propertyName);
            var originalValue = getter(privateInner);

            var setter = VisibilityBypasser.Instance.GeneratePropertySetter <int>(privateInner, propertyName);

            setter(originalValue + 1);

            var newValue = getter(privateInner);

            Assert.AreEqual(newValue, originalValue + 1);
        }
Example #23
0
        public void set_private_reference_property_on_public_object()
        {
            var propertyName = "DictionaryProperty";
            var publicOuter  = PublicOuter.Create();

            var getter        = VisibilityBypasser.Instance.GeneratePropertyAccessor <PublicOuter, Dictionary <string, object> >(propertyName);
            var originalValue = getter(publicOuter);

            var setter = VisibilityBypasser.Instance.GeneratePropertySetter <Dictionary <string, object> >(publicOuter, propertyName);

            setter(new Dictionary <string, object>()
            {
                { "newKey", "newValue" }
            });

            var newValue = getter(publicOuter);

            Assert.AreNotSame(originalValue, newValue);
            Assert.That((string)newValue["newKey"] == "newValue");
        }
Example #24
0
        public void set_private_reference_property_on_private_object()
        {
            var assemblyName = Assembly.GetExecutingAssembly().FullName;
            var typeName     = "NewRelic.Reflection.UnitTests.PublicOuter+PrivateInner";
            var propertyName = "DictionaryProperty";
            var privateInner = PublicOuter.CreatePrivateInner();

            var getter        = VisibilityBypasser.Instance.GeneratePropertyAccessor <object>(assemblyName, typeName, propertyName);
            var originalValue = getter(privateInner);

            var setter = VisibilityBypasser.Instance.GeneratePropertySetter <Dictionary <string, object> >(privateInner, propertyName);

            setter(new Dictionary <string, object>()
            {
                { "newKey", "newValue" }
            });

            var newValue = (Dictionary <string, object>)getter(privateInner);

            Assert.AreNotSame(originalValue, newValue);
            Assert.That((string)newValue["newKey"] == "newValue");
        }
Example #25
0
        public void setter_with_incorrect_property_name()
        {
            var publicOuter = PublicOuter.Create();

            Assert.Throws <KeyNotFoundException>(() => VisibilityBypasser.Instance.GeneratePropertySetter <int>(publicOuter, "does_not_exist"));
        }