コード例 #1
0
        public async Task LoadDirectoryAndFile()
        {
            const string directoryAndFileName = "Item";

            using (var leftDirectory = new Infrastructure.TestDirectory())
                using (var rightDirectory = new Infrastructure.TestDirectory())
                {
                    var updateDate = DateTime.Now;

                    leftDirectory.CreateFiles(new Dictionary <string, DateTime>
                    {
                        { directoryAndFileName, updateDate }
                    });

                    // В директорию надо поместить хотя бы один файл, чтобы она была видна.
                    Infrastructure.TestDirectory.CreateFiles(rightDirectory.CreateDirectory(directoryAndFileName),
                                                             new Dictionary <string, DateTime> {
                        { "1", updateDate }
                    });

                    var settingsRow = new TestSettingsRow
                    {
                        LeftDirectory  = new SettingsDirectory(leftDirectory.FullPath),
                        RightDirectory = new SettingsDirectory(rightDirectory.FullPath)
                    };
                    var testSynchronizedItemsStatusAndCommandsUpdater = new TestSynchronizedItemsStatusAndCommandsUpdater();
                    var synchronizedDirectories = new SynchronizedItems(settingsRow, new SynchronizedItemFactory(new ItemFactory()),
                                                                        testSynchronizedItemsStatusAndCommandsUpdater);

                    await synchronizedDirectories.Load();

                    Assert.Equal(2, synchronizedDirectories.ChildItemsCount); // Одна модель на директории, одна модель на файлы.

                    // Сначала директория, потом файл.
                    var childDirectories1 = synchronizedDirectories.ChildItems[0];
                    Assert.Equal(directoryAndFileName, childDirectories1.LeftItem.Name);
                    Assert.Equal(directoryAndFileName, childDirectories1.RightItem.Name);
                    Assert.NotNull(childDirectories1.RightItem.Directory);
                    Assert.True(childDirectories1.RightItem.IsDirectory);

                    // Даже если элемент отсутствует, а присутствующий является директорией, то и этот должен быть директорией.
                    Assert.Null(childDirectories1.LeftItem.Directory);
                    Assert.True(childDirectories1.LeftItem.IsDirectory);

                    var childDirectories2 = synchronizedDirectories.ChildItems[1];
                    Assert.Equal(directoryAndFileName, childDirectories2.LeftItem.Name);
                    Assert.Equal(directoryAndFileName, childDirectories2.RightItem.Name);
                    Assert.Null(childDirectories2.LeftItem.Directory);
                    Assert.False(childDirectories2.LeftItem.IsDirectory);
                    Assert.Null(childDirectories2.RightItem.Directory);
                    Assert.False(childDirectories2.RightItem.IsDirectory);
                }
        }