示例#1
0
        /// <inheritdoc />
        /// <exception cref="ArgumentNullException">The <paramref name="executeStrategy" /> parameter is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="type" /> parameter is <c>null</c>.</exception>
        public IBuildCapability GetBuildCapability(IExecuteStrategy executeStrategy,
                                                   BuildRequirement buildRequirement, Type type)
        {
            executeStrategy = executeStrategy ?? throw new ArgumentNullException(nameof(executeStrategy));

            type = type ?? throw new ArgumentNullException(nameof(type));

            var match = GetCapability(executeStrategy, buildRequirement, x => x.GetBuildCapability(
                                          executeStrategy.Configuration, executeStrategy.BuildChain,
                                          type), type, null);

            return(match);
        }
示例#2
0
        /// <inheritdoc />
        /// <exception cref="ArgumentNullException">The <paramref name="executeStrategy" /> parameter is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="propertyInfo" /> parameter is <c>null</c>.</exception>
        public IBuildCapability GetBuildCapability(IExecuteStrategy executeStrategy,
                                                   BuildRequirement buildRequirement,
                                                   PropertyInfo propertyInfo)
        {
            executeStrategy = executeStrategy ?? throw new ArgumentNullException(nameof(executeStrategy));

            propertyInfo = propertyInfo ?? throw new ArgumentNullException(nameof(propertyInfo));

            var match = GetCapability(executeStrategy, buildRequirement, x => x.GetBuildCapability(
                                          executeStrategy.Configuration, executeStrategy.BuildChain,
                                          propertyInfo), propertyInfo.PropertyType, propertyInfo.Name);

            return(match);
        }
示例#3
0
        public void GetBuildCapabilityForPropertyReturnsBuildCapabilityWhenSupported(BuildRequirement requirement,
                                                                                     bool canCreate,
                                                                                     bool canPopulate, bool capabilityExists)
        {
            var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName)) !;
            var capability   = Substitute.For <IBuildCapability>();

            capability.SupportsCreate.Returns(canCreate);
            capability.SupportsPopulate.Returns(canPopulate);

            var buildAction        = Substitute.For <IBuildAction>();
            var buildConfiguration = Substitute.For <IBuildConfiguration>();
            var buildChain         = Substitute.For <IBuildChain>();
            var executeStrategy    = Substitute.For <IExecuteStrategy>();

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.BuildChain.Returns(buildChain);

            buildAction.GetBuildCapability(buildConfiguration, buildChain, propertyInfo).Returns(capability);

            var actions = new List <IBuildAction>
            {
                buildAction
            };

            var sut = new BuildProcessor(actions);

            if (capabilityExists)
            {
                var actual = sut.GetBuildCapability(executeStrategy, requirement, propertyInfo);

                actual.Should().Be(capability);
            }
            else
            {
                Action action = () => sut.GetBuildCapability(executeStrategy, requirement, propertyInfo);

                action.Should().Throw <BuildException>();
            }
        }
示例#4
0
    public Blueprint(string Name, int PUCost, int NanoBotCost, TileData.Types _Ttype, BuildingType tType, BuildRequirement bReq, string desc)
    {
        buildingName = Name;
        memoryCost = PUCost;
        nanoBotCost = NanoBotCost;
        tileType = _Ttype;
        description = desc;

        buildingType = tType;

        buildReq = bReq;

        //reqResources = new Dictionary<TileData.Types, int>();

        //foreach (TileData.Types r in bReq.reqResourcesMap.Keys)
        //{
        //    reqResources.Add(r, bReq.reqResourcesMap[r]);
        //}

        // Initialize this new Blueprint's Tier/Upgrade at 0 (no upgrade)
        bp_Tier = new Blueprint_Tier();
    }
示例#5
0
        private IBuildCapability GetCapability(IExecuteStrategy executeStrategy, BuildRequirement buildRequirement,
                                               Func <IBuildAction, IBuildCapability?> evaluator, Type targetType, string?referenceName)
        {
            var capabilities = from x in _actions
                               orderby x.Priority descending
                               select evaluator(x);

            var matches = from x in capabilities
                          where x != null &&
                          (x.SupportsCreate && buildRequirement == BuildRequirement.Create ||
                           x.SupportsPopulate && buildRequirement == BuildRequirement.Populate)
                          select x;

            var capability = matches.FirstOrDefault();

            if (capability == null)
            {
                var message = $"Failed to identify build capabilities for {targetType.FullName}.";

                throw new BuildException(message, targetType, referenceName, null, executeStrategy.Log.Output);
            }

            return(capability);
        }
示例#6
0
 public Requirements(BuildRequirement requirement, int detail, string description)
 {
     this.requirement = requirement;
     this.detail      = detail;
     this.description = description;
 }
示例#7
0
 public Requirements(BuildRequirement requirement, int detail)
 {
     this.requirement = requirement;
     this.detail      = detail;
 }
示例#8
0
 public Requirements(BuildRequirement requirement)
 {
     this.requirement = requirement;
 }