Exemple #1
0
        public void TestMethodCsSimpleTextReturn()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data = Substitute.For <IScriptRootData>();

            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;

            data.CycleCounter.Returns(0);
            Assert.AreEqual("3", lcdMod.ExecuteCsScript(pf, data, "return \"3\";"));
        }
Exemple #2
0
        public void TestMethodCsAssemlbyReturn()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data = Substitute.For <IScriptRootData>();

            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;

            data.CycleCounter.Returns(0);
            Assert.AreEqual("42", lcdMod.ExecuteCsScript(pf, data, "public class ModMain { public static int Main(IScriptModData root) { return 42; }}"));
        }
Exemple #3
0
        public void TestMethodCsReturnTask()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data = Substitute.For <IScriptRootData>();

            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;

            data.CycleCounter.Returns(0);
            Assert.AreEqual("", lcdMod.ExecuteCsScript(pf, data, "return new Task(async () => {});"));
        }
Exemple #4
0
        public void TestMethodCsScriptWithException()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data = Substitute.For <IScriptRootData>();

            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;

            data.CycleCounter.Returns(0);
            Assert.AreEqual("Exception: Test\n\nScript output up to exception:\n", lcdMod.ExecuteCsScript(pf, data, "throw new Exception(\"Test\");"));
        }
Exemple #5
0
        public void TestMethodCsExtMethods()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data      = Substitute.For <IScriptRootData>();
            var playfield = Substitute.For <IPlayfield>();

            playfield.Name.Returns("PlayfieldTestName");
            data.P = new PlayfieldData(playfield);
            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;

            data.CycleCounter.Returns(0);
            Assert.AreEqual("a-a1", lcdMod.ExecuteCsScript(pf, data, "return string.Join(\"-\", new[]{\"a\", \"b\", \"a1\"}.GetUniqueNames(\"a*\"));"));
        }
Exemple #6
0
        public void TestMethodCsPlayfieldName()
        {
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data      = Substitute.For <IScriptRootData>();
            var playfield = Substitute.For <IPlayfield>();

            playfield.Name.Returns("PlayfieldTestName");
            data.P = new PlayfieldData(playfield);
            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;
            data.Console.Returns(new CsHelper.ConsoleMock(data));

            data.CycleCounter.Returns(0);
            Assert.AreEqual("PlayfieldTestName", lcdMod.ExecuteCsScript(pf, data, "Console.Write(P.Name);"));
        }
Exemple #7
0
        public void TestMethodItemsMoveToOtherEntity()
        {
            ConveyorHelpers.CreateDeviceLock = (R, P, S, V) => new MockDeviceLock();

            // SV ==================================================================
            var SVboxA = Substitute.For <IContainer>();

            SVboxA.RemoveItems(1, int.MaxValue).Returns(10);
            SVboxA.AddItems(1, 1).Returns(0);
            SVboxA.AddItems(1, 10).Returns(C => throw new Exception("in the same box"));

            var SVboxB = Substitute.For <IContainer>();

            SVboxB.AddItems(1, 10).Returns(1);

            var esSV = Substitute.For <IStructure>();

            esSV.GetDevice <IContainer>("BoxA").Returns(SVboxA);
            esSV.GetDevice <IContainer>("BoxB").Returns(SVboxB);

            var eeSV = Substitute.For <IEntity>();

            eeSV.Structure.Returns(esSV);

            var eSV = Substitute.For <IEntityData>();

            eSV.Name.Returns("SVa");
            eSV.GetCurrent().Returns(eeSV);

            var sSV = Substitute.For <IStructureData>();

            sSV.AllCustomDeviceNames.Returns(new[] { "BoxA", "BoxB", "BoxC", "BoxX" });
            sSV.Items.Returns(new[] {
                new ItemsData()
                {
                    Id = 1, Count = 11, Name = "a", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxA", Id = 1, Count = 10, Container = SVboxA, E = eSV
                                                                      } }.ToList()
                },
                new ItemsData()
                {
                    Id = 2, Count = 20, Name = "b", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxB", Id = 2, Count = 20, Container = SVboxB, E = eSV
                                                                      } }.ToList()
                },
                new ItemsData()
                {
                    Id = 3, Count = 30, Name = "c", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxC", Id = 3, Count = 30
                                                                      } }.ToList()
                },
            });
            sSV.ContainerSource.Returns(new System.Collections.Concurrent.ConcurrentDictionary <string, IContainerSource>()
            {
                ["BoxA"] = new ContainerSource()
                {
                    Container = SVboxA, CustomName = "BoxA"
                },
                ["BoxB"] = new ContainerSource()
                {
                    Container = SVboxB, CustomName = "BoxB"
                },
            });
            sSV.GetCurrent().Returns(esSV);
            sSV.E.Returns(eSV);
            eSV.S.Returns(sSV);

            // CV ==================================================================
            var CVboxA = Substitute.For <IContainer>();

            CVboxA.RemoveItems(1, int.MaxValue).Returns(10);
            CVboxA.AddItems(1, 1).Returns(0);
            CVboxA.AddItems(1, 10).Returns(C => throw new Exception("in the same box"));

            var CVboxB = Substitute.For <IContainer>();

            CVboxB.AddItems(1, 10).Returns(1);

            var esCV = Substitute.For <IStructure>();

            esCV.GetDevice <IContainer>("BoxA").Returns(CVboxA);
            esCV.GetDevice <IContainer>("BoxB").Returns(CVboxB);

            var eeCV = Substitute.For <IEntity>();

            eeCV.Structure.Returns(esCV);

            var eCV = Substitute.For <IEntityData>();

            eCV.Name.Returns("CVb");
            eCV.GetCurrent().Returns(eeCV);

            var sCV = Substitute.For <IStructureData>();

            sCV.AllCustomDeviceNames.Returns(new[] { "BoxA", "BoxB", "BoxC", "BoxX" });
            sCV.Items.Returns(new[] {
                new ItemsData()
                {
                    Id = 1, Count = 11, Name = "a", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxA", Id = 1, Count = 10, Container = CVboxA, E = eCV
                                                                      } }.ToList()
                },
                new ItemsData()
                {
                    Id = 2, Count = 20, Name = "b", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxB", Id = 2, Count = 20, Container = CVboxB, E = eCV
                                                                      } }.ToList()
                },
                new ItemsData()
                {
                    Id = 3, Count = 30, Name = "c", Source = new [] { (IItemsSource) new ItemsSource()
                                                                      {
                                                                          CustomName = "BoxC", Id = 3, Count = 30
                                                                      } }.ToList()
                },
            });
            sCV.ContainerSource.Returns(new System.Collections.Concurrent.ConcurrentDictionary <string, IContainerSource>()
            {
                ["BoxA"] = new ContainerSource()
                {
                    Container = CVboxA, CustomName = "BoxA"
                },
                ["BoxB"] = new ContainerSource()
                {
                    Container = CVboxB, CustomName = "BoxB"
                },
            });
            sCV.GetCurrent().Returns(esCV);
            sCV.E.Returns(eCV);
            eCV.S.Returns(sCV);

            sCV.DockedE.Returns(new[] { eSV });

            // MOVE ==================================================================

            var lcdData = Substitute.For <IScriptRootData>();

            lcdData.DeviceLockAllowed.Returns(true);
            lcdData.CsRoot.Returns(new CsHelper.CsScriptFunctions(lcdData));
            lcdData.Console.Returns(new CsHelper.ConsoleMock(lcdData));

            lcdData.E.Returns(eCV);
            lcdData.E.S.Returns(sCV);
            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var s  = new StringBuilder();
            var pf = new PlayfieldScriptData(lcdMod);

            Assert.AreEqual("SVa:1#9 SVa:BoxA->CVb:BoxB", lcdMod.ExecuteCsScript(pf, lcdData, @"
                E.S.DockedE.ForEach(e => { 
                    Console.Write(e.Name + "":"");
                    CsRoot.Items(e.S, ""BoxA"")
                        .ForEach(i => {
                            CsRoot.Move(i, E.S, ""Box*"").ForEach(mi => {
                                Console.Write($""{mi.Id}#{mi.Count} {mi.SourceE.Name}:{mi.Source}->{mi.DestinationE.Name}:{mi.Destination}"");
                            });
                        });
                });
            "));
        }
Exemple #8
0
        public void TestMethodFillFuel()
        {
            ConveyorHelpers.CreateDeviceLock = (R, P, S, V) => new MockDeviceLock();

            var lcdMod = new EmpyrionScripting();

            lcdMod.CsCompiler = new CsCompiler.CsCompiler(".");
            lcdMod.CsCompiler.Configuration.Current.WithinLearnMode = true;
            var pf = new PlayfieldScriptData(lcdMod);

            var dict = new ConcurrentDictionary <string, object>();

            var data      = Substitute.For <IScriptRootData>();
            var playfield = Substitute.For <IPlayfield>();

            playfield.Name.Returns("PlayfieldTestName");
            data.CsRoot.Returns(new CsHelper.CsScriptFunctions(data));

            var e           = Substitute.For <IEntityData>();
            var s           = Substitute.For <IStructureData>();
            var egsFuelTank = Substitute.For <IStructureTank>();

            int fuelTankContent = 5000;

            egsFuelTank.Capacity.Returns(10000);
            egsFuelTank.Content.ReturnsForAnyArgs(ci => fuelTankContent);
            egsFuelTank.UsesIntegerAmounts.Returns(true);
            egsFuelTank.When(x => x.AddContent(4500)).Do(x => fuelTankContent += 4500);

            var fuelTank = new StructureTank(egsFuelTank, StructureTankType.Fuel);

            s.FuelTank.Returns(fuelTank);

            var c = Substitute.For <IContainer>();

            IItemsSource boxItemContent = new ItemsSource()
            {
                E          = e,
                Id         = 2373,
                Count      = 500,
                CustomName = "Box1",
                Container  = c,
            };
            var itemSource = new List <IItemsSource> {
                boxItemContent
            };

            c.RemoveItems(2373, 16).Returns(ci => { boxItemContent.Count -= 15; return(1); });

            var items = new[] { new ItemsData()
                                {
                                    Count  = 50,
                                    Id     = 2373,
                                    Key    = "Fuelcell",
                                    Name   = "Energie",
                                    Source = itemSource,
                                } };

            s.Items.Returns(items);

            e.S.Returns(s);
            data.E.Returns(e);
            data.P = new PlayfieldData(playfield);
            data.GetPersistendData().ReturnsForAnyArgs(dict);
            data.Data = dict;
            data.DeviceLockAllowed.Returns(true);

            data.CycleCounter.Returns(0);
            Assert.AreEqual("Id:2373 Count:15 Source:Box1", lcdMod.ExecuteCsScript(pf, data, @"
                var mi = CsRoot.Fill(E.S.Items.First(I => I.Id == 2373), E.S, StructureTankType.Fuel)[0];
                return $""Id:{mi.Id} Count:{mi.Count} Source:{mi.Source}"";
            "));

            Assert.AreEqual(9500, fuelTankContent, "FuelTankContext");
            Assert.AreEqual(485, boxItemContent.Count, "BoxItemContent");
        }