microsoft / ClearScript

A library for adding scripting to .NET applications. Supports V8 (Windows, Linux, macOS) and JScript/VBScript (Windows).
https://microsoft.github.io/ClearScript/
MIT License
1.74k stars 148 forks source link

Can not make ClearScriptV8 run in unit test #498

Closed JangoBoogaloo closed 1 year ago

JangoBoogaloo commented 1 year ago

I defined a simple ClearScript .Net Core Console App and trying to unit test it. I am able to build and run the executable. However I am not able to instantiate V8ScriptEngine when in unit testing. I get the following error:

Exit code is 133 (#
# Fatal error in , line 0
# Check failed: 12 == (*__error()).
#
#
#
#FailureMessage Object: 0x70000a833c90)

Last runner error: Process /usr/local/share/dotnet/dotnet:27461 exited with code '133': # # Fatal error in , line 0 # Check failed: 12 == (*__error()). # # # #FailureMessage Object: 0x70000a833c90

--- EXCEPTION #1/1 [LoggerException]
Message = “
  Process /usr/local/share/dotnet/dotnet:27461 exited with code '133':
  #
  # Fatal error in , line 0
  # Check failed: 12 == (*__error()).
  #
  #
  #
  #FailureMessage Object: 0x70000a833c90
”
ExceptionPath = Root
ClassName = JetBrains.Util.LoggerException
HResult = COR_E_APPLICATION=80131600
StackTraceString = “
  at JetBrains.Util.ILoggerEx.LogMessage(ILogger this, LoggingLevel level, String message)
     at JetBrains.Util.ILoggerEx.Error(ILogger this, String message)
     at JetBrains.ReSharper.UnitTestFramework.Execution.TestRunner.TestRunnerRunStrategy.AnalyseProcessCrash(ProcessExitedUnexpectedlyException ex, IUnitTestRun run)
     at JetBrains.ReSharper.UnitTestFramework.Execution.TestRunner.TestRunnerRunStrategy.Run(IUnitTestRun run)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext()
     at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
     at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
     at System.Threading.Tasks.Task.FinishSlow(Boolean userDelegateExecute)
     at System.Threading.Tasks.Task.TrySetException(Object exceptionObject)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetException(Exception exception, Task`1& taskField)
     at JetBrains.ReSharper.UnitTestFramework.Execution.TestRunner.TestRunnerAgentManager.TestRunnerExecutionAgent.RunTests(CancellationToken cancelCt, CancellationToken abortCt)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext()
     at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
     at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
     at System.Threading.Tasks.Task.FinishSlow(Boolean userDelegateExecute)
     at System.Threading.Tasks.Task.TrySetException(Object exceptionObject)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetException(Exception exception, Task`1& taskField)
     at JetBrains.ReSharper.UnitTestFramework.Execution.TestRunner.TestRunnerAgentManager.BoundTestRunnerAgent.RunSafe(Func`1 taskFactory, CancellationToken operationAborted)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext()
     at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
     at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
     at System.Threading.Tasks.Task.FinishSlow(Boolean userDelegateExecute)
     at System.Threading.Tasks.Task.TrySetException(Object exceptionObject)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetException(Exception exception, Task`1& taskField)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.SetException(Exception exception)
     at JetBrains.ReSharper.UnitTestFramework.Common.Extensions.TaskExtensions.ThrowIf[TResult,TException](Task`1 task, WaitHandle waitHandle, Func`1 exceptionFactory)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
     at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext()
     at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
     at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
     at System.Threading.Tasks.Task`1.TrySetResult(TResult result)
     at System.Threading.Tasks.Task.TwoTaskWhenAnyPromise`1.Invoke(Task completingTask)
     at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
     at System.Threading.Tasks.Task`1.TrySetResult(TResult result)
     at System.Threading.Tasks.TaskCompletionSource`1.TrySetResult(TResult result)
     at JetBrains.ReSharper.UnitTestFramework.Common.Extensions.TaskExtensions.<>c__14`2.<ThrowIf>b__14_0(Object s, Boolean timedOut)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Threading.PortableThreadPool.CompleteWait(RegisteredWaitHandle handle, Boolean timedOut)
     at System.Threading.ThreadPoolWorkQueue.Dispatch()
     at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
     at System.Threading.Thread.StartCallback()
JangoBoogaloo commented 1 year ago

I am running on Mac intel x64 and I suspect it has to do with my ClearScriptV8 library linking. Below is my setup: ClearScriptConsole

public class ClearScriptConsole
{
    public async Task ExecuteAsync(string message, CancellationToken token)
    {
        try
        {
            using var engine = new V8ScriptEngine();
            engine.AddHostType("Console", HostItemFlags.GlobalMembers, typeof(System.Console));
            engine.Script.Console.WriteLine(message);
        }
        catch (ScriptEngineException ex)
        {
            await System.Console.Error.WriteLineAsync(ex.ErrorDetails);
        }
    }
}

ClearScriptRunnerTests

public class ClearScriptRunnerTests
{
    private ClearScriptConsole _clearScriptRunner = new ();

    [Test]
    public async Task Test1()
    {
        await _clearScriptRunner.ExecuteAsync("Hello World", CancellationToken.None);
        Assert.Pass();
    }
}

Console.csproj using nuget

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="Microsoft.ClearScript" Version="7.3.7" />
      <PackageReference Include="Microsoft.ClearScript.V8.Native.osx-x64" Version="7.3.7" />
    </ItemGroup>
</Project>
ClearScriptLib commented 1 year ago

Hi @JangoBoogaloo ,

This looks like a duplicate of Issue #483. Please see here for an explanation and workarounds.

Good luck!

JangoBoogaloo commented 1 year ago

The workaround makes sense. Thanks for the quick reply!