예제 #1
0
        public async Task FiresEventCorrectlyWithOverwrite()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            var d1 = Encoding.UTF8.GetBytes("Hello");
            var d2 = Encoding.UTF8.GetBytes("Konnichiwa");

            fs.CreateFile("C:\\fakeDir\\file1.txt", d1);
            fs.CreateFile("C:\\SFM\\file1.txt", d2);

            DirectoryCopierFileExistsEventArgs eventArgs = null;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                eventArgs      = e;
                e.FileCopyMode = DirectoryCopierFileCopyMode.Copy;
            };

            await directoryCopier.Execute();

            Assert.AreNotEqual(null, eventArgs);

            Assert.AreEqual(eventArgs.File1, "C:\\fakeDir\\file1.txt");
            Assert.AreEqual(fs.ReadFile("C:\\fakeDir\\file1.txt"), d1);

            Assert.AreEqual(eventArgs.File2, "C:\\SFM\\file1.txt");
            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file1.txt"), d1);
        }
예제 #2
0
        public async Task CopyAllShouldSkipEvents()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            var d1 = Encoding.UTF8.GetBytes("Hello");
            var d2 = Encoding.UTF8.GetBytes("Konnichiwa");

            fs.CreateFile("C:\\fakeDir\\file1.txt", d1);
            fs.CreateFile("C:\\fakeDir\\file2.txt", d2);

            fs.CreateFile("C:\\SFM\\file1.txt");
            fs.CreateFile("C:\\SFM\\file2.txt");

            var timesEventCalled = 0;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                e.FileCopyMode = DirectoryCopierFileCopyMode.CopyAll;
                timesEventCalled++;
            };

            await directoryCopier.Execute();

            /* Setting FileCopyMode to CopyAll should disable the event */
            Assert.AreEqual(1, timesEventCalled);

            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file1.txt"), d1);
            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file2.txt"), d2);
        }
예제 #3
0
        public async Task ExecutesCorrectly()
        {
            var fs          = new MockFileSystem();
            var api         = new MockAPIConnector(fs);
            var revisionMgr = new RevisionManager(new ConfigFile("C:\\SFM"), fs);
            var ids         = new List <int>()
            {
                1337
            };
            var installationPresenter = new InstallationPresenter(api, fs, revisionMgr, ids);

            /* Create fake revision to download */
            fs.CreateDirectory("C:\\tmp");
            fs.CreateDirectory("C:\\tmp\\models");
            fs.CreateFile("C:\\tmp\\models\\model.ext");
            fs.CreateDirectory("C:\\tmp\\materials");
            fs.CreateFile("C:\\tmp\\materials\\material.ext");
            var revision = Revision.CreateTemporaryRevisionFromFolder(1337, "C:\\tmp", fs);

            api.AddRevision("C:\\tmp", revision);

            await installationPresenter.Execute();

            Assert.IsTrue(revisionMgr.VerifyInstalled(revision, null));
        }
예제 #4
0
 public static void CreateFakeTempRevisionStructure(MockFileSystem fs)
 {
     fs.CreateDirectory("C:\\tmp");
     fs.CreateDirectory("C:\\tmp\\models");
     fs.CreateFile("C:\\tmp\\models\\pony.vtf");
     fs.CreateDirectory("C:\\tmp\\materials");
     fs.CreateFile("C:\\tmp\\materials\\pony.vmt");
 }
예제 #5
0
        public void GetFilesReturnsCorrectFiles()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\someFolder\\myFile.txt");
            fs.CreateFile("C:\\someFolder\\gaben.txt");

            var files = fs.GetFiles("C:\\someFolder");

            Assert.AreEqual(files.Count, 2);
        }
예제 #6
0
        public async Task CopiesDirectoryCorrectlyOnlyFiles()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", false);

            fs.CreateDirectory("C:\\fakeDir");
            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\fakeDir\\file2.txt");

            await directoryCopier.Execute();

            Assert.IsTrue(fs.FileExists("C:\\SFM\\file1.txt"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\file2.txt"));
        }
        public async Task ExecutesCorrectly()
        {
            var configFile      = new ConfigFile("C:\\SFM");
            var fs              = new MockFileSystem();
            var revisionManager = new RevisionManager(configFile, fs);

            fs.CreateDirectory("C:\\SFM");
            fs.CreateDirectory("C:\\SFM\\ponysfm");

            fs.CreateDirectory("C:\\tmp");
            fs.CreateDirectory("C:\\tmp\\models");
            fs.CreateFile("C:\\tmp\\models\\pony.vtf");

            fs.CreateDirectory("C:\\tmp\\materials");
            fs.CreateFile("C:\\tmp\\materials\\pony.vmt");

            var files = new List <RevisionFileEntry>
            {
                RevisionFileEntry.FromFile("C:\\tmp\\models\\pony.vtf", fs),
                RevisionFileEntry.FromFile("C:\\tmp\\materials\\pony.vmt", fs)
            };

            var revision = new Revision(1, files);

            await revisionManager.InstallRevision(revision, "C:\\tmp", null);

            Assert.IsTrue(revisionManager.VerifyInstalled(revision, null));

            var list = new List <int> {
                1
            };

            var deinstallationPresenter = new DeinstallationPresenter(revisionManager, list);

            await deinstallationPresenter.Execute();

            Assert.IsFalse(revisionManager.VerifyInstalled(revision, null));

            foreach (var file in revision.Files)
            {
                Assert.IsFalse(fs.FileExists(file.Path));
            }
        }
예제 #8
0
        public void CopyFile()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\someFolder\\myFile.txt"); /* TODO: set data */
            fs.CopyFile("C:\\someFolder\\myFile.txt", "C:\\someFolder\\copy.txt");

            Assert.IsTrue(fs.FileExists("C:\\someFolder\\myFile.txt"));
            Assert.IsTrue(fs.FileExists("C:\\someFolder\\copy.txt"));
        }
예제 #9
0
        public void TestNopExecution()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\gameinfo.txt", Encoding.UTF8.GetBytes(_gameinfoDataComplete));
            var handler = new GameinfoHandler("C:\\gameinfo.txt", fs);

            var error = handler.Execute();

            Assert.AreEqual(GameinfoHandlerError.AlreadyAdded, error);
        }
예제 #10
0
        public void TestFaultyExecution()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\gameinfo.txt", Encoding.UTF8.GetBytes(GameinfoDataInvalid));
            var handler = new GameinfoHandler("C:\\gameinfo.txt", fs);

            var error = handler.Execute();

            Assert.AreEqual(GameinfoHandlerError.FileInvalid, error);
        }
예제 #11
0
        public async Task FiresEventCorrectly()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);
            var copiedFiles     = new List <Tuple <string, string> >();
            var progressHistory = new List <int>();

            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\SFM\\file1.txt");

            DirectoryCopierFileExistsEventArgs eventArgs = null;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                eventArgs = e;
            };

            directoryCopier.OnFileCopy += delegate(object sender, DirectoryCopierCopyEventArgs e)
            {
                copiedFiles.Add(new Tuple <string, string>(e.File1, e.File2));
            };

            directoryCopier.OnProgress += delegate(object sender, DirectoryProgressEventArgs e)
            {
                progressHistory.Add(e.Progress);
            };

            await directoryCopier.Execute();

            Assert.AreNotEqual(null, eventArgs);
            Assert.AreEqual(eventArgs.File1, "C:\\fakeDir\\file1.txt");
            Assert.AreEqual(eventArgs.File2, "C:\\SFM\\file1.txt");

            Assert.IsTrue(copiedFiles.Contains(new Tuple <string, string>("C:\\fakeDir\\file1.txt", "C:\\SFM\\file1.txt")));

            Assert.IsTrue(progressHistory.Contains(100));
        }
예제 #12
0
        public async Task CopiesDirectoryCorrectlyWithSubDirs()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            fs.CreateDirectory("C:\\fakeDir");
            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\fakeDir\\file2.txt");

            fs.CreateDirectory("C:\\fakeDir\\folder");
            fs.CreateFile("C:\\fakeDir\\folder\\file3.txt");

            fs.CreateDirectory("C:\\fakeDir\\folder\\folder2");
            fs.CreateFile("C:\\fakeDir\\folder\\folder2\\file4.txt");

            await directoryCopier.Execute();

            Assert.IsTrue(fs.FileExists("C:\\SFM\\file1.txt"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\file2.txt"));
            Assert.IsTrue(fs.DirectoryExists("C:\\SFM\\folder"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\folder\\file3.txt"));
            Assert.IsTrue(fs.DirectoryExists("C:\\SFM\\folder\\folder2"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\folder\\folder2\\file4.txt"));
        }
예제 #13
0
        public void TestCorrectExecution()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\gameinfo.txt", Encoding.UTF8.GetBytes(GameinfoData));
            var handler = new GameinfoHandler("C:\\gameinfo.txt", fs);

            var error = handler.Execute();

            Assert.AreEqual(GameinfoHandlerError.Success, error);

            var newdata = Encoding.UTF8.GetString(fs.ReadFile("C:\\gameinfo.txt")).Replace("\r", "");

            Assert.IsTrue(newdata.IndexOf(GameinfoHandler.GameinfoLine, StringComparison.Ordinal) != -1);
            Assert.AreEqual(_gameinfoDataComplete, newdata);
        }
예제 #14
0
        public void TestBackup()
        {
            var fs = new MockFileSystem();

            fs.CreateFile("C:\\gameinfo.txt", Encoding.UTF8.GetBytes(GameinfoData));
            var handler = new GameinfoHandler("C:\\gameinfo.txt", fs);

            handler.CreateBackup();

            Assert.IsTrue(fs.FileExists("C:\\gameinfo.txt.bak"));
            var backupdata = fs.ReadFile("C:\\gameinfo.txt.bak");

            Assert.AreEqual(GameinfoData, Encoding.UTF8.GetString(backupdata));

            /* Now test RestoreBackup */
            fs.DeleteFile("C:\\gameinfo.txt");

            handler.RestoreBackup();

            Assert.IsTrue(fs.FileExists("C:\\gameinfo.txt"));
        }
예제 #15
0
        public void PopulateData()
        {
            var fs = new MockFileSystem();

            fs.CreateFile(_stubfile);
            var db = new RevisionDatabase(_filepath, fs);

            Assert.IsTrue(fs.FileExists(_filepath));

            for (var i = 0; i < 5; i++)
            {
                db.Revisions.Add(CreateStubRevision(fs));
            }

            db.WriteDbDisk();

            var doc = fs.OpenXml(_filepath);

            Assert.IsTrue(doc.HasChildNodes);
            Assert.IsTrue(doc.FirstChild.Name == "PonySFM");
            Assert.IsTrue(doc.FirstChild.HasChildNodes);
            Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 5);

            foreach (XmlElement elem in doc.FirstChild.ChildNodes)
            {
                Assert.IsTrue(elem.HasAttribute("ID"));
                Assert.IsTrue(elem.HasAttribute("Test"));
                Assert.AreEqual("Cake", elem.GetAttribute("Test"));
                Assert.IsTrue(elem.HasChildNodes);

                foreach (XmlElement fileElem in elem.ChildNodes)
                {
                    Assert.IsTrue(fileElem.GetAttribute("Location") == _stubfile);
                }
            }
        }