Beispiel #1
0
        public async Task NoFilesOutOfDate()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.TouchLibrary(LastWeek, files);
                    libDb.TouchDatabase(Yesterday, files);
                    Assert.IsFalse(await analyzer.Prepare(true));

                    Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());
                    Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #2
0
        public async Task FileInSitePackageMissing()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.DeleteLibrary("site-packages\\B\\b.py");

                    Assert.IsFalse(await analyzer.Prepare(true));

                    Assert.AreEqual(files.Count() - 1, libDb.FilesInDatabase.Count());
                    Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #3
0
        public async Task AllFilesOutOfDate()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.TouchLibrary(files);
                    Assert.IsTrue(await analyzer.Prepare(true));

                    Assert.AreEqual(0, libDb.FilesInDatabase.Count());
                    Assert.AreEqual(2, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(files.Count() - 1, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                    Assert.AreEqual(1, analyzer._scrapeFileGroups.Count);
                    Assert.AreEqual(1, analyzer._scrapeFileGroups.SelectMany(i => i).Count());
                }
        }
Beispiel #4
0
        public async Task IdbInSitePackageMissing()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.DeleteDatabase("site-packages\\B\\__init__.py");

                    Assert.IsTrue(await analyzer.Prepare(true));

                    Assert.AreEqual(files.Count() - 2, libDb.FilesInDatabase.Count());
                    Assert.AreEqual(1, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(2, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #5
0
        public async Task SitePackageRemoved()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    var path = Path.Combine(libDb.Library, "site-packages", "B");
                    Directory.Delete(path, true);

                    Assert.IsFalse(await analyzer.Prepare(true));

                    // Two files deleted and nothing queued.
                    Assert.AreEqual(files.Count() - 2, libDb.FilesInDatabase.Count());
                    Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #6
0
        public async Task ChangeAllToTrueOnSecondGroup()
        {
            var files = new[] {
                "a.py",
                "site-packages\\b.py",
                "site-packages\\C\\__init__.py"
            };

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    Assert.IsTrue(analyzer.SkipUnchanged);

                    Assert.IsTrue(await analyzer.Prepare(true));

                    Assert.IsFalse(analyzer.SkipUnchanged);
                    Assert.AreEqual(3, analyzer._analyzeFileGroups.Count);
                }
        }
Beispiel #7
0
        public async Task SitePackageAdded()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    var path = Path.Combine(libDb.Library, "site-packages", "newPackage");
                    Directory.CreateDirectory(path);
                    File.WriteAllText(Path.Combine(path, "__init__.py"), "Not a real .py file");
                    File.WriteAllText(Path.Combine(path, "newMod.py"), "Not a real .py file");

                    Assert.IsTrue(await analyzer.Prepare(true));

                    // Nothing deleted, and only one analysis group queued.
                    Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());
                    Assert.AreEqual(1, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(2, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #8
0
        public async Task ConflictingPyAndPyd()
        {
            var files = new[] {
                "a.py",
                "a.pyd",
                "b.pyd",
                "b.pyw"
            };

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.DeleteDatabase(files);

                    Assert.IsTrue(await analyzer.Prepare(true));

                    Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(1, analyzer._scrapeFileGroups.Count);
                    Assert.AreEqual(2, analyzer._scrapeFileGroups[0].Count);
                }
        }
Beispiel #9
0
        public async Task SitePackagesInPthFile()
        {
            var files = new[] {
                "a.py",
                "site-packages\\b.py",
                "site-packages\\C\\__init__.py",
                "site-packages\\D\\__init__.py"
            };

            using (var libDb = new TemporaryLibAndDB(files)) {
                libDb.AddFileToLibrary("site-packages\\self.pth", ".");

                using (var analyzer = libDb.Analyzer) {
                    Assert.IsTrue(await analyzer.Prepare(true));

                    // Expect four groups, whereas if self.pth was allowed we'd
                    // only see three.
                    Assert.AreEqual(4, analyzer._analyzeFileGroups.Count);
                }
            }
        }
Beispiel #10
0
        public async Task FileInStdLibMissing()
        {
            var files = BasicFiles;

            using (var libDb = new TemporaryLibAndDB(files))
                using (var analyzer = libDb.Analyzer) {
                    libDb.DeleteLibrary("a.py");

                    Assert.IsFalse(await analyzer.Prepare(true));

                    // This is the result we'd expect.
                    //Assert.AreEqual(files.Count() - 1, libDb.FilesInDatabase.Count())

                    // But because we don't provide an interpreter here, no files
                    // from the top-level database directory will ever be deleted.
                    // Otherwise, sys.builtin_module_names is used to determine
                    // which files to keep.
                    Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());

                    Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                    Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
                }
        }
Beispiel #11
0
        public async Task SitePackagesInPthFile() {
            var files = new[] {
                "a.py",
                "site-packages\\b.py",
                "site-packages\\C\\__init__.py",
                "site-packages\\D\\__init__.py"
            };

            using (var libDb = new TemporaryLibAndDB(files)) {
                libDb.AddFileToLibrary("site-packages\\self.pth", ".");

                using (var analyzer = libDb.Analyzer) {
                    Assert.IsTrue(await analyzer.Prepare(true));

                    // Expect four groups, whereas if self.pth was allowed we'd
                    // only see three.
                    Assert.AreEqual(4, analyzer._analyzeFileGroups.Count);
                }
            }
        }
Beispiel #12
0
        public async Task FileInStdLibMissing() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.DeleteLibrary("a.py");

                Assert.IsFalse(await analyzer.Prepare(true));

                // This is the result we'd expect.
                //Assert.AreEqual(files.Count() - 1, libDb.FilesInDatabase.Count())

                // But because we don't provide an interpreter here, no files
                // from the top-level database directory will ever be deleted.
                // Otherwise, sys.builtin_module_names is used to determine
                // which files to keep.
                Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());

                Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #13
0
        public async Task FileInSitePackageMissing() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.DeleteLibrary("site-packages\\B\\b.py");

                Assert.IsFalse(await analyzer.Prepare(true));

                Assert.AreEqual(files.Count() - 1, libDb.FilesInDatabase.Count());
                Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #14
0
        public async Task FileInStdLibOutOfDate() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.TouchLibrary("a.py");

                Assert.IsTrue(await analyzer.Prepare(true));

                Assert.AreEqual(0, libDb.FilesInDatabase.Count());
                Assert.AreEqual(2, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(files.Count() - 1, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                Assert.AreEqual(1, analyzer._scrapeFileGroups.Count);
                Assert.AreEqual(1, analyzer._scrapeFileGroups.SelectMany(i => i).Count());
            }
        }
Beispiel #15
0
        public async Task IdbInSitePackageMissing() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.DeleteDatabase("site-packages\\B\\__init__.py");

                Assert.IsTrue(await analyzer.Prepare(true));

                Assert.AreEqual(files.Count() - 2, libDb.FilesInDatabase.Count());
                Assert.AreEqual(1, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(2, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #16
0
        public async Task SitePackageAdded() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                var path = Path.Combine(libDb.Library, "site-packages", "newPackage");
                Directory.CreateDirectory(path);
                File.WriteAllText(Path.Combine(path, "__init__.py"), "Not a real .py file");
                File.WriteAllText(Path.Combine(path, "newMod.py"), "Not a real .py file");

                Assert.IsTrue(await analyzer.Prepare(true));

                // Nothing deleted, and only one analysis group queued.
                Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());
                Assert.AreEqual(1, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(2, analyzer._analyzeFileGroups.SelectMany(i => i).Count());
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #17
0
        public async Task SitePackageRemoved() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                var path = Path.Combine(libDb.Library, "site-packages", "B");
                Directory.Delete(path, true);

                Assert.IsFalse(await analyzer.Prepare(true));

                // Two files deleted and nothing queued.
                Assert.AreEqual(files.Count() - 2, libDb.FilesInDatabase.Count());
                Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #18
0
        public async Task NoFilesOutOfDate() {
            var files = BasicFiles;
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.TouchLibrary(LastWeek, files);
                libDb.TouchDatabase(Yesterday, files);
                Assert.IsFalse(await analyzer.Prepare(true));

                Assert.AreEqual(files.Count(), libDb.FilesInDatabase.Count());
                Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(0, analyzer._scrapeFileGroups.Count);
            }
        }
Beispiel #19
0
        public async Task ConflictingPyAndPyd() {
            var files = new[] {
                "a.py",
                "a.pyd",
                "b.pyd",
                "b.pyw"
            };
            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                libDb.DeleteDatabase(files);

                Assert.IsTrue(await analyzer.Prepare(true));

                Assert.AreEqual(0, analyzer._analyzeFileGroups.Count);
                Assert.AreEqual(1, analyzer._scrapeFileGroups.Count);
                Assert.AreEqual(2, analyzer._scrapeFileGroups[0].Count);
            }
        }
Beispiel #20
0
        public async Task ChangeAllToTrueOnSecondGroup() {
            var files = new[] {
                "a.py",
                "site-packages\\b.py",
                "site-packages\\C\\__init__.py"
            };

            using (var libDb = new TemporaryLibAndDB(files))
            using (var analyzer = libDb.Analyzer) {
                Assert.IsTrue(analyzer.SkipUnchanged);

                Assert.IsTrue(await analyzer.Prepare(true));

                Assert.IsFalse(analyzer.SkipUnchanged);
                Assert.AreEqual(3, analyzer._analyzeFileGroups.Count);
            }
        }
Beispiel #21
0
        public void TemporaryLibTest()
        {
            string libPath = "C:\\", dbPath = "C:\\";

            using (var libDb = new TemporaryLibAndDB(
                       "a.py",
                       "b.pyd",
                       "A1\\__init__.py",
                       "A1\\a.py",
                       "A2\\__init__.py",
                       "A2\\a.py",
                       "site-packages\\B\\__init__.py",
                       "site-packages\\B\\b.py"
                       )) {
                libPath = libDb.Library;
                dbPath  = libDb.Database;

                Assert.AreEqual(8, libDb.FilesInDatabase.Count());
                Assert.AreEqual(8, libDb.FilesInLibrary.Count());

                foreach (var p in libDb.FilesInDatabase)
                {
                    Console.WriteLine(p);
                }

                foreach (var p in libDb.FilesInLibrary)
                {
                    Console.WriteLine(p);
                }

                Assert.IsTrue(File.Exists(Path.Combine(libDb.Database, "database.ver")));
                Assert.AreEqual(
                    PythonTypeDatabase.CurrentVersion,
                    int.Parse(File.ReadAllText(Path.Combine(libDb.Database, "database.ver")))
                    );

                var path = Path.Combine(libDb.Library, "a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "b.pyd");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "A1\\a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "A2\\a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "site-packages\\B\\__init__.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "site-packages\\B\\b.py");
                Assert.IsTrue(File.Exists(path), path);

                path = Path.Combine(libDb.Database, "a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "b.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "A1.a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "A2.a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "B", "B.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "B", "B.b.idb");
                Assert.IsTrue(File.Exists(path), path);

                var path1 = Path.Combine(libDb.Library, "a.py");
                var path2 = Path.Combine(libDb.Database, "a.idb");
                libDb.TouchLibrary(LastWeek, "a.py");
                libDb.TouchDatabase("a.py");
                Assert.IsTrue(File.GetLastWriteTime(path1) < File.GetLastWriteTime(path2));
                libDb.TouchDatabase(LastWeek, "a.py");
                libDb.TouchLibrary("a.py");
                Assert.IsTrue(File.GetLastWriteTime(path1) > File.GetLastWriteTime(path2));
            }

            Assert.IsFalse(Directory.Exists(libPath), libPath);
            Assert.IsFalse(Directory.Exists(dbPath), dbPath);
        }
Beispiel #22
0
        public void TemporaryLibTest() {
            string libPath, dbPath;

            using (var libDb = new TemporaryLibAndDB(
                "a.py",
                "b.pyd",
                "A1\\__init__.py",
                "A1\\a.py",
                "A2\\__init__.py",
                "A2\\a.py",
                "site-packages\\B\\__init__.py",
                "site-packages\\B\\b.py"
            )) {
                libPath = libDb.Library;
                dbPath = libDb.Database;

                Assert.AreEqual(8, libDb.FilesInDatabase.Count());
                Assert.AreEqual(8, libDb.FilesInLibrary.Count());

                foreach (var p in libDb.FilesInDatabase) {
                    Console.WriteLine(p);
                }

                foreach (var p in libDb.FilesInLibrary) {
                    Console.WriteLine(p);
                }

                Assert.IsTrue(File.Exists(Path.Combine(libDb.Database, "database.ver")));
                Assert.AreEqual(
                    PythonTypeDatabase.CurrentVersion,
                    int.Parse(File.ReadAllText(Path.Combine(libDb.Database, "database.ver")))
                );

                var path = Path.Combine(libDb.Library, "a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "b.pyd");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "A1\\a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "A2\\a.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "site-packages\\B\\__init__.py");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Library, "site-packages\\B\\b.py");
                Assert.IsTrue(File.Exists(path), path);

                path = Path.Combine(libDb.Database, "a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "b.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "A1.a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "A2.a.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "B", "B.idb");
                Assert.IsTrue(File.Exists(path), path);
                path = Path.Combine(libDb.Database, "B", "B.b.idb");
                Assert.IsTrue(File.Exists(path), path);

                var path1 = Path.Combine(libDb.Library, "a.py");
                var path2 = Path.Combine(libDb.Database, "a.idb");
                libDb.TouchLibrary(LastWeek, "a.py");
                libDb.TouchDatabase("a.py");
                Assert.IsTrue(File.GetLastWriteTime(path1) < File.GetLastWriteTime(path2));
                libDb.TouchDatabase(LastWeek, "a.py");
                libDb.TouchLibrary("a.py");
                Assert.IsTrue(File.GetLastWriteTime(path1) > File.GetLastWriteTime(path2));
            }

            Assert.IsFalse(Directory.Exists(libPath), libPath);
            Assert.IsFalse(Directory.Exists(dbPath), dbPath);
        }