public void GetDepFilenameForProto_IsSane()
 {
     StringAssert.IsMatch(@"^out[\\/][a-f0-9]{16}_foo.protodep$",
                          DepFileUtil.GetDepFilenameForProto("out", "foo.proto"));
     StringAssert.IsMatch(@"^[a-f0-9]{16}_foo.protodep$",
                          DepFileUtil.GetDepFilenameForProto("", "foo.proto"));
 }
        public void GetDepFilenameForProto_HashesDir()
        {
            string PickHash(string fname) =>
            DepFileUtil.GetDepFilenameForProto("", fname).Substring(0, 16);

            string same1   = PickHash("dir1/dir2/foo.proto");
            string same2   = PickHash("dir1/dir2/proto.foo");
            string same3   = PickHash("dir1/dir2/proto");
            string same4   = PickHash("dir1/dir2/.proto");
            string unsame1 = PickHash("dir2/foo.proto");
            string unsame2 = PickHash("/dir2/foo.proto");

            Assert.AreEqual(same1, same2);
            Assert.AreEqual(same1, same3);
            Assert.AreEqual(same1, same4);
            Assert.AreNotEqual(same1, unsame1);
            Assert.AreNotEqual(unsame1, unsame2);
        }
        // NB in our tests files are put into the temp directory but all have
        // different names. Avoid adding files with the same directory path and
        // name, or add reasonable handling for it if required. Tests are run in
        // parallel and will collide otherwise.
        private string[] ReadDependencyInputFromFileData(string fileData, string protoName)
        {
            string tempPath = Path.GetTempPath();
            string tempfile = DepFileUtil.GetDepFilenameForProto(tempPath, protoName);

            try
            {
                File.WriteAllText(tempfile, fileData);
                var mockEng = new Moq.Mock <IBuildEngine>();
                var log     = new TaskLoggingHelper(mockEng.Object, "x");
                return(DepFileUtil.ReadDependencyInputs(tempPath, protoName, log));
            }
            finally
            {
                try
                {
                    File.Delete(tempfile);
                }
                catch { }
            }
        }