public void ImplementLoggerProperty()
        {
            String contents = "import AspectSharp.Tests.Classes in AspectSharp.Tests " +
                              " " +
                              " aspect McBrother for Author " +
                              "   " +
                              "   include Loggeable" +
                              "   " +
                              "   pointcut method|property(*)" +
                              "     advice(LogInvocationsInterceptor)" +
                              "   end" +
                              "   " +
                              " end ";

            AspectEngineBuilder builder = new AspectLanguageEngineBuilder(contents);
            AspectEngine        engine  = builder.Build();

            Author author = engine.WrapClass(typeof(Author)) as Author;

            Assert.IsNotNull(author);
            Assert.IsNotNull(author as ILoggeable);

            Assert.AreEqual(0, author.BooksPublished);
            author.MoreOneBook();
            Assert.AreEqual(1, author.BooksPublished);

            ILoggeable log      = author as ILoggeable;
            String     messages = log.GetLogMessages();

            // TODO: Correct compare
            Assert.AreEqual("Invoking get_BooksPublished;Invoking MoreOneBook;Invoking get_BooksPublished;", messages);
        }
        public void MixinMethodsMustBeIntercepted()
        {
            String contents = "import AspectSharp.Tests.Classes in AspectSharp.Tests " +
                              " " +
                              " aspect McBrother for Author " +
                              "   " +
                              "   include Loggeable" +
                              "   include DummyPerson" +
                              "   " +
                              "   pointcut method|property(*)" +
                              "     advice(LogInvocationsInterceptor)" +
                              "   end" +
                              "   " +
                              " end ";

            AspectEngineBuilder builder = new AspectLanguageEngineBuilder(contents);
            AspectEngine        engine  = builder.Build();

            Author author = engine.WrapClass(typeof(Author)) as Author;

            Assert.IsNotNull(author);
            Assert.IsNotNull(author as ILoggeable);
            Assert.IsNotNull(author as IPerson);

            IPerson person = author as IPerson;

            person.Name = "McBilly";
            Assert.AreEqual("McBilly", person.Name);

            ILoggeable log = author as ILoggeable;

            log.Log("Test");
            String messages = log.GetLogMessages();

            Assert.AreEqual("Invoking set_Name;Invoking get_Name;Test;", messages);
        }