public static FixtureEngine LoadConfiguration(this FixtureEngine @this, CarnaWinUIRunnerHost host) { using var stream = new FileStream(Path.Combine(Path.GetDirectoryName(Environment.ProcessPath) ?? string.Empty, "carna-runner-settings.json"), FileMode.Open, FileAccess.Read); stream.Position = stream.ReadByte() == 0xef ? 3 : 0; var serializer = new DataContractJsonSerializer( typeof(CarnaWinUIRunnerConfiguration), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true } ); if (serializer.ReadObject(stream) is not CarnaWinUIRunnerConfiguration configuration) { return(@this); } configuration.Ensure(new AssemblyLoader()); @this.Configure(configuration); host.AutoExit = configuration.AutoExit; if (configuration.Formatter is not null) { host.Formatter = configuration.Formatter.Create <IFixtureFormatter>(@this.Assemblies); } return(@this); }
private async Task <List <IFixture> > BuildFixtures(CarnaWinUIRunnerHost host, FixtureEngine engine, DispatcherQueue dispatcher) { var fixtures = await Task.Run(() => engine.BuildFixtures().ToList()); var fixtureContents = host.Fixtures; await Task.Run(() => Configure(host, fixtures, fixtureContents, engine.Filter, dispatcher)); SetChildOpenCondition(host.Summary, host.Fixtures); return(fixtures); }
private void ConfigureSummary(CarnaWinUIRunnerHost host, IFixture fixture, DispatcherQueue dispatcher) { dispatcher.TryEnqueue(DispatcherQueuePriority.Normal, () => ++ host.Summary.TotalCount); fixture.FixtureRun += (_, e) => dispatcher.TryEnqueue(DispatcherQueuePriority.Normal, () => { switch (e.Result.Status) { case FixtureStatus.Passed: ++host.Summary.PassedCount; break; case FixtureStatus.Failed: ++host.Summary.FailedCount; break; case FixtureStatus.Pending: ++host.Summary.PendingCount; break; } }); }
private FixtureContent CreateFixtureContent(CarnaWinUIRunnerHost host, IFixture fixture, DispatcherQueue dispatcher) { var fixtureContent = new FixtureContent { Description = host.Formatter.FormatFixture(fixture.FixtureDescriptor).ToString() }; fixture.FixtureRunning += (_, _) => dispatcher.TryEnqueue(DispatcherQueuePriority.Normal, () => fixtureContent.Status = FixtureStatus.Running); fixture.FixtureRun += (_, e) => dispatcher.TryEnqueue(DispatcherQueuePriority.Normal, () => { fixtureContent.OnFixtureRunningCompleted(e.Result, host.Formatter); foreach (var stepContent in e.Result.StepResults.Select(stepResult => new FixtureStepContent(stepResult, host.Formatter))) { fixtureContent.Steps.Add(stepContent); } }); return(fixtureContent); }
private void Configure(CarnaWinUIRunnerHost host, IEnumerable <IFixture> fixtures, IList <FixtureContent> fixtureContents, IFixtureFilter?filter, DispatcherQueue dispatcher) { foreach (var fixture in fixtures) { if (!fixture.CanRun(filter)) { continue; } var fixtureContent = CreateFixtureContent(host, fixture, dispatcher); dispatcher.TryEnqueue(DispatcherQueuePriority.Normal, () => fixtureContents.Add(fixtureContent)); var childFixtures = RetrieveChildFixtures(fixture).ToList(); if (childFixtures.Any()) { Configure(host, childFixtures, fixtureContent.Fixtures, EnsureFilter(filter, fixture), dispatcher); } else { ConfigureSummary(host, fixture, dispatcher); } } }