public async Task DataService_Favorite()
        {
            var service = GetDataService();

            for (var i = 0; i < 10; i++)
            {
                var dataObject = new DataObject();
                dataObject.SetText(i.ToString());
                var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
                service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            }

            var dataObject2 = new DataObject();

            dataObject2.SetText("-1");
            var entry2 = new ClipboardHookEventArgs(dataObject2, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry2, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            Assert.AreEqual(service.DataEntries.Count, 11);
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.First().Thumbnail.Value), "-1");
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.Last().Thumbnail.Value), "0");

            service.DataEntries.Last().IsFavorite = true;
            await service.ReorganizeAsync(true);

            Assert.AreEqual(service.DataEntries.Count, 11);
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.First().Thumbnail.Value), "0");
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.ToList()[1].Thumbnail.Value), "-1");
        }
示例#2
0
        public async Task ClipboardService_IgnoredApplication()
        {
            var service     = GetClipboardService();
            var dataService = ServiceLocator.GetService <DataService>();

            var dataObject = new DataObject();

            dataObject.SetText("Hello World");
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 1);

            TestUtilities.GetSettingProvider().IgnoredApplications.Add(new IgnoredApplication()
            {
                ApplicationIdentifier = @"C:\Windows\explorer.exe"
            });

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.Reset();
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 1);
        }
示例#3
0
        private async Task <string> CreateFakeContentOnServerAsync()
        {
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello", TextDataFormat.UnicodeText);
            dataObject.SetText("Hello", TextDataFormat.Text);
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            await cloudStorageService.SynchronizeAsync();

            // Create all of the directories
            foreach (var dirPath in Directory.GetDirectories(cloudStorageProviderMock.TemporaryFolder, "*", SearchOption.AllDirectories))
            {
                Directory.CreateDirectory(dirPath.Replace(cloudStorageProviderMock.TemporaryFolder, cloudStorageProviderMock.TemporaryFolder + "_temp"));
            }

            //Copy all the files & Replaces any files with the same name
            foreach (var newPath in Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder, "*.*", SearchOption.AllDirectories))
            {
                File.Copy(newPath, newPath.Replace(cloudStorageProviderMock.TemporaryFolder, cloudStorageProviderMock.TemporaryFolder + "_temp"), true);
            }

            return(cloudStorageProviderMock.TemporaryFolder + "_temp");
        }
        public void DataService_DataEntry_Thumbnail_Link()
        {
            var service    = GetDataService();
            var dataObject = new DataObject();

            dataObject.SetText("http://www.google.com");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            var dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.Link);
            Assert.AreEqual(DataHelper.FromBase64 <Link>(dataEntry.Thumbnail.Value).Uri, "http://www.google.com");
            Assert.AreEqual(DataHelper.FromBase64 <Link>(dataEntry.Thumbnail.Value).Title, "Google");

            dataObject = new DataObject();
            dataObject.SetText("1");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.String);

            dataObject = new DataObject();
            dataObject.SetText("C:\\file.txt");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.String);
        }
示例#5
0
        public async Task CloudStorageService_Synchronize_DataAddedButExpired()
        {
            /*
             * Scenario :
             * We add two data entries to the local data. There is actually nothing on the server.
             * The two data entries are expired (date limit) and must be deleted, and not uploaded. There will be no "real" data on the server, only the entries.
             */

            var dataService         = GetDataService();
            var cloudStorageService = GetCloudStorageService();

            var date = new DateTime(2017, 1, 1);

            var dataObject = new DataObject();

            dataObject.SetText("Hello");
            var entry = new ClipboardHookEventArgs(dataObject, false, date.Ticks);

            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            dataObject = new DataObject();
            dataObject.SetText("Good Bye");
            entry = new ClipboardHookEventArgs(dataObject, false, date.Ticks);
            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Deleted));

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(0, cloudDataEntries.Count);
            Assert.AreEqual(0, dataService.Cache.Count);
        }
        public void DataService_DisablePasswordAndCreditCardSync()
        {
            var window = new Models.Window(IntPtr.Zero, "Edge", new Process(), "Microsoft.MicrosoftEdge", null, true);

            var service    = GetDataService();
            var dataObject = new DataObject();
            var entry      = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), window, false);

            var dataEntry = service.DataEntries[0];

            Assert.IsTrue(dataEntry.CanSynchronize);

            service.AddDataEntry(entry, new List <DataIdentifier>(), window, true);

            dataEntry = service.DataEntries[0];
            Assert.IsFalse(dataEntry.CanSynchronize);

            TestUtilities.GetSettingProvider().DisablePasswordAndCreditCardSync = false;

            service.AddDataEntry(entry, new List <DataIdentifier>(), window, false);

            dataEntry = service.DataEntries[0];
            Assert.IsTrue(dataEntry.CanSynchronize);

            service.AddDataEntry(entry, new List <DataIdentifier>(), window, true);

            dataEntry = service.DataEntries[0];
            Assert.IsTrue(dataEntry.CanSynchronize);
        }
示例#7
0
        public void ClipboardService_CreditCard()
        {
            var service     = GetClipboardService();
            var dataService = ServiceLocator.GetService <DataService>();

            var dataObject = new DataObject();

            dataObject.SetText("  4974- 0411-3456- 7895 ");
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();

            Assert.AreEqual(dataService.DataEntries.Count, 0);

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 1);
            Assert.AreEqual(DataHelper.FromBase64 <string>(dataService.DataEntries.First().Thumbnail.Value), "4974-••••-••••-7895");

            dataObject = new DataObject();
            dataObject.SetText("  4974- 0411-3451- 7895 ");
            entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 1);

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 2);

            TestUtilities.GetSettingProvider().AvoidCreditCard = false;

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry1);
            }, 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();
            Assert.AreEqual(dataService.DataEntries.Count, 3);
        }
示例#8
0
        public async Task CloudStorageService_Synchronize_DeletedLocallyAndRemotely()
        {
            /*
             * Scenario :
             * There is a data on the server and the same data locally.
             * We delete it from local. It must be deleted on the server too.
             */

            var dataService              = GetDataService();
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello", TextDataFormat.UnicodeText);
            dataObject.SetText("Hello", TextDataFormat.Text);
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Added));

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(1, cloudDataEntries.Count);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.DidNotChanged));

            var filesOnServer = Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder);

            Assert.AreEqual(3, filesOnServer.Length);

            await dataService.RemoveDataAsync(dataService.DataEntries.First().Identifier, dataService.DataEntries.First().DataIdentifiers);

            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(0, dataService.DataEntries.Count);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Deleted));

            await cloudStorageService.SynchronizeAsync();

            cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(0, cloudDataEntries.Count);
            Assert.AreEqual(0, dataService.Cache.Count);

            filesOnServer = Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder);
            Assert.AreEqual(1, filesOnServer.Length);
        }
 private void ToList(object o, ClipboardHookEventArgs e)
 {
     if (InvokeRequired)
     {
         Invoke(_upd, o, e);
     }
     else
     {
         richTextBox1.Text = $"Type -{e.DataFormat.ToString()}\r\n:{e.Data}";
     }
 }
示例#10
0
        public async Task CloudStorageService_Synchronize_SynchronizedThenCannotSynchronize()
        {
            /*
             * Scenario :
             * We add one real data to the local data and we synchronize. Then we set this data to "cannot synchronize".
             * The data must be removed from the server.
             */

            var dataService              = GetDataService();
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello", TextDataFormat.UnicodeText);
            dataObject.SetText("Hello", TextDataFormat.Text);
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(1, cloudDataEntries.Count);
            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(DataEntryStatus.DidNotChanged, dataService.Cache.First().Status);

            var filesOnServer = Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder);

            Assert.AreEqual(3, filesOnServer.Length);

            dataService.DataEntries.First().CanSynchronize = false;

            await cloudStorageService.SynchronizeAsync();

            cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(0, cloudDataEntries.Count);
            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(DataEntryStatus.DidNotChanged, dataService.Cache.First().Status);

            filesOnServer = Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder);
            Assert.AreEqual(1, filesOnServer.Length);
            Assert.IsTrue(filesOnServer.First().EndsWith(".clipboard"));
        }
        public void DataService_DataEntry_Thumbnail_Color()
        {
            var service    = GetDataService();
            var dataObject = new DataObject();

            dataObject.SetText("#Fff002");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.Color);
        }
        public void DataService_DataEntry_Thumbnail_Text()
        {
            var service    = GetDataService();
            var dataObject = new DataObject();

            dataObject.SetText("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.String);
            Assert.AreEqual(DataHelper.FromBase64 <string>(dataEntry.Thumbnail.Value), "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It h...");
        }
示例#13
0
        public async Task CloudStorageService_Synchronize_DataAdded()
        {
            /*
             * Scenario :
             * We add one real data to the local data and set it to a favorite. There is actually nothing on the server.
             * The data must be uploaded. There will be one real data on the server.
             */

            var dataService              = GetDataService();
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello", TextDataFormat.UnicodeText);
            dataObject.SetText("Hello", TextDataFormat.Text);
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            dataService.DataEntries.First().IsFavorite = true;
            await dataService.ReorganizeAsync(true);

            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.IsTrue(dataService.DataEntries.First().IsFavorite);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Added));

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(1, cloudDataEntries.Count);
            Assert.IsTrue(cloudDataEntries.First().IsFavorite);

            var expectedFileDataPathOnTheServer = cloudStorageProviderMock.TemporaryFolder + "/" + cloudDataEntries.First().DataIdentifiers.Single(item => item.FormatName == "Text").Identifier + ".dat";

            Assert.IsTrue(File.Exists(expectedFileDataPathOnTheServer));

            var valueByte = (await ReadFileFromServerAsync(expectedFileDataPathOnTheServer)).ToArray();
            var value     = Encoding.ASCII.GetString(valueByte);

            Assert.AreEqual("Hello\0", value);
        }
示例#14
0
        public void ClipboardService_AddData()
        {
            var dataService = ServiceLocator.GetService <DataService>();
            var service     = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello World");
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            Task.Delay(300).Wait();
            DispatcherUtil.DoEvents();

            Assert.AreEqual(dataService.DataEntries.Count, 1);
        }
        public void DataService_MaxDataToKeep()
        {
            var service = GetDataService();

            for (var i = 0; i < TestUtilities.GetSettingProvider().MaxDataToKeep + 5; i++)
            {
                var dataObject = new DataObject();
                dataObject.SetText((TestUtilities.GetSettingProvider().MaxDataToKeep + 5 - i).ToString());
                var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
                service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            }

            Assert.AreEqual(service.DataEntries.Count, TestUtilities.GetSettingProvider().MaxDataToKeep);
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.First().Thumbnail.Value), "1");
            Assert.AreEqual(DataHelper.FromBase64 <string>(service.DataEntries.Last().Thumbnail.Value), TestUtilities.GetSettingProvider().MaxDataToKeep.ToString());
        }
        public async Task PasteBarWindowViewModel_DeleteItem()
        {
            var dataService = ServiceLocator.GetService <DataService>();
            var dataObject  = new DataObject();

            dataObject.SetText("Lorem Ipsum");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            dataService.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var viewmodel = new PasteBarWindowViewModel();

            Assert.IsFalse(viewmodel.NoPresentData);
            viewmodel.DeleteItemCommand.CheckBeginExecute(viewmodel.DataEntries.First());
            await Task.Delay(300);

            Assert.IsTrue(viewmodel.NoPresentData);
        }
        public void DataService_DataEntry_Thumbnail_Unknow()
        {
            var service    = GetDataService();
            var dataObject = new DataObject();

            dataObject.SetData("DataFormat", new SerializableClass()
            {
                Data = "Hello World"
            });
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var dataEntry = service.DataEntries.FirstOrDefault();

            Assert.IsNotNull(dataEntry);
            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.Unknown);
        }
示例#18
0
        public async Task CloudStorageService_Synchronize_DataFilesAdded()
        {
            /*
             * Scenario :
             * We add one real data to the local data which is a file. There is actually nothing on the server.
             * The data must NOT be uploaded.
             */

            var dataService              = GetDataService();
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetFileDropList(new StringCollection {
                @"C:\Windows\explorer.exe"
            });
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            dataService.DataEntries.First().IsFavorite = true;
            await dataService.ReorganizeAsync(true);

            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.AreEqual(ThumbnailDataType.Files, dataService.DataEntries.First().Thumbnail.Type);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Added));

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(0, cloudDataEntries.Count);
            var filesOnServer = Directory.GetFiles(cloudStorageProviderMock.TemporaryFolder);

            Assert.AreEqual(1, filesOnServer.Length);
            Assert.IsTrue(filesOnServer.First().EndsWith(".clipboard"));
        }
        public void DataService_DataEntry_Thumbnail_Files()
        {
            var service    = GetDataService();
            var dataObject = new DataObject();

            dataObject.SetFileDropList(new StringCollection {
                "C:/file1.txt", "C:/folder/file2.txt", "C:/folder/file3.txt", "C:/folder/file4.txt"
            });
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var dataEntry = service.DataEntries.First();

            Assert.AreEqual(dataEntry.Thumbnail.Type, ThumbnailDataType.Files);
            Assert.IsTrue(DataHelper.FromBase64 <List <string> >(dataEntry.Thumbnail.Value).SequenceEqual(new List <string> {
                "C:/file1.txt", "C:/folder/file2.txt", "C:/folder/file3.txt", "C:/folder/file4.txt"
            }));
        }
示例#20
0
        public async Task CloudStorageService_Synchronize_DeletedRemotelyButNotLocally()
        {
            /*
             * Scenario :
             * There is a data locally that is marked as "already been synchronized", so it has been at least one time on the server.
             * When we synchronize, we discover that the data is not present on the server, so it has probably been deleted by another device.
             * The data must be deleted locally.
             */

            var dataService              = GetDataService();
            var cloudStorageService      = GetCloudStorageService();
            var cloudStorageProviderMock = GetCloudStorageProviderMock();
            var service = GetClipboardService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello", TextDataFormat.UnicodeText);
            dataObject.SetText("Hello", TextDataFormat.Text);
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry1), 100);
            await Task.Delay(300);

            DispatcherUtil.DoEvents();

            await cloudStorageService.SynchronizeAsync();

            Assert.AreEqual(1, dataService.DataEntries.Count);
            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.AreEqual(DataEntryStatus.DidNotChanged, dataService.Cache.First().Status);

            // remove the data from the server.
            File.Delete(cloudStorageProviderMock.TemporaryFolder + @"\.clipboard");

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(0, cloudDataEntries.Count);
            Assert.AreEqual(0, dataService.DataEntries.Count);
            Assert.AreEqual(0, dataService.Cache.Count);
        }
        public async Task DataService_AddRemoveData()
        {
            var service = GetDataService();

            try
            {
                service.AddDataEntry(null, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
                Assert.Fail();
            }
            catch
            {
            }

            var dataObject = new DataObject();

            dataObject.SetText("Hello World");
            var entry1 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry1, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            var guid1  = service.DataEntries.Last().Identifier;
            var guid11 = service.Cache.Last().Identifier;

            dataObject = new DataObject();
            dataObject.SetText("Hello World 2");
            var entry2 = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry2, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            var guid2  = service.DataEntries.First().Identifier;
            var guid22 = service.Cache.First().Identifier;

            Assert.AreNotEqual(guid1, guid2);
            Assert.AreNotEqual(guid1, guid22);
            Assert.AreNotEqual(guid11, guid2);

            await service.RemoveDataAsync(service.DataEntries.First().Identifier, service.DataEntries.First().DataIdentifiers);

            Assert.AreEqual(1, service.DataEntries.Count);
            Assert.AreEqual(2, service.Cache.Count);
            Assert.AreEqual(DataEntryStatus.Deleted, service.Cache.First().Status);
            Assert.AreEqual(DataEntryStatus.Added, service.Cache.Last().Status);
        }
示例#22
0
        public async Task CloudStorageService_Synchronize_DataAddedAndDeletedBeforeSync()
        {
            /*
             * Scenario :
             * We add two data entries to the local data. There is actually nothing on the server.
             * One of the two data will be deleted locally.
             * It must upload only one data.
             * There will be no "real" data on the server, only the entries.
             */

            var dataService         = GetDataService();
            var cloudStorageService = GetCloudStorageService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            dataObject = new DataObject();
            dataObject.SetText("Good Bye");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Added));

            await dataService.RemoveDataAsync(dataService.DataEntries.Last().Identifier, dataService.DataEntries.Last().DataIdentifiers);

            Assert.AreEqual(2, dataService.Cache.Count);
            Assert.AreEqual(DataEntryStatus.Added, dataService.Cache.First().Status);
            Assert.AreEqual(DataEntryStatus.Deleted, dataService.Cache.Last().Status);

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(1, cloudDataEntries.Count);
            Assert.AreEqual(1, dataService.Cache.Count);
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.DidNotChanged));
        }
示例#23
0
        public void ThumbnailToValueConverter()
        {
            var converter = new ThumbnailToValueConverter();

            var service    = ServiceLocator.GetService <DataService>();
            var dataObject = new DataObject();

            dataObject.SetFileDropList(new StringCollection {
                "C:/file1.txt", "C:/folder/file2.txt", "C:/folder/file3.txt", "C:/folder/file4.txt"
            });
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false, false);

            var dataEntry = service.DataEntries.First();

            var files = (List <string>)converter.Convert(dataEntry.Thumbnail, typeof(ConvertersTests), "Files", CultureInfo.CurrentCulture);

            Assert.IsTrue(files.SequenceEqual(new List <string> {
                "C:/file1.txt", "C:/folder/file2.txt", "C:/folder/file3.txt", "..."
            }));
        }
示例#24
0
        public async Task ClipboardService_MaxDataToKeep()
        {
            var dataService = ServiceLocator.GetService <DataService>();

            var service = GetClipboardService();

            for (var i = 0; i < TestUtilities.GetSettingProvider().MaxDataToKeep + 5; i++)
            {
                var dataObject = new DataObject();
                dataObject.SetText((TestUtilities.GetSettingProvider().MaxDataToKeep + 5 - i).ToString());
                var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

                DispatcherUtil.ExecuteOnDispatcherThread(() => service.ClipboardHook_ClipboardChanged(null, entry), 100);
                await Task.Delay(100);

                DispatcherUtil.DoEvents();
            }

            Assert.AreEqual(dataService.DataEntries.Count, TestUtilities.GetSettingProvider().MaxDataToKeep);
            Assert.AreEqual(DataHelper.FromBase64 <string>(dataService.DataEntries.First().Thumbnail.Value), "1");
            Assert.AreEqual(DataHelper.FromBase64 <string>(dataService.DataEntries.Last().Thumbnail.Value), TestUtilities.GetSettingProvider().MaxDataToKeep.ToString());
        }
        public async Task DataService_RemoveAll()
        {
            var service = GetDataService();

            for (var i = 0; i < 10; i++)
            {
                var dataObject = new DataObject();
                dataObject.SetText(i.ToString());
                var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
                service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);
            }

            Assert.AreEqual(service.DataEntries.Count, 10);
            Assert.AreEqual(service.Cache.Count, 10);

            Assert.IsTrue(service.Cache.All(dataEntryCache => dataEntryCache.Status == DataEntryStatus.Added));

            await service.RemoveAllDataAsync();

            Assert.AreEqual(service.DataEntries.Count, 0);
            Assert.AreEqual(service.Cache.Count, 10);

            Assert.IsTrue(service.Cache.All(dataEntryCache => dataEntryCache.Status == DataEntryStatus.Deleted));
        }
示例#26
0
        public async Task CloudStorageService_Synchronize_DataAddedStatus()
        {
            /*
             * Scenario :
             * We add two data entries to the local data. There is actually nothing on the server.
             * The two data "entries" must be uploaded. There will be no "real" data on the server, only the entries.
             */

            var dataService         = GetDataService();
            var cloudStorageService = GetCloudStorageService();

            var date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

            var dataObject = new DataObject();

            dataObject.SetText("Hello");
            var entry = new ClipboardHookEventArgs(dataObject, false, date.Ticks);

            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            dataObject = new DataObject();
            dataObject.SetText("Good Bye");
            entry = new ClipboardHookEventArgs(dataObject, false, date.Ticks);
            dataService.AddDataEntry(entry, new List <DataIdentifier>(), GetWindowsService().GetForegroundWindow(), false);

            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.Added));

            await cloudStorageService.SynchronizeAsync();

            var cloudDataEntries = await GetDataEntriesFromServerAsync();

            Assert.AreEqual(2, cloudDataEntries.Count);
            Assert.AreEqual(2, dataService.Cache.Count);
            Assert.IsTrue(cloudDataEntries.All(cloudDataEntry => cloudDataEntry.Date == date));
            Assert.IsTrue(dataService.Cache.All(cacheDataEntry => cacheDataEntry.Status == DataEntryStatus.DidNotChanged));
        }
        public void DataService_DataEntry()
        {
            var service = GetDataService();

            var dataObject = new DataObject();

            dataObject.SetText("Hello World");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            service.AddDataEntry(entry, new List <DataIdentifier>(), ServiceLocator.GetService <WindowsService>().GetForegroundWindow(), false);

            var dataEntry      = service.DataEntries.Last();
            var dataEntryCache = service.Cache.Last();

            Assert.IsTrue(dataEntry.CanSynchronize);
            Assert.IsFalse(dataEntry.IsFavorite);
            Assert.IsFalse(dataEntry.IsCut);
            Assert.IsTrue(dataEntry.Icon != null);
            Assert.IsTrue(dataEntry.Identifier != null);
            Assert.IsTrue(dataEntry.Date != null);

            Assert.AreEqual(dataEntry.Identifier, dataEntryCache.Identifier);
            Assert.AreEqual(DataEntryStatus.Added, dataEntryCache.Status);
        }
 private void UpDate(object o, ClipboardHookEventArgs e)
 {
     ToList(o, e);
 }
        public async Task PasteBarWindowViewModel_Search()
        {
            var dataService = ServiceLocator.GetService <DataService>();
            var service     = ServiceLocator.GetService <ClipboardService>();

            var dataObject = new DataObject();

            dataObject.SetText("Lorem Ipsum");
            var entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);

            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry);
                Task.Delay(300).Wait();
                DispatcherUtil.DoEvents();
            }, 100);

            dataObject = new DataObject();
            dataObject.SetText("Lorem ipsum");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry);
                Task.Delay(300).Wait();
                DispatcherUtil.DoEvents();
            }, 100);

            dataObject = new DataObject();
            dataObject.SetText("#ffffff");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry);
                Task.Delay(300).Wait();
                DispatcherUtil.DoEvents();
            }, 100);

            dataObject = new DataObject();
            dataObject.SetText("http://www.ipsum.com/");
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry);
                Task.Delay(300).Wait();
                DispatcherUtil.DoEvents();
            }, 100);

            dataObject = new DataObject();
            dataObject.SetFileDropList(new StringCollection {
                "C:/file1.txt", "C:/folder/file2.txt", "C:/folder/file3.txt", "C:/folder/file4.txt"
            });
            entry = new ClipboardHookEventArgs(dataObject, false, DateTime.Now.Ticks);
            DispatcherUtil.ExecuteOnDispatcherThread(() =>
            {
                service.ClipboardHook_ClipboardChanged(null, entry);
                Task.Delay(300).Wait();
                DispatcherUtil.DoEvents();
            }, 100);

            var viewmodel = new PasteBarWindowViewModel();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 5);

            viewmodel.SearchQueryString = "ipsum";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 3);

            viewmodel.SearchQueryString = "Ipsum";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 1);

            viewmodel.SearchQueryString = "#fff";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 1);

            viewmodel.SearchType        = SearchType.Link;
            viewmodel.SearchQueryString = "ipsum";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 1);

            viewmodel.SearchType        = SearchType.File;
            viewmodel.SearchQueryString = "";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 1);

            viewmodel.SearchType        = SearchType.All;
            viewmodel.SearchQueryString = "*.txt";
            viewmodel.SearchCommand.CheckBeginExecute(true);
            viewmodel.IgnoreSearch = false;
            await Task.Delay(500);

            DispatcherUtil.DoEvents();

            Assert.AreEqual(viewmodel.CollectionView.Cast <DataEntry>().Count(), 1);
        }