80 lines
1.8 KiB
Ruby
80 lines
1.8 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/neo')
|
|
|
|
class AboutScope < Neo::Koan
|
|
module Jims
|
|
class Dog
|
|
def identify
|
|
:jims_dog
|
|
end
|
|
end
|
|
end
|
|
|
|
module Joes
|
|
class Dog
|
|
def identify
|
|
:joes_dog
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_dog_is_not_available_in_the_current_scope
|
|
assert_raise(___) do
|
|
Dog.new
|
|
end
|
|
end
|
|
|
|
def test_you_can_reference_nested_classes_using_the_scope_operator
|
|
fido = Jims::Dog.new
|
|
rover = Joes::Dog.new
|
|
assert_equal __, fido.identify
|
|
assert_equal __, rover.identify
|
|
|
|
assert_equal __, fido.class != rover.class
|
|
assert_equal __, Jims::Dog != Joes::Dog
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
class String
|
|
end
|
|
|
|
def test_bare_bones_class_names_assume_the_current_scope
|
|
assert_equal __, AboutScope::String == String
|
|
end
|
|
|
|
def test_nested_string_is_not_the_same_as_the_system_string
|
|
assert_equal __, String == "HI".class
|
|
end
|
|
|
|
def test_use_the_prefix_scope_operator_to_force_the_global_scope
|
|
assert_equal __, ::String == "HI".class
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
PI = 3.1416
|
|
|
|
def test_constants_are_defined_with_an_initial_uppercase_letter
|
|
assert_equal __, PI
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
MyString = ::String
|
|
|
|
def test_class_names_are_just_constants
|
|
assert_equal __, MyString == ::String
|
|
assert_equal __, MyString == "HI".class
|
|
end
|
|
|
|
def test_constants_can_be_looked_up_explicitly
|
|
assert_equal __, PI == AboutScope.const_get("PI")
|
|
assert_equal __, MyString == AboutScope.const_get("MyString")
|
|
end
|
|
|
|
def test_you_can_get_a_list_of_constants_for_any_class_or_module
|
|
assert_equal __, Jims.constants
|
|
assert Object.constants.size > _n_
|
|
end
|
|
end
|