Added v 0.2.3 snapshot.
[twitter4r-core.git] / spec / twitter / meta_spec.rb
blob9e7e51ea6d19986aa78f37f9cbe948ca9dfd50b2
1 require File.join(File.dirname(__FILE__), '..', 'spec_helper')
3 def glob_files(*path_elements)
4   Dir.glob(File.join(*path_elements))
5 end
7 def load_erb_yaml(path, context)
8   ryaml = ERB.new(File.read(path), 0)
9   YAML.load(ryaml.result(context))
10 end
12 module ERBMetaMixin
13   # Needed to make the YAML load work...
14   def project_files
15     glob_files(@root_dir, 'lib', '**/*.rb')
16   end
18   # Needed to make the YAML load work...
19   def spec_files
20     glob_files(@root_dir, 'spec', '**/*.rb')
21   end
22 end
24 describe "Twitter::Meta cache policy" do
25   include ERBMetaMixin
26   before(:each) do
27     @root_dir = project_root_dir
28     @meta = Twitter::Meta.new(@root_dir)
29     @expected_pkg_info = load_erb_yaml(File.join(@root_dir, 'pkg-info.yml'), binding)
30     @expected_project_files = project_files
31     @expected_spec_files = spec_files
32   end
33   
34   it "should store value returned from project_files in @project_files after first glob" do
35     @meta.instance_eval("@project_files").should eql(nil)
36     @meta.project_files
37     @meta.instance_eval("@project_files").should eql(@expected_project_files)
38     @meta.project_files
39     @meta.instance_eval("@project_files").should eql(@expected_project_files)
40   end
41   
42   it "should store value returned from spec_files in @spec_files after first glob" do
43     @meta.instance_eval("@spec_files").should eql(nil)
44     @meta.spec_files
45     @meta.instance_eval("@spec_files").should eql(@expected_spec_files)
46     @meta.spec_files
47     @meta.instance_eval("@spec_files").should eql(@expected_spec_files)
48   end
49 end
51 describe "Twitter::Meta" do
52   include ERBMetaMixin
53   before(:each) do
54     @root_dir = project_root_dir
55     @meta = Twitter::Meta.new(@root_dir)
56     @expected_yaml_hash = load_erb_yaml(File.join(@root_dir, 'pkg-info.yml'), binding)
57     @expected_project_files = project_files
58     @expected_spec_files = spec_files
59   end
60   
61   it "should load and return YAML file into Hash object upon #pkg_info call" do
62     yaml_hash = @meta.pkg_info
63     yaml_hash.should.eql? @expected_yaml_hash
64   end
65   
66   it "should return the embedded hash responding to key 'spec' of #pkg_info call upon #spec_info call" do
67     yaml_hash = @meta.spec_info
68     yaml_hash.should.eql? @expected_yaml_hash['spec']
69   end
70   
71   it "should return list of files matching ROOT_DIR/lib/**/*.rb upon #project_files call" do
72     project_files = @meta.project_files
73     project_files.should.eql? @expected_project_files
74   end
75   
76   it "should return list of files matching ROOT_DIR/spec/**/*.rb upon #spec_files call" do
77     spec_files = @meta.spec_files
78     spec_files.should.eql? @expected_spec_files    
79   end
80   
81   it "should return Gem specification based on YAML file contents and #project_files and #spec_files return values" do
82     spec = @meta.gem_spec
83     expected_spec_hash = @expected_yaml_hash['spec']
84     expected_spec_hash.each do |key, val|
85       unless val.is_a?(Hash)
86         spec.send(key).should.eql? expected_spec_hash[key]
87       end
88     end
89   end
90 end