157 lines
3.9 KiB
Elixir
157 lines
3.9 KiB
Elixir
Code.require_file "../test_helper", __FILE__
|
|
Code.require_file "../fixtures/default_args", __FILE__
|
|
|
|
module ModuleTest
|
|
mixin ExUnit::Case
|
|
|
|
module A
|
|
def foo
|
|
1 + bar + baz
|
|
end
|
|
|
|
def bar
|
|
1
|
|
end
|
|
|
|
private
|
|
|
|
def baz
|
|
1
|
|
end
|
|
end
|
|
|
|
module B
|
|
mixin ModuleTest::A
|
|
|
|
def bar
|
|
2
|
|
end
|
|
|
|
def baz
|
|
3
|
|
end
|
|
end
|
|
|
|
def simple_default_args_test
|
|
1 = DefaultArgs.arity0
|
|
1 = DefaultArgs.arity0(1)
|
|
2 = DefaultArgs.arity0(2)
|
|
|
|
{ 1, 2 } = DefaultArgs.arity1(1)
|
|
{ 1, 2 } = DefaultArgs.arity1(1, 2)
|
|
{ 1, 1 } = DefaultArgs.arity1(1, 1)
|
|
end
|
|
|
|
def many_default_args_test
|
|
{ 1, 2 } = DefaultArgs.many0
|
|
{ 1, 2 } = DefaultArgs.many0(1)
|
|
{ 2, 2 } = DefaultArgs.many0(2)
|
|
{ 1, 2 } = DefaultArgs.many0(1, 2)
|
|
{ 2, 3 } = DefaultArgs.many0(2, 3)
|
|
|
|
{ 0, 1, 2 } = DefaultArgs.many1(0)
|
|
{ 0, 1, 2 } = DefaultArgs.many1(0, 1)
|
|
{ 0, 2, 2 } = DefaultArgs.many1(0, 2)
|
|
{ 0, 1, 2 } = DefaultArgs.many1(0, 1, 2)
|
|
{ 0, 2, 3 } = DefaultArgs.many1(0, 2, 3)
|
|
end
|
|
|
|
def clash_default_args_test
|
|
[1,2,3] = DefaultArgs.clash([])
|
|
{ 1, 2 } = DefaultArgs.clash()
|
|
{ 2, 2 } = DefaultArgs.clash(2)
|
|
{ 2, 1 } = DefaultArgs.clash(2, 1)
|
|
end
|
|
|
|
def atom_default_args_test
|
|
1 = DefaultArgs.atom('foo)
|
|
2 = DefaultArgs.atom('bar)
|
|
end
|
|
|
|
def operators_signature_test
|
|
operators(2, {'atom, 2})
|
|
end
|
|
|
|
def send_test
|
|
{ 1, 2 } = DefaultArgs.send 'many0
|
|
{ 1, 2 } = DefaultArgs.send 'many0, [1]
|
|
{ 2, 2 } = DefaultArgs.send 'many0, [2]
|
|
{ 1, 2 } = DefaultArgs.send 'many0, [1,2]
|
|
{ 2, 3 } = DefaultArgs.send 'many0, [2,3]
|
|
end
|
|
|
|
def respond_to_test
|
|
true = OrderedDict.respond_to? 'from_list, 1
|
|
true = OrderedDict.respond_to? '__module_name__, 0
|
|
true = OrderedDict.respond_to? 'respond_to?, 2
|
|
false = OrderedDict.respond_to? 'mixin, 1
|
|
false = OrderedDict.respond_to? 'whatever, 0
|
|
false = OrderedDict.respond_to? '__elixir_exported__, 1
|
|
end
|
|
|
|
def mixin_methods_test
|
|
assert_included {'from_list, 1}, OrderedDict.__mixin_methods__
|
|
assert_included {'respond_to?, 2}, OrderedDict.__mixin_methods__
|
|
assert_included {'__module_name__, 0}, OrderedDict.__mixin_methods__
|
|
assert_not_included {'whatever, 0}, OrderedDict.__mixin_methods__
|
|
assert_not_included {'elixir_exported, 1}, OrderedDict.__mixin_methods__
|
|
end
|
|
|
|
def local_methods_test
|
|
assert_included {'from_list, 1}, OrderedDict.__local_methods__
|
|
assert_not_included {'respond_to?, 2}, OrderedDict.__local_methods__
|
|
assert_included {'__module_name__, 0}, OrderedDict.__local_methods__
|
|
assert_not_included {'whatever, 0}, OrderedDict.__local_methods__
|
|
assert_not_included {'elixir_exported, 1}, OrderedDict.__local_methods__
|
|
end
|
|
|
|
def builtin_not_allowed_test
|
|
assert_error {'builtin_not_allowed, { 'set_ivar, 1 } }, do 1.set_ivar('foo, 'bar)
|
|
end
|
|
|
|
module Example
|
|
end
|
|
|
|
def inspect_test
|
|
"ModuleTest::Example" = ModuleTest::Example.inspect
|
|
|
|
with_ivars = #ModuleTest::Example().set_ivar('foo, 'bar).set_ivar('bar, 'baz)
|
|
"<#ModuleTest::Example {'bar: 'baz, 'foo: 'bar}>" = with_ivars.inspect
|
|
end
|
|
|
|
def to_s_test
|
|
"ModuleTest::Example" = ModuleTest::Example.to_s
|
|
with_ivars = #ModuleTest::Example().set_ivar('foo, 'bar).set_ivar('bar, 'baz)
|
|
"<#ModuleTest::Example {'bar: 'baz, 'foo: 'bar}>" = with_ivars.to_s
|
|
end
|
|
|
|
def get_and_set_ivars_test
|
|
dict = { 'a: 1, 'b: 2 }
|
|
~dict = #ModuleTest::Example().set_ivars(dict).get_ivars
|
|
end
|
|
|
|
def update_ivar_test
|
|
[1] = #ModuleTest::Example().set_ivar('foo, []).update_ivar('foo, _.push(1)).get_ivar('foo)
|
|
end
|
|
|
|
def remove_ivar_test
|
|
nil = #ModuleTest::Example().set_ivar('foo, 'bar).remove_ivar('foo).get_ivar('foo)
|
|
end
|
|
|
|
def local_and_remote_calls_test
|
|
3 = ModuleTest::A.foo
|
|
4 = ModuleTest::B.foo
|
|
end
|
|
|
|
def eval_test
|
|
2 = Module.eval("1 + 1")
|
|
3 = Module.eval("foo + 1", 'foo: 2)
|
|
4 = Module.eval(__FILE__, __LINE__, "foo + 1", 'foo: 3)
|
|
end
|
|
|
|
private
|
|
|
|
def operators(1 + 1, 'atom/2)
|
|
end
|
|
end
|