public void GetParameters_InstructionsThatReadParameters_ReturnsParameters()
        {
            MethodReference method = CecilUtility.Import(() => string.Format("Test", 12));

            var instructions = new[]
            {
                Instruction.Create(OpCodes.Ldarg_1),
                Instruction.Create(OpCodes.Ldarg_0)
            };

            Parameter parameter = new Parameter(CecilUtility.Import(typeof(string)), 0);

            _instructionHelperMock
            .Setup(helper => helper.ReadsParameter(method, instructions[0], out parameter))
            .Returns(true);

            Parameter parameter2 = new Parameter(CecilUtility.Import(typeof(int)), 1);

            _instructionHelperMock
            .Setup(helper => helper.ReadsParameter(method, instructions[1], out parameter2))
            .Returns(true);

            var subject = new ParameterDeducer(_instructionHelperMock.Object);

            TypeReference[] result = subject.GetParameters(method, instructions);

            Assert.AreEqual(2, result.Length);
            Assert.AreEqual(parameter.ParameterType, result[0]);
            Assert.AreEqual(parameter2.ParameterType, result[1]);
        }
        public void GetParameters_InstructionsThatReadParameters_ReturnsParameters()
        {
            MethodReference method = CecilUtility.Import(() => string.Format("Test", 12));

            var instructions = new[]
            {
                Instruction.Create(OpCodes.Ldarg_1),
                Instruction.Create(OpCodes.Ldarg_0)
            };

            Parameter parameter = new Parameter(CecilUtility.Import(typeof(string)), 0);
            _instructionHelperMock
                .Setup(helper => helper.ReadsParameter(method, instructions[0], out parameter))
                .Returns(true);

            Parameter parameter2 = new Parameter(CecilUtility.Import(typeof(int)), 1);
            _instructionHelperMock
                .Setup(helper => helper.ReadsParameter(method, instructions[1], out parameter2))
                .Returns(true);

            var subject = new ParameterDeducer(_instructionHelperMock.Object);
            TypeReference[] result = subject.GetParameters(method, instructions);

            Assert.AreEqual(2, result.Length);
            Assert.AreEqual(parameter.ParameterType, result[0]);
            Assert.AreEqual(parameter2.ParameterType, result[1]);
        }
        public void GetParameters_EmptyInstructions_EmptyResult()
        {
            MethodReference method = CecilUtility.Import(() => Console.WriteLine());

            var subject = new ParameterDeducer(_instructionHelperMock.Object);
            var result  = subject.GetParameters(method, Enumerable.Empty <Instruction>());

            Assert.AreEqual(0, result.Length);
        }
        public void GetParameters_EmptyInstructions_EmptyResult()
        {
            MethodReference method = CecilUtility.Import(() => Console.WriteLine());

            var subject = new ParameterDeducer(_instructionHelperMock.Object);
            var result = subject.GetParameters(method, Enumerable.Empty<Instruction>());

            Assert.AreEqual(0, result.Length);
        }