Exercise 4: Test cases

[TestFixture]
public class Exercise4
{
    Brain brain;
    Parser parser;

    [SetUp]
    public void SetUp()
    {
        brain = new Brain();
        parser = new Parser(brain);
    }

    /// <summary>
    /// Ensure we can parse an entity declaration.
    /// </summary>
    [Test]
    public void ParseEntity()
    {
        parser.Parse("Daniel");

        Assert.IsNotNull(brain.Get("Daniel"));
    }

    /// <summary>
    /// Ensure we can parse a relationship.
    /// </summary>
    [Test]
    public void ParseRelationship()
    {
        parser.Parse("Daniel is_a man");

        Assert.IsNotNull(brain.Get("Daniel"));
        Assert.IsNotNull(brain.Get("is_a"));
        Assert.IsNotNull(brain.Get("man"));
        Assert.IsTrue(brain.Get("Daniel").IsA(brain.Get("man")) );
    }

    /// <summary>
    /// Ensure we can parse an assignment.
    /// </summary>
    [Test]
    public void ParseAssignment()
    {
        parser.Parse("'Daniel'");
        parser.Parse("Daniel has_a name");
        parser.Parse("Daniel.name = 'Daniel'");

        IEntity Daniel = brain.Get("Daniel");
        IEntity name = brain.Get("name");
        IEntity wDaniel = brain.Get("'Daniel'");

        Assert.AreEqual(wDaniel, Daniel.Get(name));
    }

    /// <summary>
    /// Ensure we can parse multiple lines.
    /// </summary>
    [Test]
    public void ParseMultipleLines()
    {
        parser.Parse("a\nb\nc");

        Assert.IsNotNull(brain.Get("a"));
        Assert.IsNotNull(brain.Get("b"));
        Assert.IsNotNull(brain.Get("c"));
    }

    /// <summary>
    /// Ensure an exception is thrown if an entity is added twice.
    /// </summary>
    [Test]
    [ExpectedException]
    public void AddEntityTwice()
    {
        parser.Parse("a\na");
    }
}