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); }
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); }
public void Value_IfOneValue_ExpectValue() { var composite = new CompositeResult <int, string>(); composite.Results.Add(new Result <int, string>(123)); Assert.AreEqual(123, composite.Value); }
public void Value_IfNoValue_ExpectException() { var composite = new CompositeResult <int, string>(); Assert.Throws <Exception>(() => { var v = composite.Value; }); }
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); }
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); }
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)); }
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); }
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); }
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; }); }
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); }
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); }
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); }
/// <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); }
public virtual void Visit(CompositeResult visitee) => AcceptAll(visitee.Results);