diff --git a/project/UnitTests/Core/Label/CustomLabellerTest.cs b/project/UnitTests/Core/Label/CustomLabellerTest.cs
new file mode 100644
index 000000000..b63096aa2
--- /dev/null
+++ b/project/UnitTests/Core/Label/CustomLabellerTest.cs
@@ -0,0 +1,92 @@
+using Exortech.NetReflector;
+using NUnit.Framework;
+using ThoughtWorks.CruiseControl.Core.Label;
+
+namespace ThoughtWorks.CruiseControl.UnitTests.Core.Label
+{
+ [TestFixture]
+ public class CustomLabellerTest : IntegrationFixture
+ {
+ private CustomLabeller labeller;
+
+ private string exampleCode = @"
+
+ if (
+ integrationResult != null
+ && integrationResult.LastIntegration != null
+ && !integrationResult.LastIntegration.IsInitial()
+ )
+ {
+ if (integrationResult.LastIntegration.Status == ThoughtWorks.CruiseControl.Remote.IntegrationStatus.Success)
+ {
+ System.Version lastVersion = System.Version.Parse(integrationResult.LastIntegration.Label);
+ System.Version nextVersion = new System.Version(lastVersion.Major, lastVersion.Minor, lastVersion.Build, lastVersion.Revision + 1);
+ ret = nextVersion.ToString();
+ }
+ else
+ {
+ ret = integrationResult.LastIntegration.Label;
+ }
+ }
+ else
+ {
+ ret = new System.Version(1, 1, 1, 1).ToString();
+ }
+
+
+";
+
+ [SetUp]
+ public void SetUp()
+ {
+ labeller = new CustomLabeller();
+ }
+
+ [Test]
+ public void GenerateInitialLabelWoCode()
+ {
+ Assert.AreEqual("0.0.0.0", labeller.Generate(InitialIntegrationResult()));
+ }
+
+ [Test]
+ public void GenerateLabelWoCode()
+ {
+ Assert.AreEqual("0.0.0.0", labeller.Generate(SuccessfulResult("35")));
+ }
+
+ [Test]
+ public void GenerateNextLabel()
+ {
+ labeller.CsCode = @"ret = ""somelabel"";";
+ Assert.AreEqual("somelabel", labeller.Generate(SuccessfulResult("previouslabel")));
+ }
+
+ [Test]
+ public void GenerateInitialLabel()
+ {
+ labeller.CsCode = @"ret = ""somelabel"";";
+ Assert.AreEqual("somelabel", labeller.Generate(SuccessfulResult("previouslabel")));
+ }
+
+ [Test]
+ public void GenerateInitialLabelWithExampleCode()
+ {
+ labeller.CsCode = exampleCode;
+ Assert.AreEqual("1.1.1.1", labeller.Generate(InitialIntegrationResult()));
+ }
+
+ [Test]
+ public void GenerateNextLabelWithExampleCode()
+ {
+ labeller.CsCode = exampleCode;
+ Assert.AreEqual("1.2.3.5", labeller.Generate(SuccessfulResult("1.2.3.4")));
+ }
+
+ [Test]
+ public void GenerateSameLabelWithExampleCode()
+ {
+ labeller.CsCode = exampleCode;
+ Assert.AreEqual("1.2.3.4", labeller.Generate(FailedResult("1.2.3.4")));
+ }
+ }
+}
diff --git a/project/UnitTests/UnitTests.csproj b/project/UnitTests/UnitTests.csproj
index 06a1f2db0..ccdbdfd4b 100644
--- a/project/UnitTests/UnitTests.csproj
+++ b/project/UnitTests/UnitTests.csproj
@@ -376,6 +376,7 @@
+ /// <labeller type="customlabeller">
+ /// <cscode>1</cscode>
+ /// </labeller>
+ ///
+ ///