public void ClassWithAsyncMethodWithFastPath(bool recurse)
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithFastPathAsync(recurse, "123", 42);
            task.Wait();
        });

        var methodBases = GetMethodInfoField();

        // Interceptor can't deal with 2 test cases
        //Assert.Equal(recurse ? 2 : 1, methodBases.Count);

        var methodBase = methodBases.Last();

        Assert.Equal("MethodWithFastPathAsync", methodBase.Name);

        var messages = GetMessagesField();

        Assert.Equal(recurse ? 2 : 1, messages.Count);

        var message = messages.First();

        Assert.Equal("File name '123' with id '42'", message);
    }
    public void ClassWithAsyncMethod()
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithAwaitAsync("123", 42);
            task.Wait();
        });

        var methodBases = GetMethodInfoField();

        Assert.Single(methodBases);

        var methodBase = methodBases.First();

        Assert.Equal("MethodWithAwaitAsync", methodBase.Name);

        var messages = GetMessagesField();

        Assert.Single(messages);

        var message = messages.First();

        Assert.Equal("File name '123' with id '42'", message);
    }
示例#3
0
    public void ClassWithAsyncWithoutFormattingMethod()
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithAwaitWithoutFormattingAsync("123", 42);
            task.Wait();
        });

        var methodBases = GetMethodInfoField();

        Assert.Single(methodBases);

        var methodBase = methodBases.First();

        Assert.Equal("MethodWithAwaitWithoutFormattingAsync", methodBase.Name);

        var messages = GetMessagesField();

        Assert.Empty(messages);

        // Note: must prefer TimeSpan above long
        var interceptorTypes = GetInterceptorTypesField();

        Assert.Single(interceptorTypes);

        var interceptorType = interceptorTypes.First();

        Assert.Equal(InterceptorType.TimeSpan.ToString(), interceptorType);
    }
示例#4
0
    public void ClassWithAsyncMethodWithUnusedParameters()
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithAwaitButUnusedParametersAsync("123", 42);
            task.Wait();
        });

        var error = testResult.Errors.First();

        Assert.Equal("Parameter 'fileName' is not available on the async state machine. Probably it has been optimized away by the compiler. Please update the format so it excludes this parameter.", error.Text);

        // Note: must prefer TimeSpan above long
        var interceptorTypes = GetInterceptorTypesField();

        Assert.Single(interceptorTypes);

        var interceptorType = interceptorTypes.First();

        Assert.Equal(InterceptorType.TimeSpan.ToString(), interceptorType);
    }
    public async Task ClassWithAsyncMethodWithExceptionAsync()
    {
        ClearMessage();
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);
        await TraceRunner.CaptureAsync(async() =>
        {
            try
            {
                await(Task) instance.MethodWithAwaitAndExceptionAsync();
            }
            catch (Exception)
            {
                // Expected
            }
        });

        var methodBases = GetMethodInfoField();

        // Make sure there are no 2, see https://github.com/Fody/MethodTimer/issues/124
        var allMethodBases = (from x in methodBases
                              where x.Name.Equals("MethodWithAwaitAndExceptionAsync")
                              select x).ToList();

        Assert.Single(allMethodBases);
    }
示例#6
0
    public void ClassWithExpressionBodiedMember()
    {
        var type     = testResult.Assembly.GetType("ClassWithExpressionBodiedMember");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() => instance.Method());

        Assert.StartsWith("ClassWithExpressionBodiedMember.get_FooBar ", message.First());
    }
示例#7
0
    public void InheritedClassDoingConstructionCall()
    {
        var type    = testResult.Assembly.GetType("InheritedClassDoingConstructionCall");
        var message = TraceRunner.Capture(() => Activator.CreateInstance(type));

        Assert.Single(message);
        Assert.True(message[0].StartsWith("InheritedClassDoingConstructionCall.ctor "), message[0]);
    }
示例#8
0
    public void GenericClassWithMethod()
    {
        var type     = testResult.Assembly.GetType("GenericClassWithMethod`1[[System.String, mscorlib]]");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() => instance.Method());

        Assert.Single(message);
        Assert.StartsWith("GenericClassWithMethod`1.Method ", message.First());
    }
示例#9
0
    public void ClassWithAttribute()
    {
        var type     = testResult.Assembly.GetType("ClassWithAttribute");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() => instance.Method());

        Assert.Single(message);
        Assert.StartsWith("ClassWithAttribute.Method ", message.First());
    }
示例#10
0
    public void ClassWithConstructor()
    {
        var type    = testResult.Assembly.GetType("ClassWithConstructor");
        var message = TraceRunner.Capture(() => Activator.CreateInstance(type));

        Assert.Equal(2, message.Count);
        Assert.StartsWith("ClassWithConstructor.cctor ", message[0]);
        Assert.StartsWith("ClassWithConstructor.ctor ", message[1]);
    }
示例#11
0
    public void MethodWithReturn()
    {
        var type     = testResult.Assembly.GetType("MiscMethods");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() => instance.MethodWithReturn());

        Assert.Single(message);
        Assert.StartsWith("MiscMethods.MethodWithReturn ", message.First());
    }
示例#12
0
    public void InheritedClass()
    {
        var type    = testResult.Assembly.GetType("InheritedClass");
        var message = TraceRunner.Capture(() => Activator.CreateInstance(type));

        Assert.Single(message);
        var first = message.First();

        Assert.True(first.StartsWith("InheritedClass.ctor "), first);
    }
    public void ClassWithNoAttribute()
    {
        var message = TraceRunner.Capture(() =>
        {
            var instance = testResult.GetInstance("ClassWithNoAttribute");
            instance.Method();
        });

        Assert.Single(message);
        Assert.StartsWith("ClassWithNoAttribute.Method ", message.First());
    }
    public void ClassWithAsyncMethod()
    {
        var instance = testResult.GetInstance("ClassWithCompilerGeneratedTypes");
        var message  = TraceRunner.Capture(() =>
        {
            var task = (Task)instance.AsyncMethod();
            task.Wait();
        });

        Assert.Single(message);
        Assert.StartsWith("ClassWithCompilerGeneratedTypes.AsyncMethod ", message.First());
    }
示例#15
0
    public void ClassWithAsyncMethodWithFastPath(bool recurse)
    {
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithFastPathAsync(recurse);
            task.Wait();
        });

        Assert.Equal(recurse ? 2 : 1, message.Count);
        Assert.StartsWith("ClassWithAsyncMethod.MethodWithFastPathAsync ", message.First());
    }
    public void ClassWithYieldMethod()
    {
        var instance = testResult.GetInstance("ClassWithCompilerGeneratedTypes");
        var message  = TraceRunner.Capture(() =>
        {
            var task = (IEnumerable <string>)instance.YieldMethod();
            task.ToList();
        });

        Assert.Empty(message);
        //TODO: support yield
        //Assert.True(message.First().StartsWith("ClassWithCompilerGeneratedTypes.YieldMethod "));
    }
示例#17
0
    public void ClassWithAsyncMethod()
    {
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithAwaitAsync();
            task.Wait();
        });

        Assert.Single(message);
        Assert.StartsWith("ClassWithAsyncMethod.MethodWithAwaitAsync ", message.First());
    }
示例#18
0
    public void ClassWithYieldMethod()
    {
        var type     = testResult.Assembly.GetType("ClassWithYieldMethod");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() =>
        {
            var task = (IEnumerable <string>)instance.YieldMethod();
            task.ToList();
        });

        Assert.Empty(message);
        //TODO: support yield
        //Assert.True(message.First().StartsWith("ClassWithYieldMethod.YieldMethod "));
    }
    public void ClassWithGenericAsyncMethod()
    {
        ClearMessage();
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task <int>)instance.GenericMethodAsync <int>();
            task.Wait();
        });

        var methodBases = GetMethodInfoField();

        Assert.Single(methodBases);
        var methodBase = methodBases.First();

        Assert.Equal("GenericMethodAsync", methodBase.Name);
    }
示例#20
0
    public void ClassWithAsyncMethodThatThrowsException()
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            try
            {
                var task = (Task)instance.MethodWithAwaitAndExceptionAsync("123", 42);
                task.Wait();
            }
            catch (Exception)
            {
                // Expected
            }
        });

        var methodBases = GetMethodInfoField();
        var methodBase  = methodBases.Last();

        Assert.Equal("MethodWithAwaitAndExceptionAsync", methodBase.Name);

        var messages = GetMessagesField();

        Assert.Single(messages);

        var message = messages.First();

        Assert.Equal("File name '123' with id '42'", message);

        // Note: must prefer TimeSpan above long
        var interceptorTypes = GetInterceptorTypesField();

        Assert.Single(interceptorTypes);

        var interceptorType = interceptorTypes.First();

        Assert.Equal(InterceptorType.TimeSpan.ToString(), interceptorType);
    }
示例#21
0
    public void ClassWithAsyncMethodThatThrowsException()
    {
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);
        var message  = TraceRunner.Capture(() =>
        {
            try
            {
                var task = (Task)instance.MethodWithAwaitAndExceptionAsync();
                task.Wait();
            }
            catch (Exception)
            {
                // Expected
            }
        });

        Assert.Single(message);
        Assert.StartsWith("ClassWithAsyncMethod.MethodWithAwaitAndExceptionAsync ", message.First());
    }
示例#22
0
    public void ClassWithAsyncAndThisMethod()
    {
        ClearMessage();

        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            var task = (Task)instance.MethodWithAwaitAndThisAsync("123", 42);
            task.Wait();
        });

        var methodBases = GetMethodInfoField();

        Assert.Single(methodBases);

        var methodBase = methodBases.First();

        Assert.Equal("MethodWithAwaitAndThisAsync", methodBase.Name);

        var messages = GetMessagesField();

        Assert.Single(messages);

        var message = messages.First();

        Assert.Equal("Current object: 'TEST VALUE' | File name '123' with id '42'", message);

        // Note: must prefer TimeSpan above long
        var interceptorTypes = GetInterceptorTypesField();

        Assert.Single(interceptorTypes);

        var interceptorType = interceptorTypes.First();

        Assert.Equal(InterceptorType.TimeSpan.ToString(), interceptorType);
    }
    public void ClassWithAsyncMethodThatThrowsException()
    {
        var type     = testResult.Assembly.GetType("ClassWithAsyncMethod");
        var instance = (dynamic)Activator.CreateInstance(type);

        TraceRunner.Capture(() =>
        {
            try
            {
                var task = (Task)instance.MethodWithAwaitAndExceptionAsync();
                task.Wait();
            }
            catch (Exception)
            {
                // Expected
            }
        });

        var methodBases = GetMethodInfoField();
        var methodBase  = methodBases.Last();

        Assert.Equal("MethodWithAwaitAndExceptionAsync", methodBase.Name);
    }