C0 code coverage information

Generated on Sun Oct 26 11:18:06 -0500 2008 with rcov 0.8.1.2


Code reported as executed by Ruby looks like this...
and this: this line is also marked as covered.
Lines considered as run by rcov, but not reported by Ruby, look like this,
and this: these lines were inferred by rcov (using simple heuristics).
Finally, here's a line marked as not executed.
Name Total lines Lines of code Total coverage Code coverage
spec/aquarium/aspects/pointcut_or_composition_spec.rb 143 125
100.0% 
100.0% 
  1 require File.dirname(__FILE__) + '/../spec_helper'
  2 require 'aquarium/spec_example_types'
  3 require 'aquarium/utils'
  4 require 'aquarium/extensions'
  5 require 'aquarium/aspects/pointcut'
  6 require 'aquarium/aspects/pointcut_composition'
  7 
  8 include Aquarium::Utils::HashUtils
  9 include Aquarium::Aspects
 10 
 11 describe Pointcut, "#or" do
 12   
 13   before :all do
 14     @pc1 = Pointcut.new
 15     @pc2 = Pointcut.new :types => /Class.*Public.*Method/, :method_options => [:exclude_ancestor_methods]
 16     @pc3 = Pointcut.new :object => ClassWithProtectedInstanceMethod.new, :method_options => [:protected, :exclude_ancestor_methods]
 17   end
 18    
 19   it "should return a new Pointcut equal to the second, appended, non-empty Pointcut if self is empty (has no join points)." do
 20     @pc1.or(@pc2).should eql(@pc2)
 21     @pc1.or(@pc3).should eql(@pc3)
 22   end
 23    
 24   it "should return a new Pointcut equal to self if the second pointcut is empty." do
 25     @pc2.or(@pc1).should eql(@pc2)
 26     @pc3.or(@pc1).should eql(@pc3)
 27   end
 28 end
 29    
 30 describe Pointcut, "#or (with two non-empty pointcuts)" do
 31   
 32   it "should return a new Pointcut whose join points are the union of the left- and right-hand side Pointcuts for type-based Pointcuts." do
 33     pc4 = Pointcut.new :type => ClassWithPublicInstanceMethod, :method_options => :exclude_ancestor_methods
 34     pc5 = Pointcut.new :type => ClassWithAttribs, :methods => /^attr.*=$/, :method_options => :exclude_ancestor_methods
 35     jp_np1 = JoinPoint.new :type => ClassIncludingModuleWithPublicInstanceMethod, :method => :public_instance_class_including_module_test_method
 36     jp_np2 = JoinPoint.new :type => ModuleWithPublicInstanceMethod, :method => :public_instance_module_test_method
 37     pc4.join_points_not_matched << jp_np1
 38     pc5.join_points_not_matched << jp_np2
 39     pc = pc4.or pc5
 40     jp1 = JoinPoint.new :type => ClassWithAttribs, :method => :attrRW_ClassWithAttribs=
 41     jp2 = JoinPoint.new :type => ClassWithAttribs, :method => :attrW_ClassWithAttribs=
 42     jp3 = JoinPoint.new :type => ClassWithPublicInstanceMethod,  :method => :public_instance_test_method
 43     pc.join_points_matched.should == Set.new([jp1, jp2, jp3])
 44     pc.join_points_not_matched.should == Set.new([jp_np1, jp_np2])
 45   end
 46    
 47   it "should return a new Pointcut whose join points are the union of the left- and right-hand side Pointcuts for object-based Pointcuts." do
 48     cwa = ClassWithAttribs.new
 49     pub = ClassWithPublicInstanceMethod.new
 50     pc4 = Pointcut.new :objects => [cwa], :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 51     pc5 = Pointcut.new :object  => pub, :method_options => :exclude_ancestor_methods
 52     pc = pc4.or pc5
 53     jp1 = JoinPoint.new :object => cwa, :method => :attrRW_ClassWithAttribs=
 54     jp2 = JoinPoint.new :object => cwa, :method => :attrW_ClassWithAttribs=
 55     jp3 = JoinPoint.new :object => pub, :method => :public_instance_test_method
 56     pc.join_points_matched.sort.should == [jp1, jp2, jp3].sort
 57     pc.join_points_not_matched.sort.should == []
 58   end
 59 end
 60  
 61 describe Pointcut, "#or (algebraic properties for type-based pointcuts)" do
 62   before :all do
 63     @pc1 = Pointcut.new :types => "ClassWithAttribs", :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 64     @pc2 = Pointcut.new :types => "ClassWithAttribs", :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 65     @pc3 = Pointcut.new :types => /Class.*Public.*Method/, :method_options => [:public, :exclude_ancestor_methods]
 66   end
 67   
 68   it "should be unitary for type-based Pointcuts." do 
 69     pc = @pc1.or @pc2
 70     pc.should eql(@pc1)
 71     pc.should eql(@pc2)
 72   end
 73    
 74   it "should be commutative for type-based Pointcuts." do 
 75     pc13 = @pc1.or @pc3
 76     pc31 = @pc3.or @pc1
 77     pc13.should eql(pc31)
 78   end
 79    
 80   it "should be associativity for type-based Pointcuts." do 
 81     pc123a = (@pc1.or(@pc2)).or(@pc3)
 82     pc123b = @pc1.or(@pc2.or(@pc3))
 83     pc123a.should eql(pc123b)
 84   end
 85 end
 86    
 87 describe Pointcut, "#or (algebraic properties for object-based pointcuts)" do
 88   before :all do
 89     cwa = ClassWithAttribs.new
 90     pub = ClassWithPublicInstanceMethod.new 
 91     @pc1 = Pointcut.new :object => cwa, :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 92     @pc2 = Pointcut.new :object => cwa, :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 93     @pc3 = Pointcut.new :objects => pub, :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
 94   end
 95   
 96   it "should be unitary for object-based Pointcuts." do 
 97     pc12 = @pc1.or @pc2
 98     pc12.should eql(@pc1)
 99     pc12.should eql(@pc2)
100   end
101    
102   it "should be commutative for object-based Pointcuts." do 
103     pc13 = @pc1.or @pc3
104     pc31 = @pc3.or @pc1
105     pc13.should eql(pc31)
106   end
107    
108   it "should be associativity for object-based Pointcuts." do 
109     pc123a = (@pc1.or(@pc2)).or(@pc3)
110     pc123b = @pc1.or(@pc2.or(@pc3))
111     pc123a.should eql(pc123b)
112   end
113 end
114 
115 
116 describe Pointcut, "#|" do
117   it "should be a synonym for #or." do
118     pc1 = Pointcut.new
119     pc2 = Pointcut.new :types => /Class.*Public.*Method/, :method_options => [:public, :exclude_ancestor_methods]
120     pc3 = Pointcut.new :object => ClassWithPublicInstanceMethod.new, :method_options => [:exclude_ancestor_methods]
121     pc12 = pc1 | pc2
122     pc32 = pc3 | pc2
123     pc23 = pc2 | pc3
124     pc12.should_not equal(pc1)
125     pc12.should_not equal(pc2)
126     pc12.should eql(pc2)
127     pc32.should eql(pc23)
128     pca = Pointcut.new :types => "ClassWithAttribs", :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
129     pcb = Pointcut.new :types => "ClassWithAttribs", :attributes => [/^attr/], :attribute_options => [:readers, :exclude_ancestor_methods]
130     pcc = Pointcut.new :types => /Class.*Method/, :method_options => [:exclude_ancestor_methods]
131     pcabc1 = (pca | pcb) | pcc
132     pcabc2 = pca | (pcb | pcc)
133     pcabc1.should eql(pcabc2)
134     cwa = ClassWithAttribs.new
135     pub = ClassWithPublicInstanceMethod.new 
136     pcd = Pointcut.new :objects => cwa, :attributes => [/^attr/], :attribute_options => [:writers, :exclude_ancestor_methods]
137     pce = Pointcut.new :objects => cwa, :attributes => [/^attr/], :attribute_options => [:readers, :exclude_ancestor_methods]
138     pcf = Pointcut.new :objects => pub, :method_options => [:exclude_ancestor_methods]
139     pcdef1 = (pcd | pce) | pcf
140     pcdef2 = pcd | (pce | pcf)
141     pcdef1.should eql(pcdef2)
142   end
143 end

Generated using the rcov code coverage analysis tool for Ruby version 0.8.1.2.

Valid XHTML 1.0! Valid CSS!