示例#1
0
        public async Task TryAllTest()
        {
            var server = StartServerDummyTicker();

            await server.WaitIdleAsync();

            var mapManager       = server.ResolveDependency <IMapManager>();
            var entityManager    = server.ResolveDependency <IEntityManager>();
            var prototypeManager = server.ResolveDependency <IPrototypeManager>();

            foreach (var reactionPrototype in prototypeManager.EnumeratePrototypes <ReactionPrototype>())
            {
                //since i have no clue how to isolate each loop assert-wise im just gonna throw this one in for good measure
                Console.WriteLine($"Testing {reactionPrototype.ID}");

                IEntity beaker;
                SolutionContainerComponent component = null;

                server.Assert(() =>
                {
                    mapManager.CreateNewMapEntity(MapId.Nullspace);

                    beaker = entityManager.SpawnEntity("BluespaceBeaker", MapCoordinates.Nullspace);
                    Assert.That(beaker.TryGetComponent(out component));
                    foreach (var(id, reactant) in reactionPrototype.Reactants)
                    {
                        Assert.That(component.TryAddReagent(id, reactant.Amount, out var quantity));
                        Assert.That(reactant.Amount, Is.EqualTo(quantity));
                    }
                });

                await server.WaitIdleAsync();

                server.Assert(() =>
                {
                    //you just got linq'd fool
                    //(i'm sorry)
                    var foundProductsMap = reactionPrototype.Products
                                           .Concat(reactionPrototype.Reactants.Where(x => x.Value.Catalyst).ToDictionary(x => x.Key, x => x.Value.Amount))
                                           .ToDictionary(x => x, x => false);
                    foreach (var reagent in component.Solution.Contents)
                    {
                        Assert.That(foundProductsMap.TryFirstOrNull(x => x.Key.Key == reagent.ReagentId && x.Key.Value == reagent.Quantity, out var foundProduct));
                        foundProductsMap[foundProduct.Value.Key] = true;
                    }

                    Assert.That(foundProductsMap.All(x => x.Value));
                });
            }
        }