Skip to content

Commit

Permalink
Support RC for dot net versions (#142)
Browse files Browse the repository at this point in the history
Co-authored-by: Matthew Asplund <mwasplund@outlook.com>
  • Loading branch information
mwasplund and Matthew Asplund authored Sep 22, 2022
1 parent 4b41aff commit 33421d3
Show file tree
Hide file tree
Showing 7 changed files with 461 additions and 123 deletions.
234 changes: 117 additions & 117 deletions Source/GenerateSharp/Opal/Logger/Log.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,121 +4,121 @@

namespace Opal
{
using global::System;

/// <summary>
/// The static logger class.
/// </summary>
public class Log
{
private static int activeId = 0;
private static TraceListener? listener = null;

/// <summary>
/// Register the single event listener.
/// </summary>
/// <param name="listener">The listener.</param>
public static void RegisterListener(TraceListener? listener)
{
Log.listener = listener;
}

/// <summary>
/// Get access to the single event listener.
/// </summary>
public static TraceListener EnsureListener()
{
if (listener == null)
throw new InvalidOperationException("No Listener registered.");
return listener;
}

/// <summary>
/// Set the active ids to use for each event.
/// </summary>
public static int GetActiveId()
{
return activeId;
}

public static void SetActiveId(int value)
{
activeId = value;
}

/// <summary>
/// Log a high priority message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void HighPriority(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.HighPriority, id, message);
}

public static void HighPriority(string message)
{
HighPriority(message, activeId);
}

/// <summary>
/// Log a generic infomational message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Info(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Information, id, message);
}

public static void Info(string message)
{
Info(message, activeId);
}

/// <summary>
/// Log a diagnostic message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Diag(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Diagnostic, id, message);
}

public static void Diag(string message)
{
Diag(message, activeId);
}

/// <summary>
/// Log a warning message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Warning(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Warning, id, message);
}

public static void Warning(string message)
{
Warning(message, activeId);
}

/// <summary>
/// Log an error message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Error(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Error, id, message);
}

public static void Error(string message)
{
Error(message, activeId);
}
}
using global::System;

/// <summary>
/// The static logger class.
/// </summary>
public class Log
{
private static int activeId = 0;
private static TraceListener? listener = null;

/// <summary>
/// Register the single event listener.
/// </summary>
/// <param name="listener">The listener.</param>
public static void RegisterListener(TraceListener? listener)
{
Log.listener = listener;
}

/// <summary>
/// Get access to the single event listener.
/// </summary>
public static TraceListener EnsureListener()
{
if (listener == null)
throw new InvalidOperationException("No Listener registered.");
return listener;
}

/// <summary>
/// Set the active ids to use for each event.
/// </summary>
public static int GetActiveId()
{
return activeId;
}

public static void SetActiveId(int value)
{
activeId = value;
}

/// <summary>
/// Log a high priority message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void HighPriority(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.HighPriority, id, message);
}

public static void HighPriority(string message)
{
HighPriority(message, activeId);
}

/// <summary>
/// Log a generic infomational message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Info(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Information, id, message);
}

public static void Info(string message)
{
Info(message, activeId);
}

/// <summary>
/// Log a diagnostic message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Diag(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Diagnostic, id, message);
}

public static void Diag(string message)
{
Diag(message, activeId);
}

/// <summary>
/// Log a warning message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Warning(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Warning, id, message);
}

public static void Warning(string message)
{
Warning(message, activeId);
}

/// <summary>
/// Log an error message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="id">The message id.</param>
public static void Error(string message, int id)
{
EnsureListener().TraceEvent(TraceEventFlag.Error, id, message);
}

public static void Error(string message)
{
Error(message, activeId);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// <copyright file="DotNetSDKUtilitiesUnitTests.cs" company="Soup">
// Copyright (c) Soup. All rights reserved.
// </copyright>

using Opal;
using Opal.System;
using System.Collections.Generic;
using Xunit;

namespace Soup.Build.Discover.UnitTests
{
[Collection("Opal")]
public class DotNetSDKUtilitiesUnitTests
{
[Fact]
public void FindDotNet6Refs()
{
// Register the test listener
var testListener = new TestTraceListener();
using var scopedTraceListener = new ScopedTraceListenerRegister(testListener);

var mockFileSystem = new MockFileSystem();
using var scopedFileSystem = new ScopedSingleton<IFileSystem>(mockFileSystem);

mockFileSystem.RegisterDirectoryChildren(
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/"),
new List<Path>()
{
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.7"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.8"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.9"),
});

var result = DotNetSDKUtilities.FindDotNet6Refs();

Assert.Equal("6.0.9", result.Version);
Assert.Equal(new Path("C:/Program Files/dotnet/"), result.Path);

// Verify expected logs
Assert.Equal(
new List<string>()
{
"HIGH: FindNewestDotNet6RuntimeVersion: C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/",
"INFO: CheckFile: 5.0.0",
"INFO: CheckFile: 6.0.7",
"INFO: CheckFile: 6.0.8",
"INFO: CheckFile: 6.0.9",
},
testListener.GetMessages());

// Verify expected file system requests
Assert.Equal(
new List<string>()
{
"GetDirectoryChildren: C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/",
},
mockFileSystem.GetRequests());
}

[Fact]
public void FindDotNet6Refs_SkipReleaseCandidate()
{
// Register the test listener
var testListener = new TestTraceListener();
using var scopedTraceListener = new ScopedTraceListenerRegister(testListener);

var mockFileSystem = new MockFileSystem();
using var scopedFileSystem = new ScopedSingleton<IFileSystem>(mockFileSystem);

mockFileSystem.RegisterDirectoryChildren(
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/"),
new List<Path>()
{
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.7"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.8"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/6.0.9"),
new Path("C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/7.0.0-rc.1.22426.10"),
});

var result = DotNetSDKUtilities.FindDotNet6Refs();

Assert.Equal("6.0.9", result.Version);
Assert.Equal(new Path("C:/Program Files/dotnet/"), result.Path);

// Verify expected logs
Assert.Equal(
new List<string>()
{
"HIGH: FindNewestDotNet6RuntimeVersion: C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/",
"INFO: CheckFile: 5.0.0",
"INFO: CheckFile: 6.0.7",
"INFO: CheckFile: 6.0.8",
"INFO: CheckFile: 6.0.9",
"INFO: CheckFile: 7.0.0-rc.1.22426.10",
},
testListener.GetMessages());

// Verify expected file system requests
Assert.Equal(
new List<string>()
{
"GetDirectoryChildren: C:/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/",
},
mockFileSystem.GetRequests());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace Soup.Build.Discover.UnitTests
{
[Collection("Opal")]
public class SwhereManagerUnitTests
{
[Fact]
Expand Down
Loading

0 comments on commit 33421d3

Please sign in to comment.