コード例 #1
0
ファイル: ArgCollector.cs プロジェクト: retahc/old-code
        bool AddNamed(int aid, Result r, Fingerprint fp,
                      int index_into_values, IWarningLogger logger)
        {
            if (aid < 0 || aid >= args.Length)
            {
                string s = String.Format("Trying to add {0} to nonexistant " +
                                         "argument ID {1}.", r, aid);
                logger.Error(2042, s, r.ToString());
                return(true);
            }

            Result subres = CompositeResult.FindCompatible(r, args[aid].Type);

            if (subres == null)
            {
                string err = String.Format("Argument value should be of type {0}, but " +
                                           "its type is {1}", args[aid].Type, r.GetType());
                logger.Error(2036, err, r.ToString());
                return(true);
            }

            if (subres == r)
            {
                args[aid].AddResult(r, fp, index_into_values);
            }
            else
            {
                // FIXME: the FP is really invalid, right?
                args[aid].AddResult(r, null, index_into_values);
            }

            return(false);
        }
コード例 #2
0
        public void Add_ToEmptyComposite_ExpectSingleResult()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(ResultStatus.Success));

            Assert.AreEqual(ResultStatus.Success, composite.Status);
        }
コード例 #3
0
        public void Value_IfOneValue_ExpectValue()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(123));

            Assert.AreEqual(123, composite.Value);
        }
コード例 #4
0
        public void Value_IfNoValue_ExpectException()
        {
            var composite = new CompositeResult <int, string>();

            Assert.Throws <Exception>(() =>
            {
                var v = composite.Value;
            });
        }
コード例 #5
0
        public void Add_MultipleOf_WhenUndefinedExists_ExpectUndefined()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(ResultStatus.Success));
            composite.Results.Add(new Result <int, string>(ResultStatus.Success));
            composite.Results.Add(new Result <int, string>(ResultStatus.Undefined));
            composite.Results.Add(new Result <int, string>(ResultStatus.Success));

            Assert.AreEqual(ResultStatus.Undefined, composite.Status);
        }
コード例 #6
0
        public void Add_MultipleOf_WhenFailureExists_ExpectFailure()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(ResultStatus.Success));
            composite.Results.Add(new Result <int, string>(ResultStatus.Success));
            composite.Results.Add(new Result <int, string>(ResultStatus.Failure));
            composite.Results.Add(new Result <int, string>(ResultStatus.Success));

            Assert.AreEqual(ResultStatus.Failure, composite.Status);
        }
コード例 #7
0
        public void Any_WhereStatusDoesExist_ExpectTrue()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(ResultBuilder <int, string> .Success().WithMessages(new[] { "a", "b" }).Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("c").Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("d").Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("e").Build());

            Assert.IsTrue(composite.Any(ResultStatus.Failure));
        }
コード例 #8
0
        public void Messages_ExpectAllMessages()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(ResultBuilder <int, string> .Success().WithMessages(new[] { "a", "b" }).Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("c").Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("d").Build());
            composite.Results.Add(ResultBuilder <int, string> .Failure().WithMessage("e").Build());

            Assert.AreEqual(new[] { "a", "b", "c", "d", "e" }, composite.Messages);
        }
コード例 #9
0
        public void Values_ExpectAllValues()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(1));
            composite.Results.Add(new Result <int, string>(2));
            composite.Results.Add(new Result <int, string>(3));
            composite.Results.Add(new Result <int, string>(4));

            Assert.AreEqual(new[] { 1, 2, 3, 4 }, composite.Values);
        }
コード例 #10
0
        public void Value_IfDifferentValue_ExpectException()
        {
            var composite = new CompositeResult <int, string>();

            composite.Results.Add(new Result <int, string>(123));
            composite.Results.Add(new Result <int, string>(0));
            composite.Results.Add(new Result <int, string>(123));
            composite.Results.Add(new Result <int, string>(123));

            Assert.Throws <Exception>(() =>
            {
                var v = composite.Value;
            });
        }
コード例 #11
0
ファイル: WrenchOperations.cs プロジェクト: retahc/old-code
        public static bool GetInstallerAndResult(WrenchProject proj,
                                                 BuildServices bs, out IResultInstaller iri,
                                                 out Result obj)
        {
            obj = null;

            if (GetInstaller(proj, bs, out iri))
            {
                return(true);
            }

            if (iri == null)
            {
                return(false);
            }

            obj = bs.GetValue().Result;

            if (obj == null)
            {
                // error already reported
                return(true);
            }

            bs.Logger.PushLocation(bs.FullName);
            obj = CompositeResult.FindCompatible(obj, iri.OtherType);
            bs.Logger.PopLocation();

            if (obj == null)
            {
                bs.Logger.Error(2031, "Trying to install result with incompatible installer",
                                iri.OtherType.ToString());
                return(true);
            }

            return(false);
        }
コード例 #12
0
        public static bool IsAny(this Result self)
        {
            RuleResult rule = self as RuleResult;

            if (rule != null)
            {
                return(rule.Result.IsAny());
            }

            ValidatorResult validator = self as ValidatorResult;

            if (validator != null)
            {
                foreach (Result result in validator.Results)
                {
                    if (!result.IsAny())
                    {
                        return(false);
                    }
                }
            }

            CompositeResult composite = self as CompositeResult;

            if (composite != null)
            {
                foreach (Result result in composite.Results)
                {
                    if (!result.IsAny())
                    {
                        return(false);
                    }
                }
            }
            return(self is AnyResult);
        }
コード例 #13
0
ファイル: ArgCollector.cs プロジェクト: retahc/old-code
        public bool Add(Result r, Fingerprint fp, IWarningLogger logger)
        {
            if (r == null)
            {
                throw new ArgumentNullException();
            }

            Type       t             = r.GetType();
            List <int> possible_args = new List <int> ();
            Type       best_match    = typeof(Result);

            for (int i = 0; i < args.Length; i++)
            {
                Type atype = args[i].Type;

                // Cannot add an unnamed arg to an ordered arg
                if ((args[i].Flags & ArgFlags.Ordered) != 0)
                {
                    continue;
                }

                // Prune out the egregiously wrong arguments (not even a superclass of the result)
                if (!TypeIs(t, atype))
                {
                    continue;
                }

                // Prune out those that have been bettered
                if (!TypeIs(atype, best_match))
                {
                    continue;
                }

                // If we've narrowed the type further, we don't want any of the
                // previous vaguer matches.
                if (atype.IsSubclassOf(best_match))
                {
                    possible_args.Clear();
                    best_match = atype;
                }

                possible_args.Add(i);
            }

            //Console.WriteLine ("Finished with {0} possible arguments", possible_args.Count);

            if (possible_args.Count == 1)
            {
                args[possible_args[0]].AddResult(r, fp, -1);
                return(false);
            }

            if (possible_args.Count > 0)
            {
                // Several possible choices. Check for a default
                foreach (int aid in possible_args)
                {
                    if ((args[aid].Flags & ArgFlags.Default) != 0)
                    {
                        args[aid].AddResult(r, fp, -1);
                        return(false);
                    }
                }

                // No dice. Ambiguity not tolerated. Ah, computers.

                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Ambiguous dependency of type {0} could " +
                                "be one of these arguments:", t);
                foreach (int aid in possible_args)
                {
                    sb.AppendFormat(" {0}", args[aid].Name);
                }

                logger.Error(2035, sb.ToString(), r.ToString());
                return(true);
            }

            // Maybe this is a composite result, and it has a default?
            // We recurse here, so we tunnel through the composites
            // sequentially. It's correct to check at every step, rather
            // than calling FindCompatible, since we don't know what
            // type we're looking for.

            if (r is CompositeResult)
            {
                CompositeResult cr = (CompositeResult)r;

                if (cr.HasDefault)
                {
                    // See note above about losing FP info in composite results.
                    // this case happens when we are guessing the arg; te
                    //logger.Warning (9999, "LOSING FINGERPRINT INFO in AC (2)", r.ToString ());

                    if (Add(cr.Default, null, logger) == false)
                    {
                        return(false);
                    }

                    // if that didn't work, continue
                    // and give a warning about the container
                    // Result, not the default.
                }
            }

            // Bummer.

            string s = String.Format("Dependency {0} of type {1} isn't compatible " +
                                     "with any defined arguments.", r, t);

            logger.Error(2034, s, null);
            return(true);
        }
コード例 #14
0
        /// <summary>
        /// Convert a db audit to model
        /// </summary>
        private AuditData ToModelInstance(DataContext context, CompositeResult <DbAuditData, DbAuditCode> res, bool summary = true)
        {
            var retVal = ApplicationServiceContext.Current.GetService <IDataCachingService>()?.GetCacheItem <AuditData>(res.Object1.Key);

            if (retVal == null ||
                !summary && retVal.LoadState < Core.Model.LoadState.FullLoad)
            {
                retVal = new AuditData()
                {
                    ActionCode      = (ActionType)res.Object1.ActionCode,
                    EventIdentifier = (EventIdentifierType)res.Object1.EventIdentifier,
                    Outcome         = (OutcomeIndicator)res.Object1.Outcome,
                    Timestamp       = res.Object1.Timestamp,
                    Key             = res.Object1.Key
                };

                if (res.Object1.EventTypeCode != null)
                {
                    retVal.EventTypeCode = this.ResolveCode(res.Object1.EventTypeCode, res.Object2.Code, res.Object2.CodeSystem);
                }

                // Get actors and objects
                if (!summary)
                {
                    // Actors
                    var sql = context.CreateSqlStatement <DbAuditActorAssociation>().SelectFrom(typeof(DbAuditActorAssociation), typeof(DbAuditActor), typeof(DbAuditCode))
                              .InnerJoin <DbAuditActorAssociation, DbAuditActor>(o => o.TargetKey, o => o.Key)
                              .Join <DbAuditActor, DbAuditCode>("LEFT", o => o.ActorRoleCode, o => o.Key)
                              .Where <DbAuditActorAssociation>(o => o.SourceKey == res.Object1.Key)
                              .Build();

                    foreach (var itm in context.Query <CompositeResult <DbAuditActorAssociation, DbAuditActor, DbAuditCode> >(sql))
                    {
                        retVal.Actors.Add(new AuditActorData()
                        {
                            UserName             = itm.Object2.UserName,
                            UserIsRequestor      = itm.Object1.UserIsRequestor,
                            UserIdentifier       = itm.Object2.UserIdentifier,
                            NetworkAccessPointId = itm.Object1.AccessPoint,
                            ActorRoleCode        = new List <AuditCode>()
                            {
                                this.ResolveCode(itm.Object2.ActorRoleCode, itm.Object3.Code, itm.Object3.CodeSystem)
                            }.OfType <AuditCode>().ToList()
                        });
                    }

                    // Objects
                    foreach (var itm in context.Query <DbAuditObject>(o => o.AuditId == res.Object1.Key))
                    {
                        retVal.AuditableObjects.Add(new AuditableObject()
                        {
                            IDTypeCode    = (AuditableObjectIdType?)itm.IDTypeCode,
                            LifecycleType = (AuditableObjectLifecycle?)itm.LifecycleType,
                            NameData      = itm.NameData,
                            ObjectId      = itm.ObjectId,
                            QueryData     = itm.QueryData,
                            Role          = (AuditableObjectRole?)itm.Role,
                            Type          = (AuditableObjectType)itm.Type
                        });
                    }

                    // Metadata
                    foreach (var itm in context.Query <DbAuditMetadata>(o => o.AuditId == res.Object1.Key))
                    {
                        retVal.AddMetadata((AuditMetadataKey)itm.MetadataKey, itm.Value);
                    }

                    retVal.LoadState = Core.Model.LoadState.FullLoad;
                }
                else
                {
                    // Actors
                    // Actors
                    var sql = context.CreateSqlStatement <DbAuditActorAssociation>().SelectFrom(typeof(DbAuditActorAssociation), typeof(DbAuditActor), typeof(DbAuditCode))
                              .InnerJoin <DbAuditActorAssociation, DbAuditActor>(o => o.TargetKey, o => o.Key)
                              .Join <DbAuditActor, DbAuditCode>("LEFT", o => o.ActorRoleCode, o => o.Key)
                              .Where <DbAuditActorAssociation>(o => o.SourceKey == res.Object1.Key)
                              .Build();

                    foreach (var itm in context.Query <CompositeResult <DbAuditActorAssociation, DbAuditActor, DbAuditCode> >(sql))
                    {
                        retVal.Actors.Add(new AuditActorData()
                        {
                            UserName             = itm.Object2.UserName,
                            UserIsRequestor      = itm.Object1.UserIsRequestor,
                            UserIdentifier       = itm.Object2.UserIdentifier,
                            NetworkAccessPointId = itm.Object1.AccessPoint,
                            ActorRoleCode        = new List <AuditCode>()
                            {
                                this.ResolveCode(itm.Object2.ActorRoleCode, itm.Object3.Code, itm.Object3.CodeSystem)
                            }.OfType <AuditCode>().ToList()
                        });
                    }

                    retVal.LoadState = Core.Model.LoadState.PartialLoad;
                }

                ApplicationServiceContext.Current.GetService <IDataCachingService>()?.Add(retVal);
            }
            return(retVal);
        }
コード例 #15
0
 public virtual void Visit(CompositeResult visitee) => AcceptAll(visitee.Results);