public void SetUp ()
 {
   _directoryName = "Parent\\Directory";
   _parentDirectory = MockRepository.GenerateStub<IDirectoryInfo>();
   _creationTime = new DateTime (2009, 10, 1);
   _lastAccessTime = new DateTime (2009, 10, 2);
   _lastWriteTime = new DateTime (2009, 10, 3);
   _inMemoryDirectoryInfo = new InMemoryDirectoryInfo (_directoryName, _parentDirectory, _creationTime, _lastAccessTime, _lastWriteTime);
 }
    public ZipFileExtractor (Stream archiveStream)
    {
      ArgumentUtility.CheckNotNull ("archiveStream", archiveStream);
      _archiveStream = archiveStream;

      _zipFile = new ZipFile (_archiveStream);
      _zipFile.NameTransform = new WindowsNameTransform();
      var directoryTreeResolver = new DirectoryTreeResolver (DateTime.Now);
      _files = GetFilesInternal(directoryTreeResolver);
      _root = new InMemoryDirectoryInfo ("\\\\", null, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow);
      _root.Directories.AddRange (directoryTreeResolver.GetRootDirectories());
    }
Exemple #3
0
        [Fact] // https://github.com/dotnet/runtime/issues/36415
        public void VerifyInMemoryDirectoryInfo_IsNotEmpty()
        {
            IEnumerable <string>             files = new[] { @"pagefile.sys" };
            InMemoryDirectoryInfo            directoryInfo;
            IEnumerable <FileSystemInfoBase> fileSystemInfos;

            if (PlatformDetection.IsWindows)
            {
                directoryInfo   = new InMemoryDirectoryInfo(@"C:\", files);
                fileSystemInfos = directoryInfo.EnumerateFileSystemInfos();

                Assert.Equal(1, fileSystemInfos.Count());
            }

            directoryInfo   = new InMemoryDirectoryInfo("/", files);
            fileSystemInfos = directoryInfo.EnumerateFileSystemInfos();

            Assert.Equal(1, fileSystemInfos.Count());
        }
 public InMemoryFileInfo(string file, InMemoryDirectoryInfo parent)
 {
     FullName = file;
     Name     = Path.GetFileName(file);
     _parent  = parent;
 }
Exemple #5
0
        private async Task OnFileChanged(object sender, System.IO.FileSystemEventArgs e)
        {
            // Skip directory change events and when rpc has ben disconnected
            if (!e.IsDirectoryChanged() && _rpc != null)
            {
                // Create something to match with
                var item = new InMemoryDirectoryInfo(_root, new string[] { e.FullPath });

                // See if this matches one of our patterns.
                if (_matcher.Execute(item).HasMatches)
                {
                    // Send out the event to the language server
                    var renamedArgs     = e as System.IO.RenamedEventArgs;
                    var didChangeParams = new DidChangeWatchedFilesParams();

                    // Visual Studio actually does a rename when saving. The rename is from a file ending with '~'
                    if (renamedArgs == null || renamedArgs.OldFullPath.EndsWith("~"))
                    {
                        renamedArgs                    = null;
                        didChangeParams.Changes        = new FileEvent[] { new FileEvent() };
                        didChangeParams.Changes[0].Uri = new Uri(e.FullPath);

                        switch (e.ChangeType)
                        {
                        case WatcherChangeTypes.Created:
                            didChangeParams.Changes[0].FileChangeType = FileChangeType.Created;
                            break;

                        case WatcherChangeTypes.Deleted:
                            didChangeParams.Changes[0].FileChangeType = FileChangeType.Deleted;
                            break;

                        case WatcherChangeTypes.Changed:
                            didChangeParams.Changes[0].FileChangeType = FileChangeType.Changed;
                            break;

                        case WatcherChangeTypes.Renamed:
                            didChangeParams.Changes[0].FileChangeType = FileChangeType.Changed;
                            break;

                        default:
                            didChangeParams.Changes = Array.Empty <FileEvent>();
                            break;
                        }
                    }
                    else
                    {
                        // file renamed
                        var deleteEvent = new FileEvent();
                        deleteEvent.FileChangeType = FileChangeType.Deleted;
                        deleteEvent.Uri            = new Uri(renamedArgs.OldFullPath);

                        var createEvent = new FileEvent();
                        createEvent.FileChangeType = FileChangeType.Created;
                        createEvent.Uri            = new Uri(renamedArgs.FullPath);

                        didChangeParams.Changes = new FileEvent[] { deleteEvent, createEvent };
                    }

                    if (didChangeParams.Changes.Any())
                    {
                        await _rpc.NotifyWithParameterObjectAsync(Methods.WorkspaceDidChangeWatchedFiles.Name, didChangeParams);

                        if (renamedArgs != null)
                        {
                            var textDocumentIdentifier = new TextDocumentIdentifier();
                            textDocumentIdentifier.Uri = new Uri(renamedArgs.OldFullPath);

                            var closeParam = new DidCloseTextDocumentParams();
                            closeParam.TextDocument = textDocumentIdentifier;

                            await _rpc.NotifyWithParameterObjectAsync(Methods.TextDocumentDidClose.Name, closeParam);

                            var textDocumentItem = new TextDocumentItem();
                            textDocumentItem.Uri = new Uri(renamedArgs.FullPath);

                            var openParam = new DidOpenTextDocumentParams();
                            openParam.TextDocument = textDocumentItem;
                            await _rpc.NotifyWithParameterObjectAsync(Methods.TextDocumentDidOpen.Name, openParam);
                        }
                    }
                }
            }
        }
    private Func<IDirectoryInfo, InMemoryDirectoryInfo> CreateDirectory (
        string name,
        params Func<IDirectoryInfo, IFileSystemEntry>[] subEntries)
    {
      return parent =>
      {
        var directory = new InMemoryDirectoryInfo (
            parent != null ? Path.Combine (parent.FullName, name) : name,
            parent,
            DateTime.Now,
            DateTime.Now,
            DateTime.Now);

        foreach (var subEntry in subEntries)
        {
          var value = subEntry (directory);

          var dir = value as IDirectoryInfo;
          if (dir != null)
          {
            directory.Directories.Add (dir);
          }
          else
          {
            var file = value as IFileInfo;
            if (file != null)
              directory.Files.Add (file);
          }
        }

        return directory;
      };
    }