От: | PhantomIvan | ||
Дата: | 03.12.06 04:29 | ||
Оценка: | 12 (2) |
* — достаточно стянуть с свн-а и запустить BuildAndReg.cmdNemerleUnit — это DSL для написания NUnit-тестов. Тесты, определенные NemerleUnit-ом трансформируются в эквивалентные NUnit-тесты во время компиляции. Используйте NUnit для их запуска.
NemerleUnit не работает с версией Немерле 0.9.3. Вам понадобится компилятор, как минимум, 7030-ой ревизии из svn-репозитория. Это означает, что вам понадобится собрать компилятор из исходников*.
#pragma indent
using NemerleUnit
using System //workaround for the bug
setup
def abc = ["a","b","c"]
teardown
() // you could dispose here
test "length of an empty list"
assert [].Length equals 0
test "length of a three element list"
assert abc.Length equals 3
test "equals"
assert abc equals ["a","b","c"]
assert abc does not equal ["c","b","a"]
test "contains"
assert abc.Contains("a")
assert abc.Contains("b")
assert abc.Contains("c")
ncc -r NUnit.Framework.dll -r NemerleUnit.dll -t library -o tests.dll example.n
macro test(name, code) syntax ("test", name, code )
def (sequence,sequence_teardown) = Store.getSetupAndTeardownSequences(Nemerle.Macros.ImplicitCTX().CurrentType.Name)
def test_body = match(code)
| <[{..$expresions}]> =>
List.Flatten( [sequence,expresions,sequence_teardown])
| _ => [<[]>]
def a_test = <[
decl: [Test] public $(name.ToString().Replace("\"", "") : dyn)(): void {
..$test_body
}
]>;
Nemerle.Macros.ImplicitCTX().CurrentType.Define(a_test)
Nemerle.Macros.ImplicitCTX().CurrentType.GetModifiers().AddCustomAttribute (<[ TestFixture ]>)
<[]>