Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions utbot-rider/src/dotnet/UtBot/UtBot.VSharp/VSharpMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,8 @@ public static void Main(string[] args)
var solution = new FileInfo(solutionFilePath);
var declaringType = methodBase.DeclaringType;
Debug.Assert(declaringType != null);
var (generatedProject, renderedFiles) = Renderer.Render(stat.Results(), targetProject,
declaringType,
assemblyLoadContext, solution);
var (generatedProject, renderedFiles) =
Renderer.Render(stat.Results(), targetProject, declaringType, assemblyLoadContext, solution);
var result = new GenerateResults(generatedProject.FullName, renderedFiles.ToArray());
blockingQueue.Add("End");
return result;
Expand All @@ -68,4 +67,4 @@ public static void Main(string[] args)
blockingQueue.Take();
ldef.Terminate();
}
}
}
51 changes: 51 additions & 0 deletions utbot-rider/src/dotnet/UtBot/UtBot/TargetFrameworkChecker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#nullable enable
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace UtBot;

public class FrameworkChecker
{
private readonly int _majorVersion;

public FrameworkChecker()
{
var dotnetInfo = RunDotnet(new ProcessStartInfo
{
Arguments = "--info",
});
if (dotnetInfo == null)
throw new Exception("Could not get dotnet info");

MatchCollection matches = Regex.Matches(dotnetInfo, @".*?Version:\s*?(\d{1})\.\d{1}\.\d{3}");
if (matches.Count < 1)
throw new Exception("Could not find dotnet cli");

var match = matches[0];
if (!int.TryParse(match.Groups[1].Value, out _majorVersion))
throw new Exception("Could not parse dotnet version");
}

private static string? RunDotnet(ProcessStartInfo startInfo)
{
startInfo.FileName = "dotnet";
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;

var pi = Process.Start(startInfo);
var s = pi?.StandardOutput.ReadToEnd();
pi?.WaitForExit();
return s;
}

public bool FrameworkSupportsVSharp()
{
return _majorVersion >= 6;
}

public bool FrameworkSupportsProject(Version tfm)
{
return _majorVersion >= tfm.Major;
}
}
15 changes: 9 additions & 6 deletions utbot-rider/src/dotnet/UtBot/UtBot/UnitTestBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
Expand All @@ -26,6 +27,7 @@
using JetBrains.ReSharper.UnitTestFramework.Exploration.Artifacts;
using JetBrains.Rider.Model;
using JetBrains.Util;
using JetBrains.Util.Dotnet.TargetFrameworkIds;
using UtBot.Rd.Generated;
using UtBot.VSharp;
using Thread = System.Threading.Thread;
Expand Down Expand Up @@ -68,7 +70,8 @@ protected override void Process(CSharpGeneratorContext context, IProgressIndicat
var typeElement = context.ClassDeclaration.DeclaredElement;
if (typeElement == null) return;
if (!(typeElement is IClass) && !(typeElement is IStruct)) return;
var assembly = project.GetOutputFilePath(context.PsiModule.TargetFrameworkId);
var tfm = context.PsiModule.TargetFrameworkId;
var assembly = project.GetOutputFilePath(tfm);
var descriptors = new List<UnitTestMethodDescriptor>();
foreach (var inputElement in context.InputElements.WithProgress(progress, "Generating Unit tests")
.OfType<GeneratorDeclaredElement<IMethod>>())
Expand All @@ -83,7 +86,7 @@ protected override void Process(CSharpGeneratorContext context, IProgressIndicat
{
try
{
Generate(indicator, project, assembly, descriptors);
Generate(indicator, project, assembly, descriptors, tfm);
}
finally
{
Expand All @@ -93,7 +96,7 @@ protected override void Process(CSharpGeneratorContext context, IProgressIndicat
}

private void Generate(IBackgroundProgressIndicator progressIndicator, IProject project,
VirtualFileSystemPath assemblyPath, List<UnitTestMethodDescriptor> descriptors)
VirtualFileSystemPath assemblyPath, List<UnitTestMethodDescriptor> descriptors, TargetFrameworkId tfm)
{
SolutionBuilderRequest buildRequest;
var contextUnloaded = false;
Expand Down Expand Up @@ -136,7 +139,7 @@ private void Generate(IBackgroundProgressIndicator progressIndicator, IProject p
_logger.Verbose("Start Generation");
_logger.Catch(() =>
{
project.Locks.AssertNonMainThread();
project.Locks.AssertNonMainThread();
var pluginPath = FileSystemPath.Parse(Assembly.GetExecutingAssembly().Location)
.Parent;
var vsharpRunner = pluginPath.Combine("UtBot.VSharp.dll");
Expand All @@ -148,7 +151,7 @@ private void Generate(IBackgroundProgressIndicator progressIndicator, IProject p
var args = new GenerateArguments(assemblyPath.FullPath, projectCsprojPath, solutionFilePath,
moduleFqnName, methodToken, _generationTimeout);
var result = proc.VSharpModel.Generate.Sync(args, RpcTimeouts.Maximal);
unitTestProjectLocation = result?.GeneratedProjectPath ?? "";
unitTestProjectLocation = result?.GeneratedProjectPath ?? "";
_shellLocks.ExecuteOrQueue(_lifetime, "UnitTestBuilder::Generate", () =>
{
if (solution.IsValid())
Expand Down Expand Up @@ -233,4 +236,4 @@ private IProject TryToFindProject(ISolution solution, VirtualFileSystemPath unit
{
return solution.FindProjectItemsByLocation(unitTestProjectPath).SingleItem() as IProject;
}
}
}