1require 'test/unit'
2require "-test-/symbol"
3
4module Test_Symbol
5  class TestType < Test::Unit::TestCase
6    def assert_symtype(sym, pred, msg = nil)
7      assert_send([Bug::Symbol, pred, sym], msg)
8    end
9
10    def assert_not_symtype(sym, pred, msg = nil)
11      assert_not_send([Bug::Symbol, pred, sym], msg)
12    end
13
14    def test_const
15      assert_symtype("Foo", :const?)
16      assert_not_symtype("F!", :const?)
17      assert_not_symtype("foo", :const?)
18      assert_not_symtype("@foo", :const?)
19      assert_not_symtype("@@foo", :const?)
20      assert_not_symtype("$foo", :const?)
21      assert_not_symtype("foo=", :const?)
22      assert_not_symtype("[foo]", :const?)
23      assert_not_symtype("xFoo", :const?)
24    end
25
26    def test_local
27      assert_symtype("foo", :local?)
28      assert_symtype("fooBar", :local?)
29      assert_symtype("foo_bar", :local?)
30      assert_not_symtype("foo!", :local?)
31      assert_not_symtype("foo?", :local?)
32      assert_not_symtype("Foo", :local?)
33      assert_not_symtype("@foo", :local?)
34      assert_not_symtype("@@foo", :local?)
35      assert_not_symtype("$foo", :local?)
36      assert_not_symtype("foo=", :local?)
37      assert_not_symtype("[foo]", :local?)
38    end
39
40    def test_global
41      assert_symtype("$foo", :global?)
42      assert_symtype("$$", :global?)
43      assert_not_symtype("$()", :global?)
44      assert_not_symtype("$", :global?)
45      assert_not_symtype("foo", :global?)
46      assert_not_symtype("Foo", :global?)
47      assert_not_symtype("@foo", :global?)
48      assert_not_symtype("@@foo", :global?)
49      assert_not_symtype("foo=", :global?)
50      assert_not_symtype("[foo]", :global?)
51    end
52
53    def test_instance
54      assert_symtype("@foo", :instance?)
55      assert_not_symtype("@", :instance?)
56      assert_not_symtype("@1", :instance?)
57      assert_not_symtype("@@", :instance?)
58      assert_not_symtype("foo", :instance?)
59      assert_not_symtype("Foo", :instance?)
60      assert_not_symtype("@@foo", :instance?)
61      assert_not_symtype("$foo", :instance?)
62      assert_not_symtype("foo=", :instance?)
63      assert_not_symtype("[foo]", :instance?)
64    end
65
66    def test_class
67      assert_symtype("@@foo", :class?)
68      assert_not_symtype("@@", :class?)
69      assert_not_symtype("@", :class?)
70      assert_not_symtype("@@1", :class?)
71      assert_not_symtype("foo", :class?)
72      assert_not_symtype("Foo", :class?)
73      assert_not_symtype("@foo", :class?)
74      assert_not_symtype("$foo", :class?)
75      assert_not_symtype("foo=", :class?)
76      assert_not_symtype("[foo]", :class?)
77    end
78
79    def test_attrset
80      assert_symtype("foo=", :attrset?)
81      assert_symtype("Foo=", :attrset?)
82      assert_symtype("@foo=", :attrset?)
83      assert_symtype("@@foo=", :attrset?)
84      assert_symtype("$foo=", :attrset?)
85      assert_symtype("0=", :attrset?)
86      assert_symtype("@=", :attrset?)
87      assert_symtype("@@=", :attrset?)
88      assert_not_symtype("foo", :attrset?)
89      assert_not_symtype("Foo", :attrset?)
90      assert_not_symtype("@foo", :attrset?)
91      assert_not_symtype("@@foo", :attrset?)
92      assert_not_symtype("$foo", :attrset?)
93      assert_not_symtype("[foo]", :attrset?)
94      assert_symtype("[foo]=", :attrset?)
95      assert_equal(:"foo=", Bug::Symbol.attrset("foo"))
96      assert_symtype(Bug::Symbol.attrset("foo"), :attrset?)
97      assert_equal(:"Foo=", Bug::Symbol.attrset("Foo"))
98      assert_symtype(Bug::Symbol.attrset("Foo"), :attrset?)
99      assert_equal(:"@foo=", Bug::Symbol.attrset("@foo"))
100      assert_symtype(Bug::Symbol.attrset("@foo"), :attrset?)
101      assert_equal(:"@@foo=", Bug::Symbol.attrset("@@foo"))
102      assert_symtype(Bug::Symbol.attrset("@@foo"), :attrset?)
103      assert_equal(:"$foo=", Bug::Symbol.attrset("$foo"))
104      assert_symtype(Bug::Symbol.attrset("$foo"), :attrset?)
105      assert_equal(:"[foo]=", Bug::Symbol.attrset("[foo]"))
106      assert_symtype(Bug::Symbol.attrset("[foo]"), :attrset?)
107      assert_equal(:[]=, Bug::Symbol.attrset(:[]))
108      assert_symtype(Bug::Symbol.attrset("foo?="), :attrset?)
109      assert_equal(:"foo?=", Bug::Symbol.attrset(:foo?))
110      assert_symtype(Bug::Symbol.attrset("foo!="), :attrset?)
111      assert_equal(:"foo!=", Bug::Symbol.attrset(:foo!))
112    end
113  end
114end
115