Comment detail

メソッド名一覧の表示 (Nested Flatten)
super クラスも検索するようにしてみました。

「bar: || "bar".p」というのは引数なしの lambda 関数を bar に束縛しているような感じです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
String::start_with: method(sub) {
    return this.split("").take(sub.length).to_a.join("") == sub;
}

TargetTest: class {
    test_foo: || "test_foo".p;
    test_bar: || "test_bar".p;
    foo: || "foo".p;
    bar: || "bar".p;
}
TargetTest2: class(TargetTest) {
    test_foo: || "test_foo_sub".p;
    test_baz: || "test_baz".p;
}

TestRunner: class {
    suite: method(target, inherited_too: true) fiber {
        klasses: [target];
        if (inherited_too) {
            klasses ~= target.each_ancestor.to_a;
        }

        override: Map();
        klasses {|klass|
            klass.each_member {|name, x, meth|
                if (! override[name] && name.start_with("test_")) {
                    yield meth;
                }
               override[name] = true;
            }
        }
    }

    run: method(target) {
        suite(target) {
            it();
        }
    }
}

runner: TestRunner();
"---".p;
runner.run(TargetTest2);
"---".p;
runner.run(TargetTest);

Index

Feed

Other

Link

Pathtraq

loading...