public void call_generic_method_with_type_constraint_on_class_generic_type()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var derivedClass           = new DerivedClass();
            var defaultClass           = new DefaultClass();
            var genClass = new GenericClassComplexConstraints <DerivedClass, DefaultClass, BaseClass>();

            //Act
            genClass.GenericMethodOne <DefaultClass>(defaultClass, derivedClass);

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "GenericMethodOne", "!!0,NewRelic.Agent.Tests.ProfiledMethods.BaseClass", genClass, new object[] { defaultClass, derivedClass }, null, null, "NewRelic.Agent.Tests.ProfiledMethods.GenericClassComplexConstraints`3");
        }
        public void call_method_passing_on_generic_class_with_type_constraint_relationship_between_gentypes()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var derivedClass           = new DerivedClass();
            var defaultClass           = new DefaultClass();
            var genClass = new GenericClassComplexConstraints <DerivedClass, DefaultClass, BaseClass>();

            //Act
            genClass.DefaultMethod(derivedClass, defaultClass);

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "DefaultMethod", "!0,!1", genClass, new object[] { derivedClass, defaultClass }, null, null, "NewRelic.Agent.Tests.ProfiledMethods.GenericClassComplexConstraints`3");
        }
        public void call_generic_method_with_multiple_type_constraints_on_class_generic_types()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var baseClass    = new BaseClass();
            var derivedClass = new DerivedClass();
            var defaultClass = new DefaultClass();
            var genClass     = new GenericClassComplexConstraints <DerivedClass, DefaultClass, BaseClass>();

            //Act
            var returned = genClass.GenericMethodTwo <BaseClass, DefaultClass>(derivedClass, defaultClass, baseClass);

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "GenericMethodTwo", "!!0,!!1,!2", genClass, new object[] { derivedClass, defaultClass, baseClass }, returned, null, "NewRelic.Agent.Tests.ProfiledMethods.GenericClassComplexConstraints`3");
        }