Skip to content

Commit 893d2d0

Browse files
NikolayPianikovNikolayPianikov
authored andcommitted
#25 Support test metadata
1 parent 69c68d9 commit 893d2d0

13 files changed

+151
-30
lines changed

TeamCity.ServiceMessages.Tests/Write/Specials/TeamCityTestWriterTest.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,53 @@ public void TestStdOut()
7575
{
7676
DoTest(x => x.WriteStdOutput("outp4uz"), "##teamcity[testStdOut name='BadaBumBigBadaBum' out='outp4uz' tc:tags='tc:parseServiceMessagesInside']");
7777
}
78+
79+
[Test]
80+
public void TestWriteTextValue()
81+
{
82+
DoTest(x => x.WriteValue("strVal", "myVal"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' value='strVal' name='myVal']");
83+
}
84+
85+
[Test]
86+
[TestCase(1.0d, "1")]
87+
[TestCase(0.0d, "0")]
88+
[TestCase(-1.0d, "-1")]
89+
[TestCase(1.33d, "1.33")]
90+
[TestCase(-1.33d, "-1.33")]
91+
[TestCase(0.33d, "0.33")]
92+
public void TestWriteNumber(double value, string expectedValueInMessage)
93+
{
94+
DoTest(x => x.WriteValue(value, "myVal"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='number' value='" + expectedValueInMessage + "' name='myVal']");
95+
}
96+
97+
[Test]
98+
public void TestWriteLink()
99+
{
100+
DoTest(x => x.WriteLink("http://abc.com", "abc"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='link' value='http://abc.com' name='abc']");
101+
}
102+
103+
[Test]
104+
public void TestWriteFile()
105+
{
106+
DoTest(x => x.WriteFile("abc.txt", "abc"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='artifact' value='abc.txt' name='abc']");
107+
}
108+
109+
[Test]
110+
public void TestWriteFileWithoutDescription()
111+
{
112+
DoTest(x => x.WriteFile("abc.txt"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='artifact' value='abc.txt']");
113+
}
114+
115+
[Test]
116+
public void TestWriteImage()
117+
{
118+
DoTest(x => x.WriteImage("abc.jpg", "abc"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='image' value='abc.jpg' name='abc']");
119+
}
120+
121+
[Test]
122+
public void TestWriteImageWithoutDescription()
123+
{
124+
DoTest(x => x.WriteImage("abc.jpg"), "##teamcity[testMetadata testName='BadaBumBigBadaBum' type='image' value='abc.jpg']");
125+
}
78126
}
79127
}

TeamCity.ServiceMessages.Tests/Write/Specials/TeamCityWriterBaseTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ private void DoTestImpl(Action<T> action, Func<string, string> replace, string[]
6363
var actualText = "\r\n" + string.Join("\r\n", actual);
6464
var expected = preprocess(string.Join("\r\n", golds));
6565

66-
if (actual.Count() != expected.Count())
66+
if (actual.Length != expected.Length)
6767
Assert.Fail("Incorrect number of messages. Was: " + actualText);
6868

6969
for (var i = 0; i < actual.Count(); i++)
70-
Assert.AreEqual(actual[i], expected[i], "Message {0} does not match. Was: {1}", i, actualText);
70+
Assert.AreEqual(expected[i], actual[i], "Message {0} does not match. Was: {1}", i, actualText);
7171
}
7272

7373
protected class ToStringProcessor : IServiceMessageProcessor

TeamCity.ServiceMessages.sln.DotSettings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@
180180
&lt;/Patterns&gt;</s:String>
181181
<s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/AddImportsToDeepestScope/@EntryValue">True</s:Boolean>
182182
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
183+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
184+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
183185
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
184186
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAlwaysTreatStructAsNotReorderableMigration/@EntryIndexedValue">True</s:Boolean>
185187
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>

TeamCity.ServiceMessages/Write/Special/ITeamCityArtifactsWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace JetBrains.TeamCity.ServiceMessages.Write.Special
1818
{
1919
/// <summary>
2020
/// Service messages for dynamically publish artifacts.
21-
/// http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-PublishingArtifactswhiletheBuildisStillinProgress
21+
/// http://confluence.jetbrains.net/display/TCD18/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-PublishingArtifactswhiletheBuildisStillinProgress
2222
/// </summary>
2323
/// <remarks>
2424
/// Implementation is not thread-safe. Create an instance for each thread instead.
@@ -27,7 +27,7 @@ public interface ITeamCityArtifactsWriter
2727
{
2828
/// <summary>
2929
/// attaches new artifact publishing rules as described in
30-
/// http://confluence.jetbrains.net/display/TCD7/Build+Artifact
30+
/// http://confluence.jetbrains.net/display/TCD18/Build+Artifact
3131
/// </summary>
3232
/// <param name="rules"></param>
3333
void PublishArtifact([NotNull] string rules);

TeamCity.ServiceMessages/Write/Special/ITeamCityBlockWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace JetBrains.TeamCity.ServiceMessages.Write.Special
2323
/// <pre>##teamcity[blockOpened name='&lt;blockName>']</pre>
2424
/// and
2525
/// <pre>##teamcity[blockClosed name='&lt;blockName>']</pre>
26-
/// http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-BlocksofServiceMessages
26+
/// http://confluence.jetbrains.net/display/TCD18/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-BlocksofServiceMessages
2727
/// </summary>
2828
/// <remarks>
2929
/// Implementation is not thread-safe. Create an instance for each thread instead.

TeamCity.ServiceMessages/Write/Special/ITeamCityBuildStatusWriter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace JetBrains.TeamCity.ServiceMessages.Write.Special
1818
{
1919
/// <summary>
2020
/// Interface for writing build-related messages
21-
/// http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildNumber
21+
/// http://confluence.jetbrains.net/display/TCD18/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildNumber
2222
/// </summary>
2323
/// <remarks>
2424
/// Implementation is not thread-safe. Create an instance for each thread instead.
@@ -41,7 +41,7 @@ public interface ITeamCityBuildStatusWriter
4141

4242
/// <summary>
4343
/// Generates service message to update build parameter
44-
/// http://confluence.jetbrains.net/display/TCD7/Configuring+Build+Parameters
44+
/// http://confluence.jetbrains.net/display/TCD18/Configuring+Build+Parameters
4545
/// </summary>
4646
/// <param name="parameterName">
4747
/// parameter name, could start with env. for environment, system. for system property,
@@ -53,7 +53,7 @@ public interface ITeamCityBuildStatusWriter
5353

5454
/// <summary>
5555
/// Generates service message to report build statistics values
56-
/// http://confluence.jetbrains.net/display/TCD7/Customizing+Statistics+Charts#CustomizingStatisticsCharts-customCharts
56+
/// http://confluence.jetbrains.net/display/TCD18/Customizing+Statistics+Charts#CustomizingStatisticsCharts-customCharts
5757
/// </summary>
5858
/// <param name="statisticsKey">statistics report key</param>
5959
/// <param name="statisticsValue">statistics report values</param>

TeamCity.ServiceMessages/Write/Special/ITeamCityCompilationBlockWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace JetBrains.TeamCity.ServiceMessages.Write.Special
2323
/// <pre>##teamcity[compilationStarted compiler='&lt;compiler name>']</pre>
2424
/// and
2525
/// <pre>##teamcity[compilationFinished compiler='&lt;compiler name>']</pre>
26-
/// http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingCompilationMessages
26+
/// http://confluence.jetbrains.net/display/TCD18/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingCompilationMessages
2727
/// </summary>
2828
/// <remarks>
2929
/// Implementation is not thread-safe. Create an instance for each thread instead.

TeamCity.ServiceMessages/Write/Special/ITeamCityMessageWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace JetBrains.TeamCity.ServiceMessages.Write.Special
2121
/// <pre>
2222
/// ##teamcity[message text='&lt;message text>' errorDetails='&lt;error details>' status='&lt;status value>']
2323
/// </pre>
24-
/// http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingMessagesForBuildLog
24+
/// http://confluence.jetbrains.net/display/TCD18/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingMessagesForBuildLog
2525
/// </summary>
2626
/// <remarks>
2727
/// Implementation is not thread-safe. Create an instance for each thread instead.

TeamCity.ServiceMessages/Write/Special/ITeamCityTestWriter.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,44 @@ public interface ITeamCityTestWriter : IDisposable
6060
/// Specifies test duration
6161
/// </summary>
6262
/// <remarks>
63-
/// TeamCity may compute test duration inself, to provide precise data, you may set the duration explicitly
63+
/// TeamCity may compute test duration itself, to provide precise data, you may set the duration explicitly
6464
/// </remarks>
6565
/// <param name="duration">time of test</param>
6666
void WriteDuration(TimeSpan duration);
67+
68+
/// <summary>
69+
/// Writes image as test metadata. Supported in TeamCity 2018.2+ https://confluence.jetbrains.com/display/TCD18/Reporting+Test+Metadata.
70+
/// </summary>
71+
/// <param name="teamCityArtifactUri">The URI to the image in the build artifacts directory. Should be relative to the build artifacts directory.</param>
72+
/// <param name="description">The image description. When showing images, TeamCity shows both the ‘description’ and the filename of the referenced image.</param>
73+
void WriteImage([NotNull] string teamCityArtifactUri, [NotNull] string description = "");
74+
75+
/// <summary>
76+
/// Writes file as test metadata. Supported in TeamCity 2018.2+ https://confluence.jetbrains.com/display/TCD18/Reporting+Test+Metadata.
77+
/// </summary>
78+
/// <param name="teamCityArtifactUri">The URI to the file in the build artifacts directory. Should be relative to the build artifacts directory.</param>
79+
/// <param name="description">The file description. TeamCity shows both the ‘description’ and the filename of the referenced file. If a description was autogenerated, it is not shown.</param>
80+
void WriteFile([NotNull] string teamCityArtifactUri, [NotNull] string description = "");
81+
82+
/// <summary>
83+
/// Writes number as test metadata. Supported in TeamCity 2018.2+ https://confluence.jetbrains.com/display/TCD18/Reporting+Test+Metadata.
84+
/// </summary>
85+
/// <param name="value">The metadata value.</param>
86+
/// <param name="name">The metadata name.</param>
87+
void WriteValue([NotNull] double value, [NotNull] string name);
88+
89+
/// <summary>
90+
/// Writes string value as test metadata. Supported in TeamCity 2018.2+ https://confluence.jetbrains.com/display/TCD18/Reporting+Test+Metadata.
91+
/// </summary>
92+
/// <param name="value">The metadata value.</param>
93+
/// <param name="name">The metadata name.</param>
94+
void WriteValue([NotNull] string value, [NotNull] string name);
95+
96+
/// <summary>
97+
/// Writes link as test metadata. Supported in TeamCity 2018.2+ https://confluence.jetbrains.com/display/TCD18/Reporting+Test+Metadata.
98+
/// </summary>
99+
/// <param name="linkUri">The metadata URI.</param>
100+
/// <param name="name">The metadata name.</param>
101+
void WriteLink([NotNull] string linkUri, [NotNull] string name);
67102
}
68103
}

TeamCity.ServiceMessages/Write/Special/Impl/TeamCityWriterFacade.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ public virtual void Dispose()
129129
public void PublishArtifact(string rules)
130130
{
131131
if (rules == null) throw new ArgumentNullException(nameof(rules));
132-
CheckConsistency();
133132
_artifactsWriter.PublishArtifact(rules);
134133
}
135134

0 commit comments

Comments
 (0)