public void Be_Creatable() { var settings = new Dictionary <string, string> { { "FieldToCompareWith", "stopTime" }, { "CompareOperator", "<" } } as IDictionary <string, string>; var formData = new FormData(); var ctx = new ContextFor <DateTimeComparisonCheck>(); ctx.Use(settings); ctx.Use <Func <FormData> >(() => formData); var sut = ctx.BuildSut(); sut.Should().NotBeNull(); sut.GetType().GetCustomAttribute <DisplayNameAttribute>().DisplayName.Should().Be("datetime"); }
public void Lookup_packages() { var ctx = new ContextFor <NuPlugPackageRepository>(); var sut = ctx.BuildSut(); var lookup = ctx.For <IPackageLookup>(); var registry = ctx.For <IPackageRegistry>(); var package = "foo".CreatePackage("0.1.0"); sut.Exists(package).Should().BeFalse(); Received.InOrder(() => { registry.Exists(package.Id, package.Version); lookup.Exists(package.Id, package.Version); }); registry.FindPackage(package.Id, package.Version).Returns(package); sut.FindPackage(package.Id, package.Version).Should().Be(package); registry.FindPackage(package.Id, package.Version).Returns((IPackage)null); lookup.FindPackage(package.Id, package.Version).Returns(package); sut.FindPackage(package.Id, package.Version).Should().Be(package); lookup.FindPackage(package.Id, package.Version).Returns((IPackage)null); sut.FindPackage(package.Id, package.Version).Should().BeNull(); sut.FindPackagesById(package.Id).Should().BeEmpty(); var packages = new[] { package }; registry.FindPackagesById(package.Id).Returns(packages); sut.FindPackagesById(package.Id).ShouldAllBeEquivalentTo(packages); var empty = Enumerable.Empty <IPackage>().ToList(); registry.FindPackagesById(package.Id).Returns(empty); lookup.FindPackagesById(package.Id).Returns(packages); sut.FindPackagesById(package.Id).ShouldAllBeEquivalentTo(packages); lookup.FindPackagesById(package.Id).Returns(empty); sut.FindPackagesById(package.Id).Should().BeEmpty(); }
public void Handle_Position_Changed_Event_From_MediaPlayer_If_Changed() { var positionPovider = Substitute.For <IMediaPlayer>(); positionPovider.Duration.ReturnsForAnyArgs(2); var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); sut.PositionProvider = positionPovider; using (var monitor = sut.Monitor()) { positionPovider.PropertyChanged += Raise.Event <PropertyChangedEventHandler>(new object(), new PropertyChangedEventArgs(nameof(sut.Position))); monitor.Should().Raise(nameof(sut.PropertyChanged)) .WithArgs <PropertyChangedEventArgs>(t => t.PropertyName == nameof(sut.Position)); } }
public void Ignore_Walk_info_by_default() { var context = new ContextFor <NuPlugPackageManager>(); var sut = context.BuildSut(); sut.DisableWalkInfo.Should().BeTrue(); var package = "foo".CreatePackage("0.1.0"); sut.Logger = new TraceLogger(); using (var tl = new TestTraceListener()) { sut.InstallPackage(package, false, true); var infos = tl.MessagesFor(TraceLevel.Info); infos.Should().BeEquivalentTo( $"Installing '{package.Id} {package.Version}'.", $"Successfully installed '{package.Id} {package.Version}'."); } }
public void IpAddressChecks() { var settings = new Dictionary <string, string> { { "Hint", "Not a valid ip." }, { "RegEx", @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$" } } as IDictionary <string, string>; var ctx = new ContextFor <StringRegExCheck>(); ctx.Use(settings); var sut = ctx.BuildSut(); sut.ShouldPass("1.1.1.1", "1.1.1.1"); sut.ShouldPass("22.22.22.22", "22.22.22.22"); sut.ShouldPass("333.333.333.333", "333.333.333.333"); // actually this is not a valid IP address. However, we check the RegEx here! sut.ShouldFailWith <ArgumentException>("1.1.11", 0); // missing separator sut.ShouldFailWith <ArgumentException>("1.22.33.4444", 0); // field with 4 digits }
public void Support_live_tracking() { var ctx = new ContextFor <WaveformDisplayViewModel>(); var sut = ctx.BuildSut(); sut.IsLive.Should().BeFalse("innitially not live"); sut.LastWritePosition.Should().Be(0); var peaks = new[] { new PeakInfo(-1f, 1f) }; var uri = new Uri("channel://1/"); var e = new PeaksReceivedEvent(uri, 0, 1, peaks); sut.Duration = e.End * 2; sut.HandlePeaks(e); sut.IsLive.Should().BeTrue("Receiving partial peaks should activate live tracking"); sut.LastWritePosition.Should().Be(e.End, "last write position should be updated for received peaks"); sut.HandleShift(sut.LastWritePosition); sut.LastWritePosition.Should().Be(0); }
public void Ignore_AlreadyInstalled_Packages() { var context = new ContextFor <NuPlugPackageManager>(); var packageLookup = Substitute.For <IPackageLookup>(); var packageRegistry = new NuPlugPackageRegistry(); var localRepo = new NuPlugPackageRepository(packageLookup, packageRegistry); var sut = context.BuildSut(); var foo = "foo".CreatePackage("0.1.0"); var bar = "bar".CreatePackage("2.9.0"); var versionSpec = new VersionSpec(SemanticVersion.Parse("2.6.0")) { MaxVersion = null }; var deps = new[] { new PackageDependencySet(sut.TargetFramework, new[] { new PackageDependency(bar.Id, versionSpec) }) }; foo.DependencySets.Returns(deps); localRepo.AddPackage(new NullPackage(bar.Id, bar.Version)); var remotePackages = new[] { foo }; sut.SourceRepository.GetPackages().Returns(remotePackages.AsQueryable()); sut.SetLocalRepository(localRepo); sut.Logger = new TraceLogger(); using (var tl = new TestTraceListener()) { sut.InstallPackage(foo, false, true); var infos = tl.MessagesFor(TraceLevel.Info); infos.Should().BeEquivalentTo( $"Attempting to resolve dependency '{bar.Id} (≥ {versionSpec.MinVersion})'.", //$"{bar.Id} already installed.", $"Installing '{foo.Id} {foo.Version}'.", $"Successfully installed '{foo.Id} {foo.Version}'." ); } }
public void Get_lib_dirs_for(string framework) { var context = new ContextFor <NuGetPackageContainer <string> >(); var foo = "foo".CreatePackage("0.1.0"); var packages = new[] { foo }; var pm = context.For <IPackageManager>(); pm.LocalRepository.GetPackages().Returns(packages.AsQueryable()); var path = foo.Id; pm.PathResolver.GetInstallPath(foo).Returns(path); var expectedPath = MockFileSystem(pm.FileSystem, foo, framework); var sut = context.BuildSut(); var asmResolver = context.For <IResolveAssembly>(); asmResolver.Received().Directories.Add(expectedPath); }
public void Use_Providers_Position() { var position = 42.0; var positionPovider = Substitute.For <IMediaPlayer>(); positionPovider.Position.Returns(position); var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); sut.PositionProvider = positionPovider; sut.Position.Should().Be(42); // ReSharper disable once RedundantAssignment // needed to match NSubstitute syntax! position = positionPovider.Received().Position; position = 48.0; sut.Position = position; positionPovider.Received().Position = position; }
public void Handle_samples_and_publish_peaks() { var ctx = new ContextFor <SamplesHandlerPeakPublisher>(); var sut = ctx.BuildSut(); sut.Should().BeAssignableTo <IHandle <SamplesReceivedEvent> >(); var events = ctx.For <IEventAggregator>(); events.Received().Subscribe(sut); var waveFormat = new WaveFormat(8000, 1); var start = TimeSpan.Zero; var duration = TimeSpan.FromSeconds(1); var data = waveFormat.Generate(duration); var samples = new SamplesReceivedEvent(new Uri("some://uri/"), start, waveFormat, data); PeaksReceivedEvent actualPeaks = null; events.When(x => x.PublishOnCurrentThread(Arg.Any <PeaksReceivedEvent>())).Do(x => actualPeaks = x.Arg <PeaksReceivedEvent>()); var peakProvider = ctx.For <IPeakProvider>(); WaveFormat actualWaveformat = null; byte[] actualData = null; peakProvider.Sample(Arg.Any <WaveFormat>(), Arg.Any <byte[]>()).Returns(x => { actualWaveformat = x.Arg <WaveFormat>(); actualData = x.Arg <byte[]>(); return(new[] { new PeakInfo(-1, 1) }); }); sut.Handle(samples); actualPeaks.Source.Should().Be(samples.Source); actualPeaks.Start.Should().Be(samples.Start.TotalSeconds); actualPeaks.End.Should().Be((samples.Start + duration).TotalSeconds); actualWaveformat.Should().BeSameAs(waveFormat); actualData.Should().BeSameAs(samples.Data); }
public void Return_True_For_Start_time_Before_End_time_Using_Smaller_Than_Within_A_Table_field() { const string tableData = "\"columnStartRow__1\":\"11:00\",\"columnStopRow__1\":\"12:00\""; var testDict = new Dictionary <string, string> { { "tableKey", tableData } }; var formData = new FormData(testDict); var tableDataSerializer = Substitute.For <INZazuTableDataSerializer>(); tableDataSerializer.Deserialize(tableData) .Returns(new Dictionary <string, string> { { "columnStartRow__1", "11:00" }, { "columnStopRow__1", "12:00" } }); var testFormats = new[] { "HHmm", "HHmmss", "HH:mm", "HH:mm:ss" }; var settings = new Dictionary <string, string> { { "FieldToCompareWith", "stopTime" }, { "CompareOperator", "<" }, { "SpecificDateTimeFormats", string.Join("|", testFormats) } } as IDictionary <string, string>; var ctx = new ContextFor <DateTimeComparisonCheck>(); ctx.Use(settings); ctx.Use <Func <FormData> >(() => formData); var sut = ctx.BuildSut(); //var dateTimeCheck = new DateTimeComparisonCheck( // "lorem ipsum", "<", "columnStopRow", () => formData, tableDataSerializer, // tableKey: "tableKey", specificDateTimeFormats: testFormats, rowIdx: 1); var res = sut.Validate("11:00", default(DateTime)); res.IsValid.Should().BeTrue(); }
public void Shift_position_selection_channels_and_labels() { var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); sut.Duration = 12; sut.Position = 6; sut.Selection.Start = 6; sut.Selection.End = 9; using (var monitor = sut.Monitor()) { sut.HandleShift(3); monitor.Should().RaisePropertyChangeFor(x => x.Position, "sut should not change position, just notify on the base stream (position provider)"); sut.Selection.Start.Should().Be(3); sut.Selection.End.Should().Be(6); // TODO: assert channels & labels } }
public void Support_auto_play() { var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); var uri = new Uri("channel://1/"); // set player var player = Substitute.For <IMediaPlayer>(); player.Source = uri; sut.PositionProvider = player; player.CanPlay.Returns(true); // activate ((IActivate)sut).Activate(); sut.IsActive.Should().BeTrue(); // now, after receiving partial peaks, should start autplaying var peaks = new[] { new PeakInfo(-1f, 1f) }; var e = new PeaksReceivedEvent(uri, 0, 1, peaks); sut.Duration = e.End * 2; sut.HandlePeaks(e); player.Received().Play(); sut.Position.Should().Be(sut.LastWritePosition - sut.LiveDelta); player.ClearReceivedCalls(); sut.HandlePeaks(e); // only play once after activation player.DidNotReceive().Play(); // deactivate/activate & check autoplay again ((IDeactivate)sut).Deactivate(false); ((IActivate)sut).Activate(); sut.HandlePeaks(e); player.Received().Play(); sut.Position.Should().Be(sut.LastWritePosition - sut.LiveDelta); }
public void Delegate_to_decorated_repo() { var ctx = new ContextFor <NuPlugPackageRepository>(); var sut = ctx.BuildSut(); sut.Should().BeAssignableTo <IPackageLookup>(); var lookup = ctx.For <IPackageLookup>(); sut.PackageSaveMode.Should().Be(lookup.PackageSaveMode); // ReSharper disable once RedundantAssignment var mode = lookup.Received().PackageSaveMode; mode = PackageSaveModes.Nupkg; sut.PackageSaveMode = mode; lookup.Received().PackageSaveMode = mode; lookup.SupportsPrereleasePackages.Returns(true); sut.SupportsPrereleasePackages.Should().BeTrue(); // ReSharper disable once UnusedVariable var b = lookup.Received().SupportsPrereleasePackages; lookup.Source.Returns("source"); sut.Source.Should().Be(lookup.Source); // ReSharper disable once UnusedVariable var s = lookup.Received().Source; sut.GetPackages().Should().BeEmpty(); lookup.Received().GetPackages(); var package = "foo".CreatePackage("0.1.0"); sut.AddPackage(package); lookup.Received().AddPackage(package); sut.RemovePackage(package); lookup.Received().RemovePackage(package); }
public void Create_All_Checks(string type) { var ctx = new ContextFor <CheckFactory>(); var sut = ctx.BuildSut(); var settings = new Dictionary <string, string> { { "Hint", "This is a hint for the error message" }, { "RegEx", "true|false" } }; var checkDefinition = new CheckDefinition { Type = type, Settings = settings }; var definition = new FieldDefinition { Key = "test_string", Type = "string", Checks = new[] { checkDefinition } }; var field = sut.CreateCheck(definition.Checks.Single(), definition, () => new FormData(), Substitute.For <INZazuTableDataSerializer>()); field.Should().NotBeNull(); }
public void Handle_shift_events() { var ctx = new ContextFor <WaveformDisplayViewModel>(); var sut = ctx.BuildSut(); sut.Should().BeAssignableTo <IHandle <AudioShiftedEvent> >(); var source = new Uri("http://some/audio/"); var shift = TimeSpan.FromSeconds(3); var newStartTime = DateTimeOffset.Now; var e = new AudioShiftedEvent(source, shift, newStartTime); sut.Source.Should().BeNull("skip shift if not same source"); sut.Handle(e); sut.Source = source; sut.WaveformImage = BitmapFactory.New(20, 20); sut.Duration.Should().Be(0, "skip shifts if duration 0"); sut.Handle(e); sut.Duration = shift.TotalSeconds * 2; sut.HandleShift(e.Shift.TotalSeconds); }
public void Push_And_Pop() { var ctx = new ContextFor <BlackList <string> >(); ctx.Use(10); var sut = ctx.BuildSut(); sut.Push("foo"); sut.Push("bar"); sut.Count.Should().Be(2); sut.Push("bar"); sut.Count.Should().Be(2); sut.Pop("foo").Should().BeTrue(); sut.Count.Should().Be(1); sut.Pop("bar").Should().BeTrue(); sut.Count.Should().Be(0); sut.Pop("bar").Should().BeFalse(); sut.Pop("hugo").Should().BeFalse(); }
public void Not_Handle_Duration_Changed_Event_From_MediaPlayer_If_Not_Changed() { const int expectedDuration = 4; var positionPovider = Substitute.For <IMediaPlayer>(); positionPovider.Duration.ReturnsForAnyArgs(4); var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); sut.Duration = 4.0; sut.PositionProvider = positionPovider; using (var monitor = sut.Monitor()) { positionPovider.PropertyChanged += Raise.Event <PropertyChangedEventHandler>(new object(), new PropertyChangedEventArgs(nameof(sut.Duration))); monitor.Should().NotRaise(nameof(sut.PropertyChanged)); monitor.Should().NotRaise(nameof(sut.PropertyChanged)); sut.Duration.Should().Be(expectedDuration); sut.HasDuration.Should().BeTrue(); } }
public void Handle_live_sample_updates() { var ctx = new ContextFor <WaveformDisplayViewModel>(); var sut = ctx.BuildSut(); sut.Should().BeAssignableTo <IHandle <PeaksReceivedEvent> >(); ctx.For <IEventAggregator>().Received().Subscribe(sut); // |---------- | // |-------------------| // | ---------| sut.BackgroundBrush = new SolidColorBrush(Colors.Black); sut.LeftBrush = new SolidColorBrush(Colors.Red); sut.RightBrush = new SolidColorBrush(Colors.Blue); sut.WaveformImage = BitmapFactory.New(20, 20); var w2 = (int)(sut.WaveformImage.Width / 2); var h2 = (int)(sut.WaveformImage.Height / 2); var peaks = Enumerable.Repeat(1f, 2 * w2).Concat(Enumerable.Repeat(0f, 2 * w2)) .Select(m => new PeakInfo(m - 1f, m)).ToArray(); var e = new PeaksReceivedEvent(new Uri("source://test/"), 0, 2, peaks); sut.Duration = e.End; sut.HandlePeaks(e); // assert the image rendered sut.WaveformImage.RectShouldHaveColor(1, 1, w2, h2, sut.LeftBrush.Color); sut.WaveformImage.RectShouldHaveColor(w2 + 1, h2 + 1, 2 * w2, 2 * h2, sut.RightBrush.Color); sut.WaveformImage.RectShouldHaveColor(1, h2 + 1, w2 - 1, 2 * h2 - 1, sut.BackgroundBrush.Color); sut.WaveformImage.RectShouldHaveColor(w2 + 1, 1, 2 * w2, h2, sut.BackgroundBrush.Color); // assert the points are filled sut.LeftChannel.Take(10).Should().AllBeEquivalentTo(0); sut.RightChannel.Take(10).Should().AllBeEquivalentTo(h2); sut.LeftChannel.Skip(10).Take(10).Should().AllBeEquivalentTo(h2); sut.RightChannel.Skip(10).Take(10).Should().AllBeEquivalentTo(2 * h2); }
public void Sync_directories_with_installed_packages() { var context = new ContextFor <NuGetPackageContainer <string> >(); var foo = "foo".CreatePackage("0.1.0"); var packages = new[] { foo }; var pm = context.For <IPackageManager>(); pm.LocalRepository.GetPackages().Returns(packages.AsQueryable()); var path = foo.Id; pm.PathResolver.GetInstallPath(foo).Returns(path); var expectedPath = MockFileSystem(pm.FileSystem, foo); var sut = context.BuildSut(); pm.LocalRepository.Received().GetPackages(); var asmResolver = context.For <IResolveAssembly>(); asmResolver.Received().Directories.Add(expectedPath); var bar = "bar".CreatePackage("1.42.0"); var fs2 = Substitute.For <IFileSystem>(); expectedPath = MockFileSystem(fs2, bar); var args = new PackageOperationEventArgs(bar, fs2, "otherPath"); pm.PackageInstalled += Raise.EventWith(args); asmResolver.Received().Directories.Add(expectedPath); pm.PackageUninstalled += Raise.EventWith(args); asmResolver.Received().Directories.Remove(expectedPath); }
public void Support_start_time_with_shifts() { var uri = new Uri("http://some/uri/audio.wav"); var ctx = new ContextFor <WaveformPlayerViewModel>(); var d = DateTimeOffset.UtcNow; var sut = ctx.BuildSut(); sut.Should().BeAssignableTo <IHandle <AudioShiftedEvent> >(); ctx.For <IEventAggregator>().Received().Subscribe(sut); var getTime = ctx.For <IGetTimeStamp>(); getTime.For(uri).Returns(d); sut.Source = uri; sut.HasCurrentTime.Should().BeTrue(); sut.StartTime.Should().Be(d); var shiftedEvent = new AudioShiftedEvent(uri, TimeSpan.FromSeconds(3), sut.StartTime); sut.Handle(shiftedEvent); sut.StartTime.Should().Be(d + shiftedEvent.Shift); }
public void Notify_property_changes() { var ctx = new ContextFor <WaveformViewModel>(); var sut = ctx.BuildSut(); using (var monitor = sut.Monitor()) { var selection = new AudioSelectionViewModel(); sut.Selection = selection; sut.Selection.Should().BeEquivalentTo(selection); monitor.Should().RaisePropertyChangeFor(x => x.Selection); } using (var monitor = sut.Monitor()) { var selectionMenu = Substitute.For <IMenuViewModel>(); sut.SelectionMenu = selectionMenu; sut.SelectionMenu.Should().Be(selectionMenu); monitor.Should().RaisePropertyChangeFor(x => x.SelectionMenu); } using (var monitor = sut.Monitor()) { sut.TicksEach = 42.0; sut.TicksEach.Should().Be(42); monitor.Should().RaisePropertyChangeFor(x => x.TicksEach); } var brush = new SolidColorBrush(Colors.Red); var points = new PointCollection(); var label = Substitute.For <ILabelVievModel>(); var labels = new[] { label }; sut.Labels = labels; sut.Labels.Should().BeEquivalentTo(labels); using (var monitor = sut.Monitor()) { sut.SelectedLabel = label; sut.SelectedLabel.Should().Be(label); monitor.Should().RaisePropertyChangeFor(x => x.SelectedLabel); } using (var monitor = sut.Monitor()) { sut.UserBrush = brush; sut.UserBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.UserBrush); } using (var monitor = sut.Monitor()) { sut.SeparationLeftBrush = brush; sut.SeparationLeftBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.SeparationLeftBrush); } using (var monitor = sut.Monitor()) { sut.SeparationRightBrush = brush; sut.SeparationRightBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.SeparationRightBrush); } using (var monitor = sut.Monitor()) { sut.UserTextBrush = brush; sut.UserTextBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.UserTextBrush); } using (var monitor = sut.Monitor()) { sut.PositionBrush = brush; sut.PositionBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.PositionBrush); } using (var monitor = sut.Monitor()) { sut.SelectionBrush = brush; sut.SelectionBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.SelectionBrush); } using (var monitor = sut.Monitor()) { sut.SeparationRightBrush = brush; sut.SeparationRightBrush.Should().Be(brush); monitor.Should().RaisePropertyChangeFor(x => x.SeparationRightBrush); } using (var monitor = sut.Monitor()) { sut.UserChannel = points; sut.UserChannel.Should().BeEquivalentTo(points); monitor.Should().RaisePropertyChangeFor(x => x.UserChannel); } using (var monitor = sut.Monitor()) { sut.SeparationLeftChannel = points; sut.SeparationLeftChannel.Should().BeEquivalentTo(points); monitor.Should().RaisePropertyChangeFor(x => x.SeparationLeftChannel); } using (var monitor = sut.Monitor()) { sut.SeparationRightChannel = points; sut.SeparationRightChannel.Should().BeEquivalentTo(points); monitor.Should().RaisePropertyChangeFor(x => x.SeparationRightChannel); } }