Change soft-fail to use the config, rather than env
[rbx.git] / mspec / spec / utils / name_map_spec.rb
blobcdb3aef8ce4a554c3c6f2050d2a3388e70518843
1 require File.dirname(__FILE__) + '/../spec_helper'
2 require 'mspec/utils/name_map'
4 module NameMapSpecs
5   class A
6     A = self
8     def self.a; end
9     def a; end
10     def c; end
12     class B
13       def b; end
14     end
15   end
17   class Error
18   end
20   class Fixnum
21     def f; end
22   end
24   def self.n; end
25   def n; end
26 end
28 describe NameMap, "#exception?" do
29   before :each do
30     @map = NameMap.new
31   end
33   it "returns true if the constant is Errno" do
34     @map.exception?("Errno").should == true
35   end
37   it "returns true if the constant is a kind of Exception" do
38     @map.exception?("Errno::EBADF").should == true
39     @map.exception?("LoadError").should == true
40     @map.exception?("SystemExit").should == true
41   end
43   it "returns false if the constant is not a kind of Exception" do
44     @map.exception?("NameMapSpecs::Error").should == false
45     @map.exception?("NameMapSpecs").should == false
46   end
48   it "returns false if the constant does not exist" do
49     @map.exception?("Nonexistent").should == false
50   end
51 end
53 describe NameMap, "#class_or_module" do
54   before :each do
55     @map = NameMap.new true
56   end
58   it "returns the constant specified by the string" do
59     @map.class_or_module("NameMapSpecs").should == NameMapSpecs
60   end
62   it "returns the constant specified by the 'A::B' string" do
63     @map.class_or_module("NameMapSpecs::A").should == NameMapSpecs::A
64   end
66   it "returns nil if the constant is not a class or module" do
67     @map.class_or_module("Float::MAX").should == nil
68   end
70   it "returns nil if the constant is in the set of excluded constants" do
71     excluded = %w[
72       MSpecScript
73       MkSpec
74       DTracer
75       NameMap
76       OptionParser
77       YAML
78     ]
80     excluded.each do |const|
81       @map.class_or_module(const).should == nil
82     end
83   end
85   it "returns nil if the constant does not exist" do
86     @map.class_or_module("Heaven").should == nil
87     @map.class_or_module("Hell").should == nil
88     @map.class_or_module("Bush::Brain").should == nil
89   end
90 end
92 describe NameMap, "#dir_name" do
93   before :each do
94     @map = NameMap.new
95   end
97   it "returns a directory name from the base name and constant" do
98     @map.dir_name("NameMapSpecs", 'spec/core').should == 'spec/core/namemapspecs'
99   end
101   it "returns a directory name from the components in the constants name" do
102     @map.dir_name("NameMapSpecs::A", 'spec').should == 'spec/namemapspecs/a'
103     @map.dir_name("NameMapSpecs::A::B", 'spec').should == 'spec/namemapspecs/a/b'
104   end
106   it "returns a directory name without 'class' for constants like TrueClass" do
107     @map.dir_name("TrueClass", 'spec').should == 'spec/true'
108     @map.dir_name("FalseClass", 'spec').should == 'spec/false'
109   end
111   it "returns 'exception' for the directory name of any Exception subclass" do
112     @map.dir_name("SystemExit", 'spec').should == 'spec/exception'
113     @map.dir_name("Errno::EBADF", 'spec').should == 'spec/exception'
114   end
116   it "returns 'class' for Class" do
117     @map.dir_name("Class", 'spec').should == 'spec/class'
118   end
121 # These specs do not cover all the mappings, but only describe how the
122 # name is derived when the hash item maps to a single value, a hash with
123 # a specific item, or a hash with a :default item.
124 describe NameMap, "#file_name" do
125   before :each do
126     @map = NameMap.new
127   end
129   it "returns the name of the spec file based on the constant and method" do
130     @map.file_name("[]=", "Array").should == "element_set_spec.rb"
131   end
133   it "returns the name of the spec file based on the special entry for the method" do
134     @map.file_name("~", "Regexp").should == "match_spec.rb"
135     @map.file_name("~", "Fixnum").should == "complement_spec.rb"
136   end
138   it "returns the name of the spec file based on the default entry for the method" do
139     @map.file_name("<<", "NameMapSpecs").should == "append_spec.rb"
140   end
142   it "uses the last component of the constant to look up the method name" do
143     @map.file_name("^", "NameMapSpecs::Fixnum").should == "bit_xor_spec.rb"
144   end
147 describe NameMap, "#namespace" do
148   before :each do
149     @map = NameMap.new
150   end
152   it "prepends the module to the constant name" do
153     @map.namespace("SubModule", Fixnum).should == "SubModule::Fixnum"
154   end
156   it "does not prepend Object, Class, or Module to the constant name" do
157     @map.namespace("Object", Fixnum).should == "Fixnum"
158     @map.namespace("Module", Integer).should == "Integer"
159     @map.namespace("Class", Float).should == "Float"
160   end
163 describe NameMap, "#map" do
164   before :each do
165     @map = NameMap.new
166   end
168   it "flattens an object hierarchy into a single Hash" do
169     @map.map({}, [NameMapSpecs]).should == {
170       "NameMapSpecs."         => ["n"],
171       "NameMapSpecs#"         => ["n"],
172       "NameMapSpecs::A."      => ["a"],
173       "NameMapSpecs::A#"      => ["a", "c"],
174       "NameMapSpecs::A::B#"   => ["b"],
175       "NameMapSpecs::Fixnum#" => ["f"]
176     }
177   end