Esempio n. 1
0
        public void BeforeAllTests()
        {
            _balloonProgramTypeInfo = new TypeDelegator(typeof(BalloonProgram));

            var assembly = Assembly.GetAssembly(typeof(Program));

            _writeDelegateTypeInfo = assembly.DefinedTypes.FirstOrDefault(t =>
            {
                if (!typeof(MulticastDelegate).IsAssignableFrom(t))
                {
                    return(false);
                }

                //check signature (must return void and have a string parameter)
                var methodInfo = t.DeclaredMethods.First(p => p.Name == "Invoke");
                if (methodInfo.ReturnType.Name.ToLower() != "void")
                {
                    return(false);
                }
                ParameterInfo[] parameters = methodInfo.GetParameters();
                if (parameters.Length != 1)
                {
                    return(false);
                }
                if (parameters[0].ParameterType != typeof(string))
                {
                    return(false);
                }
                return(true);
            });

            if (_writeDelegateTypeInfo != null)
            {
                _constructorTypeInfo = _balloonProgramTypeInfo.GetConstructors().FirstOrDefault(c =>
                {
                    var parameters = c.GetParameters();
                    if (parameters.Length != 1)
                    {
                        return(false);
                    }
                    return(parameters[0].ParameterType == _writeDelegateTypeInfo.AsType());
                });

                if (_constructorTypeInfo != null)
                {
                    MethodInfo handlerMethodInfo = typeof(BalloonProgramTests).GetMethod(nameof(LogWrite), BindingFlags.NonPublic | BindingFlags.Instance);
                    Delegate   writeDelegate     = Delegate.CreateDelegate(_writeDelegateTypeInfo, this, handlerMethodInfo);
                    _program = (BalloonProgram)_constructorTypeInfo.Invoke(new object[] { writeDelegate });
                }
            }

            _balloonProgramClassContent = Solution.Current.GetFileContent(@"Exercise1\BalloonProgram.cs");
        }
Esempio n. 2
0
 public void BeforeEachTest()
 {
     try
     {
         _writeLogs = new List <string>();
         if (_writeDelegateTypeInfo != null && _constructorTypeInfo != null)
         {
             MethodInfo handlerMethodInfo = typeof(BalloonProgramTests).GetMethod(nameof(LogWrite), BindingFlags.NonPublic | BindingFlags.Instance);
             Delegate   writeDelegate     = Delegate.CreateDelegate(_writeDelegateTypeInfo, this, handlerMethodInfo);
             _program = (BalloonProgram)_constructorTypeInfo.Invoke(new object[] { writeDelegate });
         }
     }
     catch (Exception e)
     {
         TestContext.WriteLine("Error while setting up the program:");
         TestContext.WriteLine(e.ToString());
     }
 }