public void ChaneHierarchicalResetState_should_be_true()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File      = "test\\" + i.ToString(),
                    Id        = i.ToString(),
                    ModName   = i.ToString(),
                    Type      = i.ToString(),
                    ResetType = ResetType.Resolved
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs, true);
            var results = service.ChangeHierarchicalResetState(new Definition()
            {
                ResetType = ResetType.None, Id = "1", Type = "1", File = "test\\1"
            });

            results.Should().BeTrue();
        }
Beispiel #2
0
        public void HasGameDefinitions_should_be_true()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File       = "test\\" + i.ToString(),
                    Id         = i.ToString(),
                    ModName    = i.ToString(),
                    Type       = i.ToString(),
                    IsFromGame = true
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.HasGameDefinitions();

            results.Should().BeTrue();
        }
Beispiel #3
0
        public async Task Should_not_load_definitions_when_no_version()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var modParser       = new Mock <IModParser>();
            var parserManager   = new Mock <IParserManager>();
            var reader          = new Mock <IReader>();
            var modWriter       = new Mock <IModWriter>();
            var gameService     = new Mock <IGameService>();
            var mapper          = new Mock <IMapper>();
            var gameIndexer     = new Mock <IGameIndexer>();

            var defs = new IndexedDefinitions();

            defs.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    Type    = "test",
                    Id      = "1",
                    ModName = "test"
                }
            });
            var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService);
            var result  = await service.LoadDefinitionsAsync(defs, new Game(), new List <string>() { string.Empty });

            result.Should().Be(defs);
        }
Beispiel #4
0
        public void Returns_all_definitions_and_added_definitions()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            service.AddToMap(new Definition()
            {
                Code = "a",
                Id   = "14",
                Type = "14"
            });
            var results = service.GetAll();

            results.Count().Should().Be(defs.Count + 1);
        }
Beispiel #5
0
        public void Should_find_definition()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString(),
                    Tags    = new List <string>()
                    {
                        i.ToString()
                    }
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            service.InitSearch();
            var results = service.SearchDefinitions("1");

            results.Count().Should().Be(1);
            results.First().Id.Should().Be("1");
        }
Beispiel #6
0
        public void Should_exist_by_file()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.ExistsByFile("1");

            results.Should().BeTrue();
        }
        public void HasResetDefinitions_should_be_false_due_to_no_hierarchical_definition()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File      = "test\\" + i.ToString(),
                    Id        = i.ToString(),
                    ModName   = i.ToString(),
                    Type      = i.ToString(),
                    ResetType = ResetType.Resolved
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.HasResetDefinitions();

            results.Should().BeFalse();
        }
Beispiel #8
0
        public void Deletes_specified_definition()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs, true);
            service.Remove(defs.First());
            var result = service.GetAll();

            result.Count().Should().Be(defs.Count - 1);
            result.FirstOrDefault(p => p.Id == "0").Should().BeNull();
            var hierarchalResult = service.GetHierarchicalDefinitions();

            hierarchalResult.First().Children.Count.Should().Be(defs.Count - 1);
            hierarchalResult.First().Children.FirstOrDefault(p => p.Key.StartsWith("0")).Should().BeNull();
            service.GetByTypeAndId(defs.First().TypeAndId).Count().Should().Be(0);
        }
Beispiel #9
0
        public async Task Should_not_load_definitions_when_definitions_dont_exist()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var modParser       = new Mock <IModParser>();
            var parserManager   = new Mock <IParserManager>();
            var reader          = new Mock <IReader>();
            var modWriter       = new Mock <IModWriter>();
            var gameService     = new Mock <IGameService>();
            var mapper          = new Mock <IMapper>();
            var gameIndexer     = new Mock <IGameIndexer>();

            storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test");
            gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(false));

            var defs = new IndexedDefinitions();

            defs.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    Type    = "test",
                    Id      = "1",
                    ModName = "test"
                }
            });
            var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService);
            var result  = await service.LoadDefinitionsAsync(defs, new Game(), new List <string>() { "3.0.3" });

            result.Should().Be(defs);
        }
Beispiel #10
0
        public void Returns_hierarchical_objects()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i < 3 ? "file" : i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i > 3 && i < 6 ? "type" : i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs, true);
            var results = service.GetHierarchicalDefinitions();

            results.Count().Should().Be(1);
            results.First().Children.Count.Should().Be(10);
        }
Beispiel #11
0
        public void Returns_all_directory_keys()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = "test\\" + i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetAllDirectoryKeys();

            results.Count().Should().Be(1);
        }
Beispiel #12
0
        public void Returns_by_parent_directory()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 3; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = "events\\" + i.ToString() + ".txt",
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetByParentDirectory("events");

            results.Count().Should().Be(defs.Count);
        }
Beispiel #13
0
        public void Returns_by_value_type()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File      = i < 5 ? "file" : i.ToString(),
                    Id        = i.ToString(),
                    ModName   = i.ToString(),
                    Type      = i.ToString(),
                    ValueType = ValueType.Object
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetByValueType(ValueType.Object);

            results.Count().Should().Be(10);
        }
Beispiel #14
0
        public async Task Should_not_create_merge_mod()
        {
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var storageProvider  = new Mock <IStorageProvider>();
            var modParser        = new Mock <IModParser>();
            var reader           = new Mock <IReader>();
            var modWriter        = new Mock <IModWriter>();
            var gameService      = new Mock <IGameService>();
            var mapper           = new Mock <IMapper>();
            var modPatchExporter = new Mock <IModPatchExporter>();
            var modMergeExporter = new Mock <IModMergeExporter>();
            var infoProvider     = new Mock <IDefinitionInfoProvider>();
            var parserManager    = new Mock <IParserManager>();

            infoProvider.Setup(p => p.DefinitionUsesFIOSRules(It.IsAny <IDefinition>())).Returns(true);
            infoProvider.Setup(p => p.CanProcess(It.IsAny <string>())).Returns(true);
            gameService.Setup(p => p.GetSelected()).Returns((IGame)null);

            var service = new ModMergeService(null, parserManager.Object, new Cache(), messageBus.Object, modPatchExporter.Object, modMergeExporter.Object,
                                              new List <IDefinitionInfoProvider>()
            {
                infoProvider.Object
            }, reader.Object, modWriter.Object,
                                              modParser.Object, gameService.Object, storageProvider.Object, mapper.Object);

            var indexed = new IndexedDefinitions();

            indexed.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    Code = "test = {test}",
                    File = "fake.txt"
                }
            });
            var empty = new IndexedDefinitions();

            empty.InitMap(new List <IDefinition>());

            var result = await service.MergeCollectionByDefinitionsAsync(new ConflictResult()
            {
                AllConflicts         = indexed,
                Conflicts            = empty,
                OverwrittenConflicts = empty,
                ResolvedConflicts    = empty
            }, new List <string>(), "fake copy");

            result.Should().BeNull();
        }
Beispiel #15
0
        public async Task Should_load_definitions()
        {
            DISetup.SetupContainer();

            var storageProvider = new Mock <IStorageProvider>();
            var modParser       = new Mock <IModParser>();
            var parserManager   = new Mock <IParserManager>();
            var reader          = new Mock <IReader>();
            var modWriter       = new Mock <IModWriter>();
            var gameService     = new Mock <IGameService>();
            var mapper          = new Mock <IMapper>();
            var gameIndexer     = new Mock <IGameIndexer>();

            storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test");
            gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(true));
            var gameDefs = new List <IDefinition>()
            {
                new Definition()
                {
                    File = "test\\testgame.txt", Type = "test", Id = "2", ModName = "test game"
                }
            };

            gameIndexer.Setup(p => p.GetDefinitionsAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <string>())).Returns((string p1, IGame p2, string p3) => Task.FromResult(gameDefs as IEnumerable <IDefinition>));

            var defs = new IndexedDefinitions();

            defs.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    File    = "test\\test.txt",
                    Type    = "test",
                    Id      = "1",
                    ModName = "test"
                }
            });
            var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService);
            var result  = await service.LoadDefinitionsAsync(defs, new Game()
            {
                Name = "fake game"
            }, new List <string>() { "3.0.3" });

            result.GetAll().Count().Should().Be(2);
            result.GetAll().FirstOrDefault(p => p.ModName == "fake game").Should().NotBeNull();
        }
Beispiel #16
0
        public void Returns_by_disk_file()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File     = i < 5 ? "file" : i.ToString(),
                    DiskFile = i < 5 ? "diskfile" : i.ToString(),
                    Id       = i.ToString(),
                    ModName  = i.ToString(),
                    Type     = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetByDiskFile("diskfile");

            results.Count().Should().Be(defs.Where(s => s.DiskFile == "diskfile").Count());
            int match = 0;

            foreach (var item in defs.Where(s => s.DiskFile == "diskfile"))
            {
                if (results.Contains(item))
                {
                    match++;
                }
            }
            match.Should().Be(defs.Where(s => s.DiskFile == "diskfile").Count());
        }
Beispiel #17
0
        public void Returns_all_definitions()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i.ToString(),
                    Id      = i.ToString(),
                    ModName = i.ToString(),
                    Type    = i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetAll();

            results.Count().Should().Be(defs.Count);
            int match = 0;

            foreach (var item in defs)
            {
                if (results.Contains(item))
                {
                    match++;
                }
            }
            match.Should().Be(defs.Count);
        }
Beispiel #18
0
        public void Returns_by_type_and_id_non_constructed_key()
        {
            DISetup.SetupContainer();
            var defs = new List <IDefinition>();

            for (int i = 0; i < 10; i++)
            {
                defs.Add(new Definition()
                {
                    Code         = i.ToString(),
                    ContentSHA   = i.ToString(),
                    Dependencies = new List <string> {
                        i.ToString()
                    },
                    File    = i < 3 ? "file" : i.ToString(),
                    Id      = i > 4 && i < 7 ? "id" : i.ToString(),
                    ModName = i.ToString(),
                    Type    = i > 3 && i < 6 ? "type" : i.ToString()
                });
            }
            var service = new IndexedDefinitions();

            service.InitMap(defs);
            var results = service.GetByTypeAndId("type-id");

            results.Count().Should().Be(defs.Where(s => s.Type == "type" && s.Id == "id").Count());
            int match = 0;

            foreach (var item in defs.Where(s => s.Type == "type" && s.Id == "id"))
            {
                if (results.Contains(item))
                {
                    match++;
                }
            }
            match.Should().Be(defs.Where(s => s.Type == "type" && s.Id == "id").Count());
        }
        public async Task Should_select_overwritten_conflict_for_merge()
        {
            DISetup.SetupContainer();

            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var storageProvider  = new Mock <IStorageProvider>();
            var modParser        = new Mock <IModParser>();
            var reader           = new Mock <IReader>();
            var modWriter        = new Mock <IModWriter>();
            var gameService      = new Mock <IGameService>();
            var mapper           = new Mock <IMapper>();
            var modPatchExporter = new Mock <IModPatchExporter>();

            modPatchExporter.Setup(p => p.GetPatchStateAsync(It.IsAny <ModPatchExporterParameters>(), It.IsAny <bool>())).Returns(Task.FromResult((IPatchState) new PatchState()
            {
                ConflictHistory = new List <IDefinition>()
            }));
            IDefinition definition       = null;
            var         modMergeExporter = new Mock <IModMergeExporter>();

            modMergeExporter.Setup(p => p.ExportDefinitionsAsync(It.IsAny <ModMergeDefinitionExporterParameters>())).Returns((ModMergeDefinitionExporterParameters p) =>
            {
                definition = p.PatchDefinitions.FirstOrDefault();
                return(Task.FromResult(true));
            });
            var infoProvider = new Mock <IDefinitionInfoProvider>();

            infoProvider.Setup(p => p.DefinitionUsesFIOSRules(It.IsAny <IDefinition>())).Returns(true);
            infoProvider.Setup(p => p.CanProcess(It.IsAny <string>())).Returns(true);
            gameService.Setup(p => p.GetSelected()).Returns(new Game()
            {
                Type              = "Should_select_overwritten_conflict_for_merge",
                UserDirectory     = "C:\\Users\\Fake",
                WorkshopDirectory = "C:\\Fake"
            });
            var collections = new List <IModCollection>()
            {
                new ModCollection()
                {
                    IsSelected = true,
                    Mods       = new List <string>()
                    {
                        "mod/fakemod.mod"
                    },
                    Name = "test",
                    Game = "Should_select_overwritten_conflict_for_merge"
                }
            };

            storageProvider.Setup(s => s.GetModCollections()).Returns(() =>
            {
                return(collections);
            });
            var fileInfos = new List <IFileInfo>()
            {
                new FileInfo()
                {
                    Content = new List <string>()
                    {
                        "a"
                    },
                    FileName = "fakemod.mod",
                    IsBinary = false
                }
            };

            reader.Setup(s => s.Read(It.IsAny <string>(), It.IsAny <IEnumerable <string> >())).Returns(fileInfos);
            modParser.Setup(s => s.Parse(It.IsAny <IEnumerable <string> >())).Returns((IEnumerable <string> values) =>
            {
                return(new ModObject()
                {
                    FileName = values.First(),
                    Name = values.First()
                });
            });
            mapper.Setup(s => s.Map <IMod>(It.IsAny <IModObject>())).Returns((IModObject o) =>
            {
                return(new Mod()
                {
                    FileName = o.FileName,
                    Name = o.Name
                });
            });

            var service = new ModMergeService(new Cache(), messageBus.Object, modPatchExporter.Object, modMergeExporter.Object,
                                              new List <IDefinitionInfoProvider>()
            {
                infoProvider.Object
            }, reader.Object, modWriter.Object,
                                              modParser.Object, gameService.Object, storageProvider.Object, mapper.Object);

            var indexed = new IndexedDefinitions();

            indexed.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    Code    = "test = {test}",
                    File    = "events\\fake.txt",
                    ModName = "a",
                    Id      = "test1"
                }
            });

            var overwritten = new IndexedDefinitions();

            overwritten.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    Code    = "test = {testfakeoverwritten}",
                    File    = "events\\fake.txt",
                    ModName = "a",
                    Id      = "test1"
                }
            });

            var empty = new IndexedDefinitions();

            empty.InitMap(new List <IDefinition>());

            var result = await service.MergeCollectionByDefinitionsAsync(new ConflictResult()
            {
                AllConflicts         = indexed,
                Conflicts            = empty,
                OverwrittenConflicts = overwritten,
                ResolvedConflicts    = empty
            }, new List <string>() { "a" }, "fake copy");

            result.Should().NotBeNull();
            definition.Code.Should().Be("test = {testfakeoverwritten}");
        }
Beispiel #20
0
        public async Task Should_not_index_definitions()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var modParser       = new Mock <IModParser>();
            var parserManager   = new Mock <IParserManager>();
            var reader          = new Mock <IReader>();
            var modWriter       = new Mock <IModWriter>();
            var gameService     = new Mock <IGameService>();
            var mapper          = new Mock <IMapper>();
            var gameIndexer     = new Mock <IGameIndexer>();

            storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test");
            gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(false));
            gameIndexer.Setup(p => p.CachedDefinitionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <int>())).Returns((string p1, IGame p2, int p3) => Task.FromResult(false));
            gameIndexer.Setup(p => p.ClearDefinitionAsync(It.IsAny <string>(), It.IsAny <IGame>())).Returns((string p1, IGame p2) => Task.FromResult(false));
            gameIndexer.Setup(p => p.WriteVersionAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >(), It.IsAny <int>())).Returns((string p1, IGame p2, IEnumerable <string> p3, int p4) => Task.FromResult(false));
            gameIndexer.Setup(p => p.FolderCachedAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <string>())).Returns((string p1, IGame p2, string p3) => Task.FromResult(true));
            reader.Setup(p => p.GetFiles(It.IsAny <string>())).Returns(new List <string>()
            {
                "test1\\1.txt", "test2\\2.txt", "test3\\3.txt"
            });
            var fileInfos1 = new List <IFileInfo>()
            {
                new FileInfo()
                {
                    Content = new List <string>()
                    {
                        "1"
                    },
                    FileName = "test1\\1.txt",
                    IsBinary = false
                }
            };
            var fileInfos2 = new List <IFileInfo>()
            {
                new FileInfo()
                {
                    Content = new List <string>()
                    {
                        "1"
                    },
                    FileName = "test2\\2.txt",
                    IsBinary = false
                }
            };

            reader.Setup(s => s.Read(It.Is <string>(p => p.Contains("test1")), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>())).Returns(fileInfos1);
            reader.Setup(s => s.Read(It.Is <string>(p => p.Contains("test2")), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>())).Returns(fileInfos2);
            parserManager.Setup(s => s.Parse(It.IsAny <ParserManagerArgs>())).Returns((ParserManagerArgs args) =>
            {
                return(new List <IDefinition>()
                {
                    new Definition()
                    {
                        Code = args.File,
                        File = args.File,
                        ContentSHA = args.File,
                        Id = args.File,
                        Type = args.ModName
                    }
                });
            });
            var saved = new ConcurrentBag <string>();

            gameIndexer.Setup(p => p.SaveDefinitionsAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <IDefinition> >())).Returns((string p1, IGame p2, IEnumerable <IDefinition> p3) =>
            {
                saved.Add(p3.FirstOrDefault().ParentDirectory);
                return(Task.FromResult(true));
            });

            var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService);
            var indexed = new IndexedDefinitions();

            indexed.InitMap(new List <IDefinition>()
            {
                new Definition()
                {
                    File = "test1\\1.txt"
                }, new Definition()
                {
                    File = "test2\\3.txt"
                }
            });
            var result = await service.IndexDefinitionsAsync(new Game()
            {
                ExecutableLocation = "c:\\test\\test.exe", GameFolders = new List <string>()
                {
                    "test1", "test2"
                }
            }, new List <string>() { "3.0.3" }, indexed);

            result.Should().BeTrue();
            saved.Count.Should().Be(0);
        }