using System;
using NUnit.Framework;
using NCover;
using NCover.Objects;
namespace AcceptenceTests.Cs{
[TestFixture]
public class IfTest
{
[SetUp]
public void SetUp()
{
NCoverCheck.ResetForTests();
}
[Test]
public void CorrectCoverageOfTrueIf()
{
const string COVER_TRUE_IF = @"
public class A
{
public static bool[] B()
{
if (System.Environment.TickCount > 0)//6
{
return NCover.NCoverCheck.covered;//8
}
return NCover.NCoverCheck.covered;//11
}
}";
string instrumentedCode;
TestUtilities.AssertCompiles(new string[] { COVER_TRUE_IF }, "A");
CoveragePoint[] points = new Instrumenter( 0, COVER_TRUE_IF, "").Do(out instrumentedCode, null);
Assert.AreEqual(3, points.Length);
bool[] results = (bool[]) TestUtilities.AssertCompiles(new string[] { instrumentedCode }, "A");
Assert.AreEqual(3, results.Length);
Assert.IsTrue(TestUtilities.WasHit(points, results, 6));
Assert.IsTrue(TestUtilities.WasHit(points, results, 8));
Assert.IsFalse(TestUtilities.WasHit(points, results, 11));
}
[Test]
public void CorrectCoverageOfFalseIf()
{
const string COVER_TRUE_IF = @"
public class A
{
public static bool[] B()
{
if (System.Environment.TickCount <= 0)//6
{
return NCover.NCoverCheck.covered;//8
}
return NCover.NCoverCheck.covered;//11
}
}";
string instrumentedCode;
TestUtilities.AssertCompiles(new string[] { COVER_TRUE_IF }, "A");
CoveragePoint[] points = new Instrumenter( 0, COVER_TRUE_IF, "").Do(out instrumentedCode, null);
Assert.AreEqual(3, points.Length);
bool[] results = (bool[]) TestUtilities.AssertCompiles(new string[] { instrumentedCode }, "A");
//Assert.AreEqual(3, results.Length);
Assert.IsFalse(TestUtilities.WasHit(points, results, 6));
Assert.IsFalse(TestUtilities.WasHit(points, results, 8));
Assert.IsTrue(TestUtilities.WasHit(points, results, 11));
}
[Test]
public void CorrectCoverageOfElse()
{
const string COVER_TRUE_IF = @"
public class A
{
public static bool[] B()
{
if (System.Environment.TickCount <= 0)//6
{
return NCover.NCoverCheck.covered;//8
}
else
{
return NCover.NCoverCheck.covered;//12
}
}
/* TODO: should really be a coverage point after else but there isn't.
also adding comment in stopped the return from being instrumented.
*/
}";
string instrumentedCode;
TestUtilities.AssertCompiles(new string[] { COVER_TRUE_IF }, "A");
CoveragePoint[] points = new Instrumenter( 0, COVER_TRUE_IF, "").Do(out instrumentedCode, null);
Assert.AreEqual(3, points.Length);
bool[] results = (bool[]) TestUtilities.AssertCompiles(new string[] { instrumentedCode }, "A");
//Assert.AreEqual(3, results.Length);
Assert.IsFalse(TestUtilities.WasHit(points, results, 6));
Assert.IsFalse(TestUtilities.WasHit(points, results, 8));
Assert.IsTrue(TestUtilities.WasHit(points, results, 12));
}
[Test]
public void CorrectCoverageOfElseIf()
{
const string COVER_TRUE_IF = @"
public class A
{
public static bool[] B()
{
if (System.Environment.TickCount <= 0)//6
{
return NCover.NCoverCheck.covered;//8
}
else if (System.Environment.TickCount > 0)//10
{
return NCover.NCoverCheck.covered;//12
}
return NCover.NCoverCheck.covered;//14
}
}";
string instrumentedCode;
TestUtilities.AssertCompiles(new string[] { COVER_TRUE_IF }, "A");
CoveragePoint[] points = new Instrumenter( 0, COVER_TRUE_IF, "").Do(out instrumentedCode, null);
Assert.AreEqual(5, points.Length);
bool[] results = (bool[]) TestUtilities.AssertCompiles(new string[] { instrumentedCode }, "A");
Assert.AreEqual(5, results.Length);
Assert.IsFalse(TestUtilities.WasHit(points, results, 6));
Assert.IsFalse(TestUtilities.WasHit(points, results, 8));
Assert.IsTrue(TestUtilities.WasHit(points, results, 10));
Assert.IsTrue(TestUtilities.WasHit(points, results, 12));
Assert.IsFalse(TestUtilities.WasHit(points, results, 14));
}
[Test]
[Ignore("not implemented")]
public void TestQueryConditional() {}
[Test]
[Ignore("not implemented")]
public void TestSelectCaseConditional() {}
[Test]
public void DontInstumentPreProcessorStatements()
{
const string CODE = @"
#if DEBUG
#else
#endif
";
string instrumentedCode;
CoveragePoint[] points = new Instrumenter( 0, CODE, "").Do(out instrumentedCode, null);
Assert.AreEqual(0, points.Length);
}
}
}
|