예제 #1
0
        public async Task it_returns_exceptions_thrown_in_user_code(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                Language.FSharp => new[]
                {
                    // F# syntax doesn't allow a bare `raise ...` expression at the root due to type inference being
                    // ambiguous, but the same effect can be achieved by wrapping the exception in a strongly-typed
                    // function call.
                    "open System",
                    "let f (): unit = raise (new NotImplementedException())",
                    "f ()"
                },

                Language.CSharp => new[]
                {
                    "using System;",
                    "throw new NotImplementedException();"
                }
            };

            await SubmitCode(kernel, source);

            KernelEvents
            .Where(x => x.GetType() != typeof(KernelIdle) && x.GetType() != typeof(KernelBusy))
            .Last()
            .Should()
            .BeOfType <CommandFailed>()
            .Which
            .Exception
            .Should()
            .BeOfType <NotImplementedException>();
        }
예제 #2
0
        public async Task the_output_is_asynchronous(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                Language.FSharp => @"
open System
Console.Write(DateTime.Now)
System.Threading.Thread.Sleep(1000)
Console.Write(DateTime.Now)
5",

                Language.CSharp => @"
Console.Write(DateTime.Now);
System.Threading.Thread.Sleep(1000);
Console.Write(DateTime.Now);
5",
            };

            await SubmitCode(kernel, source);

            var events =
                KernelEvents
                .Where(e => e is StandardOutputValueProduced).OfType <StandardOutputValueProduced>().ToArray();

            var diff = DateTime.Parse((string)(events[1].Value)) - DateTime.Parse((string)(events[0].Value));

            diff.Should().BeCloseTo(1.Seconds(), precision: 200);
        }
예제 #3
0
        public async Task the_output_is_asynchronous()
        {
            var kernel = CreateKernel();

            var kernelCommand = new SubmitCode(@"
Console.Write(DateTime.Now);
System.Threading.Thread.Sleep(1000);
Console.Write(DateTime.Now);
5", "csharp");
            await kernel.SendAsync(kernelCommand);

            var events = KernelEvents
                         .Where(e => e.Value is DisplayedValueProduced).ToArray();
            var diff = events[1].Timestamp - events[0].Timestamp;

            diff.Should().BeCloseTo(1.Seconds(), precision: 200);
        }
        public async Task Value_display_and_update_are_in_right_order(Language language)
        {
            var kernel = CreateKernel(language);

            var submission = language switch
            {
                Language.CSharp => "var d = display(b(\"hello\")); d.Update(b(\"world\"));",
                Language.FSharp => "let d = display(b.innerHTML(\"hello\"))\nd.Update(b.innerHTML(\"world\"))",
            };

            await kernel.SendAsync(new SubmitCode(submission));

            var valueEvents =
                KernelEvents
                .Where(e => e is DisplayedValueProduced || e is DisplayedValueUpdated)
                .Select(e => e)
                .ToList();

            valueEvents.First().Should().BeOfType <DisplayedValueProduced>();
            valueEvents.Last().Should().BeOfType <DisplayedValueUpdated>();
        }
예제 #5
0
        public async Task it_returns_diagnostics(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                Language.FSharp => new[]
                {
                    "open System",
                    "aaaadd"
                },

                Language.CSharp => new[]
                {
                    "using System;",
                    "aaaadd"
                }
            };

            await SubmitCode(kernel, source);

            var error = language switch
            {
                Language.FSharp => "input.fsx (1,1)-(1,7) typecheck error The value or constructor 'aaaadd' is not defined.",
                Language.CSharp => "(1,1): error CS0103: The name 'aaaadd' does not exist in the current context",
            };

            KernelEvents
            .Where(x => x.GetType() != typeof(KernelIdle) && x.GetType() != typeof(KernelBusy))
            .Last()
            .Should()
            .BeOfType <CommandFailed>()
            .Which
            .Message
            .Should()
            .Be(error);
        }