public void call_method_on_class_with_contravariant_generic_type()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var giraffe  = new Giraffe();
            var giraffes = new List <Giraffe> {
                giraffe
            };
            var animalProc       = new ContravariantProcessor <IAnimal>();
            var giraffeProcessor = animalProc;

            //Act
            giraffeProcessor.Process(giraffes);

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "Process", "System.Collections.Generic.IEnumerable`1[!0]", giraffeProcessor, new object[] { giraffes }, null, null, "NewRelic.Agent.Tests.ProfiledMethods.ContravariantProcessor`1");
        }
        public void call_generic_method_on_class_with_contravariant_generic_type()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var giraffe  = new Giraffe();
            var giraffes = new List <Giraffe> {
                giraffe
            };
            var animalProc       = new ContravariantProcessor <IAnimal>();
            var giraffeProcessor = animalProc;
            var whale            = new Whale();

            //Act
            giraffeProcessor.GenericMethod <Whale>(whale);

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "GenericMethod", "!!0", giraffeProcessor, new object[] { whale }, null, null, "NewRelic.Agent.Tests.ProfiledMethods.ContravariantProcessor`1");
        }
        public void call_generic_method_on_class_with_covariant_generic_type()
        {
            //Arrange
            var getTracerParameters    = DefaultGetTracerImplementation();
            var finishTracerParameters = DefaultFinishTracerImplementation();
            var whaleFactory           = new CovariantFactory <Whale>();
            var factories = new List <ICovariantFactory <IAnimal> > {
                whaleFactory
            };
            IAnimal animal = null;
            ICovariantFactory <IAnimal> animalFactory = null;
            var giraffe = new Giraffe();

            //Act
            foreach (var factory in factories)
            {
                animalFactory = factory;
                animal        = animalFactory.GenericMethod <Giraffe>(giraffe);
            }

            //Assert
            ValidateTracers(getTracerParameters, finishTracerParameters, "GenericMethod", "!!0", animalFactory, new object[] { giraffe }, animal, null, "NewRelic.Agent.Tests.ProfiledMethods.CovariantFactory`1");
        }