예제 #1
0
        public void GetFiles_WordThenParentThenWordWithWildcardThenWord()
        {
            var filename  = "readme.txt";
            var pattern   = "tests/../addin?/" + filename;
            var finder    = new DirectoryFinder(this.fileSystem);
            var baseDir   = this.GetFakeDirectory("tools", "metamorphosator");
            var targetDir = this.GetFakeDirectory("tools", "metamorphosator", "addins");

            baseDir.GetDirectories("tests", SIO.SearchOption.TopDirectoryOnly).Returns(new[] { this.GetFakeDirectory("tools", "metamorphosator", "tests") });
            this.GetFakeDirectory("tools", "metamorphosator").GetDirectories("addin?", SIO.SearchOption.TopDirectoryOnly).Returns(new[] { targetDir });
            targetDir.GetFiles(filename).Returns(new[] { this.GetFakeFile("tools", "metamorphosator", "addins", filename) });
            var expected = new[] { this.GetFakeFile("tools", "metamorphosator", "addins", filename) };

            var actual = finder.GetFiles(baseDir, pattern);

            CollectionAssert.AreEquivalent(expected, actual);
            targetDir.Received().GetFiles(filename);
            foreach (var dir in this.fakedDirectories.Values.Where(x => x != targetDir))
            {
                dir.DidNotReceive().GetFiles(Arg.Any <string>());
            }
            targetDir.Received().GetFiles(filename);
            targetDir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
            GetFakeDirectory("tools", "frobuscator").DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
        }
예제 #2
0
        public void GetFiles_WordWithWildcard(string pattern)
        {
            var finder  = new DirectoryFinder(this.fileSystem);
            var baseDir = this.GetFakeDirectory("tools", "frobuscator", "tests", "abc");

            baseDir.GetFiles(pattern).Returns(new[] { this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll") });
            var expected = new[] { this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll") };

            var actual = finder.GetFiles(baseDir, pattern);

            CollectionAssert.AreEquivalent(expected, actual);
            baseDir.Received().GetFiles(pattern);
            baseDir.Parent.DidNotReceive().GetFiles(Arg.Any <string>());
        }
예제 #3
0
        public void GetFiles_CurrentDirThenAsterisk()
        {
            var pattern  = "./*";
            var finder   = new DirectoryFinder(this.fileSystem);
            var baseDir  = this.GetFakeDirectory("tools", "metamorphosator", "addins", "morph");
            var expected = new[] { this.GetFakeFile("tools", "metamorphosator", "addins", "morph", "setup.ini"), this.GetFakeFile("tools", "metamorphosator", "addins", "morph", "code.cs") };

            baseDir.GetFiles("*").Returns(expected);

            var actual = finder.GetFiles(baseDir, pattern);

            CollectionAssert.AreEquivalent(expected, actual);
            baseDir.Received().GetFiles("*");
            baseDir.Parent.DidNotReceive().GetFiles(Arg.Any <string>());
            baseDir.Parent.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
        }
예제 #4
0
        /// <summary>
        /// Process a .addins type file. The file contains one entry per
        /// line. Each entry may be a directory to scan, an assembly
        /// path or a wildcard pattern used to find assemblies. Blank
        /// lines and comments started by # are ignored.
        /// </summary>
        private void ProcessAddinsFile(DirectoryInfo baseDir, string fileName, bool fromWildCard)
        {
            log.Info("Processing file " + fileName);

            using (var rdr = new StreamReader(fileName))
            {
                while (!rdr.EndOfStream)
                {
                    var line = rdr.ReadLine();
                    if (line == null)
                    {
                        break;
                    }

                    line = line.Split(new char[] { '#' })[0].Trim();

                    if (line == string.Empty)
                    {
                        continue;
                    }

                    if (Path.DirectorySeparatorChar == '\\')
                    {
                        line = line.Replace(Path.DirectorySeparatorChar, '/');
                    }

                    bool isWild = fromWildCard || line.Contains("*");
                    if (line.EndsWith("/"))
                    {
                        foreach (var dir in DirectoryFinder.GetDirectories(baseDir, line))
                        {
                            ProcessDirectory(dir, isWild);
                        }
                    }
                    else
                    {
                        foreach (var file in DirectoryFinder.GetFiles(baseDir, line))
                        {
                            ProcessCandidateAssembly(file.FullName, isWild);
                        }
                    }
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Process a .addins type file. The file contains one entry per
        /// line. Each entry may be a directory to scan, an assembly
        /// path or a wildcard pattern used to find assemblies. Blank
        /// lines and comments started by # are ignored.
        /// </summary>
        private void ProcessAddinsFile(DirectoryInfo baseDir, string fileName)
        {
            log.Info("Processing file " + fileName);

            using (var rdr = new StreamReader(fileName))
            {
                while (!rdr.EndOfStream)
                {
                    var line = rdr.ReadLine();
                    if (line == null)
                    {
                        break;
                    }

                    line = line.Split(new char[] { '#' })[0].Trim();

                    if (line == string.Empty)
                    {
                        continue;
                    }

                    if (Path.DirectorySeparatorChar == '\\')
                    {
                        line = line.Replace(Path.DirectorySeparatorChar, '/');
                    }

                    if (line.EndsWith("/"))
                    {
                        foreach (var dir in DirectoryFinder.GetDirectories(baseDir, line))
                        {
                            FindExtensionsInDirectory(dir);
                        }
                    }
                    else
                    {
                        foreach (var file in DirectoryFinder.GetFiles(baseDir, line))
                        {
                            FindExtensionsInAssembly(file.FullName, true);
                        }
                    }
                }
            }
        }
예제 #6
0
        public void GetFiles_AsteriskThenWordWithWildcard(string pattern)
        {
            var filePattern = pattern.Split('/')[1];
            var finder      = new DirectoryFinder(this.fileSystem);
            var baseDir     = this.GetFakeDirectory("tools", "frobuscator", "tests");
            var abcDir      = this.GetFakeDirectory("tools", "frobuscator", "tests", "abc");
            var defDir      = this.GetFakeDirectory("tools", "frobuscator", "tests", "def");

            abcDir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll") });
            defDir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "frobuscator", "tests", "def", "tests.def.dll") });
            var expected = new[] { this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "def", "tests.def.dll") };

            var actual = finder.GetFiles(baseDir, pattern);

            CollectionAssert.AreEquivalent(expected, actual);
            abcDir.Received().GetFiles(filePattern);
            defDir.Received().GetFiles(filePattern);
            baseDir.Parent.DidNotReceive().GetFiles(Arg.Any <string>());
            baseDir.DidNotReceive().GetFiles(Arg.Any <string>());
            abcDir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
            defDir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
        }
예제 #7
0
        public void GetFiles_GreedyThenWordWithWildcard(string pattern)
        {
            var filePattern = pattern.Split('/')[1];
            var finder      = new DirectoryFinder(this.fileSystem);
            var baseDir     = this.GetFakeDirectory("tools");
            var abcDir      = this.GetFakeDirectory("tools", "frobuscator", "tests", "abc");
            var defDir      = this.GetFakeDirectory("tools", "frobuscator", "tests", "def");
            var v1Dir       = this.GetFakeDirectory("tools", "metamorphosator", "tests", "v1");
            var v2Dir       = this.GetFakeDirectory("tools", "metamorphosator", "tests", "v2");

            abcDir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"), this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll") });
            defDir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "frobuscator", "tests", "def", "tests.def.dll") });
            v1Dir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "metamorphosator", "tests", "v1", "test-assembly.dll"), this.GetFakeFile("tools", "metamorphosator", "tests", "v1", "test-assembly.pdb") });
            v2Dir.GetFiles(filePattern).Returns(new[] { this.GetFakeFile("tools", "metamorphosator", "tests", "v2", "test-assembly.dll"), this.GetFakeFile("tools", "metamorphosator", "tests", "v2", "test-assembly.pdb") });
            var expected = new[]
            {
                this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.abc.dll"),
                this.GetFakeFile("tools", "frobuscator", "tests", "abc", "tests.123.dll"),
                this.GetFakeFile("tools", "frobuscator", "tests", "def", "tests.def.dll"),
                this.GetFakeFile("tools", "metamorphosator", "tests", "v1", "test-assembly.dll"),
                this.GetFakeFile("tools", "metamorphosator", "tests", "v1", "test-assembly.pdb"),
                this.GetFakeFile("tools", "metamorphosator", "tests", "v2", "test-assembly.dll"),
                this.GetFakeFile("tools", "metamorphosator", "tests", "v2", "test-assembly.pdb")
            };

            var actual = finder.GetFiles(baseDir, pattern);

            CollectionAssert.AreEquivalent(expected, actual);
            foreach (var dir in this.fakedDirectories.Values.Where(x => x.FullName != GetRoot()))
            {
                dir.Received().GetFiles(filePattern);
            }
            baseDir.Parent.DidNotReceive().GetFiles(Arg.Any <string>());
            abcDir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
            defDir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
            v1Dir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
            v2Dir.DidNotReceive().GetDirectories(Arg.Any <string>(), Arg.Any <SIO.SearchOption>());
        }
예제 #8
0
        public void GetFiles_PatternIsEmpty()
        {
            var finder = new DirectoryFinder(Substitute.For <IFileSystem>());

            Assert.That(() => finder.GetFiles(Substitute.For <IDirectory>(), string.Empty), Throws.ArgumentException.With.Message.Contains(" pattern "));
        }
예제 #9
0
        public void GetFiles_StartDirectoryIsNull()
        {
            var finder = new DirectoryFinder(Substitute.For <IFileSystem>());

            Assert.That(() => finder.GetFiles((IDirectory)null, "notused"), Throws.ArgumentNullException.With.Message.Contains(" startDirectory "));
        }
예제 #10
0
        public void GetFiles(string pattern, int count)
        {
            var files = DirectoryFinder.GetFiles(_baseDir, pattern);

            Assert.That(files.Count, Is.EqualTo(count));
        }