< Summary - Kestrun — Combined Coverage

Information
Class: Kestrun.Languages.JScriptDelegateBuilder
Assembly: Kestrun
File(s): /home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/Languages/JScriptDelegateBuilder.cs
Tag: Kestrun/Kestrun@9d3a582b2d63930269564a7591aa77ef297cadeb
Line coverage
23%
Covered lines: 5
Uncovered lines: 16
Coverable lines: 21
Total lines: 43
Line coverage: 23.8%
Branch coverage
66%
Covered branches: 4
Total branches: 6
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Implemented()100%11100%
Build(...)66.66%24620%

File(s)

/home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/Languages/JScriptDelegateBuilder.cs

#LineLine coverage
 1using Kestrun.Models;
 2using Microsoft.ClearScript.V8;
 3using Serilog.Events;
 4
 5namespace Kestrun.Languages;
 6// ---------------------------------------------------------------------------
 7//  Python delegate builder  –  now takes optional imports / references
 8// ---------------------------------------------------------------------------
 9
 10internal static class JScriptDelegateBuilder
 11{
 212    public static bool Implemented { get; set; }
 13    internal static RequestDelegate Build(string code, Serilog.ILogger logger)
 14    {
 115        if (logger.IsEnabled(LogEventLevel.Debug))
 16        {
 117            logger.Debug("Building JavaScript delegate, script length={Length}", code?.Length);
 18        }
 19
 120        if (!Implemented)
 21        {
 122            throw new NotImplementedException("JavaScript scripting is not yet supported in Kestrun.");
 23        }
 24
 025        var engine = new V8ScriptEngine();
 026        engine.AddHostType("KestrunResponse", typeof(KestrunResponse));
 027        engine.Execute(code);               // script defines global  function handle(ctx, res) { ... }
 28
 029        return async context =>
 030        {
 031            var krRequest = await KestrunRequest.NewRequest(context);
 032            var krResponse = new KestrunResponse(krRequest);
 033            engine.Script.handle(context, krResponse);
 034
 035            if (!string.IsNullOrEmpty(krResponse.RedirectUrl))
 036            {
 037                return;
 038            }
 039
 040            await krResponse.ApplyTo(context.Response);
 041        };
 42    }
 43}