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
53 changes: 39 additions & 14 deletions src/Build.UnitTests/BuildEventArgsSerialization_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,11 @@ public void RoundtripBuildErrorEventArgs(bool useArguments)
e => string.Join(", ", e.RawArguments ?? Array.Empty<object>()));
}


[Theory]
[InlineData(true)]
[InlineData(false)]
public void RoundtripExtendedErrorEventArgs_SerializedAsError(bool useArguments)
public void RoundtripExtendedErrorEventArgs_SerializedAsError(bool withOptionalData)
{
var args = new ExtendedBuildErrorEventArgs(
"extendedDataType",
Expand All @@ -281,10 +282,14 @@ public void RoundtripExtendedErrorEventArgs_SerializedAsError(bool useArguments)
"Help",
"SenderName",
DateTime.Parse("9/1/2021 12:02:07 PM"),
useArguments ? new object[] { "argument0" } : null);
withOptionalData ? new object[] { "argument0" } : null)
{
ExtendedData = withOptionalData ? "{'long-json':'mostly-strings'}" : null,
ExtendedMetadata = withOptionalData ? new Dictionary<string, string> { { "m1", "v1" }, { "m2", "v2" } } : null,
BuildEventContext = withOptionalData ? new BuildEventContext(1, 2, 3, 4, 5, 6, 7) : null,
};

// For now we don't serialize extended data into binary log
Roundtrip<BuildErrorEventArgs>(args,
Roundtrip(args,
e => e.Code,
e => e.ColumnNumber.ToString(),
e => e.EndColumnNumber.ToString(),
Expand All @@ -294,6 +299,9 @@ public void RoundtripExtendedErrorEventArgs_SerializedAsError(bool useArguments)
e => e.Message,
e => e.ProjectFile,
e => e.Subcategory,
e => e.ExtendedType,
e => TranslationHelpers.ToString(e.ExtendedMetadata),
e => e.ExtendedData,
e => string.Join(", ", e.RawArguments ?? Array.Empty<object>()));
}

Expand Down Expand Up @@ -332,7 +340,7 @@ public void RoundtripBuildWarningEventArgs(bool useArguments)
[Theory]
[InlineData(true)]
[InlineData(false)]
public void RoundtripExtendedWarningEventArgs_SerializedAsWarning(bool useArguments)
public void RoundtripExtendedWarningEventArgs_SerializedAsWarning(bool withOptionalData)
{
var args = new ExtendedBuildWarningEventArgs(
"extendedDataType",
Expand All @@ -347,10 +355,14 @@ public void RoundtripExtendedWarningEventArgs_SerializedAsWarning(bool useArgume
"Help",
"SenderName",
DateTime.Parse("9/1/2021 12:02:07 PM"),
useArguments ? new object[] { "argument0" } : null);
withOptionalData ? new object[] { "argument0" } : null)
{
ExtendedData = withOptionalData ? "{'long-json':'mostly-strings'}" : null,
ExtendedMetadata = withOptionalData ? new Dictionary<string, string> { { "m1", "v1" }, { "m2", "v2" } } : null,
BuildEventContext = withOptionalData ? new BuildEventContext(1, 2, 3, 4, 5, 6, 7) : null,
};

// For now we don't serialize extended data into binary log
Roundtrip<BuildWarningEventArgs>(args,
Roundtrip(args,
e => e.Code,
e => e.ColumnNumber.ToString(),
e => e.EndColumnNumber.ToString(),
Expand All @@ -360,6 +372,9 @@ public void RoundtripExtendedWarningEventArgs_SerializedAsWarning(bool useArgume
e => e.Message,
e => e.ProjectFile,
e => e.Subcategory,
e => e.ExtendedType,
e => TranslationHelpers.ToString(e.ExtendedMetadata),
e => e.ExtendedData,
e => string.Join(", ", e.RawArguments ?? Array.Empty<object>()));
}

Expand Down Expand Up @@ -400,7 +415,7 @@ public void RoundtripBuildMessageEventArgs(bool useArguments)
[Theory]
[InlineData(true)]
[InlineData(false)]
public void RoundtripExtendedBuildMessageEventArgs_SerializedAsMessage(bool useArguments)
public void RoundtripExtendedBuildMessageEventArgs_SerializedAsMessage(bool withOptionalData)
{
var args = new ExtendedBuildMessageEventArgs(
"extendedDataType",
Expand All @@ -416,9 +431,14 @@ public void RoundtripExtendedBuildMessageEventArgs_SerializedAsMessage(bool useA
"SenderName",
MessageImportance.High,
DateTime.Parse("12/12/2015 06:11:56 PM"),
useArguments ? new object[] { "argument0" } : null);
withOptionalData ? new object[] { "argument0" } : null)
{
ExtendedData = withOptionalData ? "{'long-json':'mostly-strings'}" : null,
ExtendedMetadata = withOptionalData ? new Dictionary<string, string> { { "m1", "v1" }, { "m2", "v2" } } : null,
BuildEventContext = withOptionalData ? new BuildEventContext(1, 2, 3, 4, 5, 6, 7) : null,
};

Roundtrip<BuildMessageEventArgs>(args,
Roundtrip(args,
e => e.Code,
e => e.ColumnNumber.ToString(),
e => e.EndColumnNumber.ToString(),
Expand All @@ -429,6 +449,9 @@ public void RoundtripExtendedBuildMessageEventArgs_SerializedAsMessage(bool useA
e => e.Importance.ToString(),
e => e.ProjectFile,
e => e.Subcategory,
e => e.ExtendedType,
e => TranslationHelpers.ToString(e.ExtendedMetadata),
e => e.ExtendedData,
e => string.Join(", ", e.RawArguments ?? Array.Empty<object>()));
}

Expand Down Expand Up @@ -493,19 +516,21 @@ public void ExtendedCustomBuildEventArgs_SerializedAsMessage(bool withOptionalDa

using var buildEventArgsReader = new BuildEventArgsReader(binaryReader, BinaryLogger.FileFormatVersion);
var deserialized = buildEventArgsReader.Read();
BuildMessageEventArgs desArgs = (BuildMessageEventArgs)deserialized;

desArgs.ShouldBeOfType(typeof(BuildMessageEventArgs));
ExtendedBuildMessageEventArgs desArgs = (ExtendedBuildMessageEventArgs)deserialized;

desArgs.ShouldBeOfType(typeof(ExtendedBuildMessageEventArgs));
desArgs.Message.ShouldBe(args.Message);
desArgs.HelpKeyword.ShouldBe(args.HelpKeyword);
desArgs.SenderName.ShouldBe(args.SenderName);
desArgs.Importance.ShouldBe(MessageImportance.Normal);
desArgs.Timestamp.ShouldBe(args.Timestamp);
desArgs.ExtendedType.ShouldBe(args.ExtendedType);

if (withOptionalData)
{
desArgs.BuildEventContext.ShouldBe(args.BuildEventContext);
desArgs.ExtendedData.ShouldBe(args.ExtendedData);
TranslationHelpers.ToString(desArgs.ExtendedMetadata).ShouldBe(TranslationHelpers.ToString(args.ExtendedMetadata));
}
else
{
Expand Down
4 changes: 3 additions & 1 deletion src/Build/Logging/BinaryLogger/BinaryLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ public sealed class BinaryLogger : ILogger
// - new record kind: ResponseFileUsedEventArgs
// version 16:
// - AssemblyLoadBuildEventArgs
internal const int FileFormatVersion = 16;
// version 17:
// - Added extended data for types implementing IExtendedBuildEventArgs
internal const int FileFormatVersion = 17;

private Stream stream;
private BinaryWriter binaryWriter;
Expand Down
3 changes: 2 additions & 1 deletion src/Build/Logging/BinaryLogger/BuildEventArgsFieldFlags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ internal enum BuildEventArgsFieldFlags
EndLineNumber = 1 << 12,
EndColumnNumber = 1 << 13,
Arguments = 1 << 14,
Importance = 1 << 15
Importance = 1 << 15,
Extended = 1 << 16,
}
}
1 change: 1 addition & 0 deletions src/Build/Logging/BinaryLogger/BuildEventArgsFields.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,6 @@ internal class BuildEventArgsFields
public int ColumnNumber { get; set; }
public int EndLineNumber { get; set; }
public int EndColumnNumber { get; set; }
public ExtendedDataFields Extended { get; set; }
}
}
Loading