Exemplo n.º 1
0
        public void Run(Project project)
        {
            foreach (var serverSet in project.Servers)
            foreach (var serverName in serverSet.Names)
            {
                var serverOptions = serverSet.DescribeOptions(serverSet.Options);

                ServerBegin(serverName, serverOptions);

                foreach (var connection in project.Connections)
                {
                    var connectionOptionsMultiple = new OptionsMultipleLookup(serverSet, connection);
                    var connectionOptionsSingle = new OptionsSingleLookup(serverSet, connection);

                    if (!connection.IsSatisfiedByFilters(connectionOptionsMultiple))
                        continue;

                    ConnectionBegin(connection.GetType(), connection.DescribeOptions(connectionOptionsSingle));

                    object connectionInstance;

                    try
                    {
                        connectionInstance = connection.OpenInternal(serverName, connectionOptionsSingle);
                    }
                    catch (Exception e)
                    {
                        ConnectionError(connection.GetType(), e);
                        continue;
                    }

                    foreach (var request in connection.Requests)
                    {
                        var options = new OptionsSingleLookup(serverSet, connection, request);

                        RequestBegin(request.GetType(), request.DescribeOptions(options));

                        object response;

                        try
                        {
                            response = request.ExecuteInternal(connectionInstance, options);
                        }
                        catch (Exception e)
                        {
                            RequestError(request.GetType(), e);
                            continue;
                        }

                        foreach (var test in request.Tests)
                        {
                            try
                            {
                                var outcome = test.Checker.Compile()(response);
                                TestComplete(test.Description, outcome, Truthy.IsTruthy(outcome, project.GetTruthies()));
                            }
                            catch (Exception e)
                            {
                                TestError(test.Description, e);
                            }
                        }

                        RequestEnd(request.GetType());

                        request.CloseInternal(response);
                    }

                    ConnectionEnd(connection.GetType());

                    connection.CloseInternal(connectionInstance);
                }

                ServerEnd(serverName);
            }
        }