diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index 11ddc3f7c..51e49849f 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -1,20 +1,28 @@ -# AMF Controller is a semi-standalone API for Flash clients, particularly Potlatch. -# All interaction between Potlatch (as a .SWF application) and the +# amf_controller is a semi-standalone API for Flash clients, particularly +# Potlatch. All interaction between Potlatch (as a .SWF application) and the # OSM database takes place using this controller. Messages are # encoded in the Actionscript Message Format (AMF). # -# See Also Potlatch::Potlatch and Potlatch::AMF +# Helper functions are in /lib/potlatch. # -# Public domain. -# editions Systeme D / Richard Fairhurst 2004-2008 +# Author:: editions Systeme D / Richard Fairhurst 2004-2008 +# Licence:: public domain. # -# All in/out parameters are floats unless explicitly stated. +# == General structure +# +# Apart from the talk method (which distributes the requests from the +# AMF message), each method generally takes arguments in the order they were +# sent by the Potlatch SWF. Do not assume typing has been preserved. Methods +# all return an array to the SWF. # -# to trap errors (getway_old,putway,putpoi,deleteway only): -# return(-1,"message") <-- just puts up a dialogue -# return(-2,"message") <-- also asks the user to e-mail me -# to log: -# RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}") +# == Debugging +# +# Any method that returns a status code (0 for ok) can also send: +# return(-1,"message") <-- just puts up a dialogue +# return(-2,"message") <-- also asks the user to e-mail me +# +# To write to the Rails log, use RAILS_DEFAULT_LOGGER.info("message"). + class AmfController < ApplicationController require 'stringio' @@ -23,312 +31,254 @@ class AmfController < ApplicationController session :off before_filter :check_write_availability - # Main AMF handler. Tha talk method takes in AMF, figures out what to do and dispatched to the appropriate private method + # Main AMF handler: processes the raw AMF string (using AMF library) and + # calls each action (private method) accordingly. + def talk - req=StringIO.new(request.raw_post+0.chr) # Get POST data as request - # (cf http://www.ruby-forum.com/topic/122163) - req.read(2) # Skip version indicator and client ID - results={} # Results of each body - renumberednodes={} # Shared across repeated putways - renumberedways={} # Shared across repeated putways + req=StringIO.new(request.raw_post+0.chr) # Get POST data as request + # (cf http://www.ruby-forum.com/topic/122163) + req.read(2) # Skip version indicator and client ID + results={} # Results of each body + renumberednodes={} # Shared across repeated putways + renumberedways={} # Shared across repeated putways - # ------------- - # Parse request + # Parse request - headers=AMF.getint(req) # Read number of headers + headers=AMF.getint(req) # Read number of headers - headers.times do # Read each header - name=AMF.getstring(req) # | - req.getc # | skip boolean - value=AMF.getvalue(req) # | - header["name"]=value # | - end + headers.times do # Read each header + name=AMF.getstring(req) # | + req.getc # | skip boolean + value=AMF.getvalue(req) # | + header["name"]=value # | + end - bodies=AMF.getint(req) # Read number of bodies - bodies.times do # Read each body - message=AMF.getstring(req) # | get message name - index=AMF.getstring(req) # | get index in response sequence - bytes=AMF.getlong(req) # | get total size in bytes - args=AMF.getvalue(req) # | get response (probably an array) + bodies=AMF.getint(req) # Read number of bodies + bodies.times do # Read each body + message=AMF.getstring(req) # | get message name + index=AMF.getstring(req) # | get index in response sequence + bytes=AMF.getlong(req) # | get total size in bytes + args=AMF.getvalue(req) # | get response (probably an array) - case message - when 'getpresets'; results[index]=AMF.putdata(index,getpresets) - when 'whichways'; results[index]=AMF.putdata(index,whichways(args)) - when 'whichways_deleted'; results[index]=AMF.putdata(index,whichways_deleted(args)) - when 'getway'; results[index]=AMF.putdata(index,getway(args)) - when 'getrelation'; results[index]=AMF.putdata(index,getrelation(args)) - when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args)) - when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args)) - when 'putway'; r=putway(args,renumberednodes) - renumberednodes=r[3] - if r[1] != r[2] - renumberedways[r[1]] = r[2] - end - results[index]=AMF.putdata(index,r) - when 'putrelation'; results[index]=AMF.putdata(index,putrelation(args, renumberednodes, renumberedways)) - when 'deleteway'; results[index]=AMF.putdata(index,deleteway(args)) - when 'putpoi'; results[index]=AMF.putdata(index,putpoi(args)) - when 'getpoi'; results[index]=AMF.putdata(index,getpoi(args)) - end - end + case message + when 'getpresets'; results[index]=AMF.putdata(index,getpresets()) + when 'whichways'; results[index]=AMF.putdata(index,whichways(*args)) + when 'whichways_deleted'; results[index]=AMF.putdata(index,whichways_deleted(*args)) + when 'getway'; results[index]=AMF.putdata(index,getway(args[0].to_i)) + when 'getrelation'; results[index]=AMF.putdata(index,getrelation(args[0].to_i)) + when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1].to_i)) + when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args[0].to_i)) + when 'getnode_history'; results[index]=AMF.putdata(index,getnode_history(args[0].to_i)) + when 'putway'; r=putway(renumberednodes,*args) + renumberednodes=r[3] + if r[1] != r[2] + renumberedways[r[1]] = r[2] + end + results[index]=AMF.putdata(index,r) + when 'putrelation'; results[index]=AMF.putdata(index,putrelation(renumberednodes, renumberedways, *args)) + when 'findrelations'; results[index]=AMF.putdata(index,findrelations(*args)) + when 'deleteway'; results[index]=AMF.putdata(index,deleteway(args[0],args[1].to_i)) + when 'putpoi'; results[index]=AMF.putdata(index,putpoi(*args)) + when 'getpoi'; results[index]=AMF.putdata(index,getpoi(*args)) + end + end - # ------------------ - # Write out response + # Write out response - RAILS_DEFAULT_LOGGER.info(" Response: start") - a,b=results.length.divmod(256) - render :content_type => "application/x-amf", :text => proc { |response, output| - output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr - results.each do |k,v| - output.write(v) - end - } - RAILS_DEFAULT_LOGGER.info(" Response: end") + a,b=results.length.divmod(256) + render :content_type => "application/x-amf", :text => proc { |response, output| + output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr + results.each do |k,v| + output.write(v) + end + } end private - # Return presets (default tags and crap) to potlatch. - # Uses POTLATCH_PRESETS global, set up in OSM::Potlatch - def getpresets #:doc: - return POTLATCH_PRESETS + # Return presets (default tags, localisation etc.): + # uses POTLATCH_PRESETS global, set up in OSM::Potlatch. + + def getpresets() #:doc: + return POTLATCH_PRESETS end - # ----- whichways - # Find all the way ids and nodes (including tags and projected lat/lng) which aren't part of those ways in an are - # - # The argument is an array containing the following, in order: - # 0. minimum longitude - # 1. minimum latitude - # 2. maximum longitude - # 3. maximum latitude - # 4. baselong, 5. basey, 6. masterscale as above - def whichways(args) #:doc: - xmin = args[0].to_f-0.01 - ymin = args[1].to_f-0.01 - xmax = args[2].to_f+0.01 - ymax = args[3].to_f+0.01 - baselong = args[4] - basey = args[5] - masterscale = args[6] + # Find all the ways, POI nodes (i.e. not part of ways), and relations + # in a given bounding box. Nodes are returned in full; ways and relations + # are IDs only. - RAILS_DEFAULT_LOGGER.info(" Message: whichways, bbox=#{xmin},#{ymin},#{xmax},#{ymax}") + def whichways(xmin, ymin, xmax, ymax) #:doc: + xmin -= 0.01; ymin -= 0.01 + xmax += 0.01; ymax += 0.01 - # find the way ids in an area - nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => "current_nodes.visible = 1", :include => :ways) - way_ids = nodes_in_area.collect { |node| node.way_ids }.flatten.uniq + if POTLATCH_USE_SQL then + way_ids = sql_find_way_ids_in_area(xmin, ymin, xmax, ymax) + points = sql_find_pois_in_area(xmin, ymin, xmax, ymax) + relation_ids = sql_find_relations_in_area_and_ways(xmin, ymin, xmax, ymax, way_ids) + else + # find the way ids in an area + nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => "current_nodes.visible = 1", :include => :ways) + way_ids = nodes_in_area.collect { |node| node.way_ids }.flatten.uniq - # find the node ids in an area that aren't part of ways - nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? } - points = nodes_not_used_in_area.collect { |n| [n.id, n.lon_potlatch(baselong,masterscale), n.lat_potlatch(basey,masterscale), n.tags_as_hash] } + # find the node ids in an area that aren't part of ways + nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? } + points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags_as_hash] } - # find the relations used by those nodes and ways - relations = nodes_in_area.collect { |node| node.containing_relations.visible }.flatten + - way_ids.collect { |id| Way.find(id).containing_relations.visible }.flatten - relation_ids = relations.collect { |relation| relation.id }.uniq + # find the relations used by those nodes and ways + relations = Relation.find_for_nodes(nodes_in_area.collect { |n| n.id }, :conditions => "visible = 1") + + Relation.find_for_ways(way_ids, :conditions => "visible = 1") + relation_ids = relations.collect { |relation| relation.id }.uniq + end - [way_ids,points,relation_ids] + [way_ids, points, relation_ids] end - # ----- whichways_deleted - # return array of deleted ways in current bounding box - # in: as whichways - # does: finds all deleted ways with a deleted node in bounding box - # out: [0] array of way ids - def whichways_deleted(args) #:doc: - xmin = args[0].to_f-0.01 - ymin = args[1].to_f-0.01 - xmax = args[2].to_f+0.01 - ymax = args[3].to_f+0.01 - baselong = args[4] - basey = args[5] - masterscale = args[6] + # Find deleted ways in current bounding box (similar to whichways, but ways + # with a deleted node only - not POIs or relations). - sql=<<-EOF - SELECT DISTINCT current_ways.id - FROM current_nodes,way_nodes,current_ways - WHERE #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")} - AND way_nodes.node_id=current_nodes.id - AND way_nodes.id=current_ways.id - AND current_nodes.visible=0 - AND current_ways.visible=0 - EOF - waylist = ActiveRecord::Base.connection.select_all(sql) - ways = waylist.collect {|a| a['id'].to_i } - [ways] + def whichways_deleted(xmin, ymin, xmax, ymax) #:doc: + xmin -= 0.01; ymin -= 0.01 + xmax += 0.01; ymax += 0.01 + + nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax, :conditions => "current_nodes.visible = 0 AND current_ways.visible = 0", :include => :ways_via_history) + way_ids = nodes_in_area.collect { |node| node.ways_via_history_ids }.flatten.uniq + + [way_ids] end - # ----- getway - # Get a way with all of it's nodes and tags - # The input is an array with the following components, in order: - # 0. wayid - the ID of the way to get - # 1. baselong - origin of SWF map (longitude) - # 2. basey - origin of SWF map (latitude) - # 3. masterscale - SWF map scale + # Get a way including nodes and tags. + # Returns 0 (success), a Potlatch-style array of points, and a hash of tags. + + def getway(wayid) #:doc: + if POTLATCH_USE_SQL then + points = sql_get_nodes_in_way(wayid) + tags = sql_get_tags_in_way(wayid) + else + # Ideally we would do ":include => :nodes" here but if we do that + # then rails only seems to return the first copy of a node when a + # way includes a node more than once + way = Way.find(wayid) + points = way.nodes.collect do |node| + [node.lon, node.lat, node.id, nil, node.tags_as_hash] + end + tags = way.tags + end + + [wayid, points, tags] + end + + # Get an old version of a way, and all constituent nodes. # - # The output is an array which contains all the nodes (with projected - # latitude and longitude) and tags for a way (and all the nodes tags). - # It also has the way's unprojected (WGS84) bbox. - # - # FIXME: The server really shouldn't be figuring out a ways bounding box and doing projection for potlatch - # FIXME: the argument splitting should be done in the 'talk' method, not here - def getway(args) #:doc: - wayid,baselong,basey,masterscale = args - wayid = wayid.to_i + # For undelete (version=0), always uses the most recent version of each node, + # even if it's moved. For revert (version=1+), uses the node in existence + # at the time, generating a new id if it's still visible and has been moved/ + # retagged. - RAILS_DEFAULT_LOGGER.info(" Message: getway, id=#{wayid}") + def getway_old(id, version) #:doc: + if version < 0 + old_way = OldWay.find(:first, :conditions => ['visible = 1 AND id = ?', id], :order => 'version DESC') + points = old_way.get_nodes_undelete + else + old_way = OldWay.find(:first, :conditions => ['id = ? AND version = ?', id, version]) + points = old_way.get_nodes_revert + end - # Ideally we would do ":include => :nodes" here but if we do that - # then rails only seems to return the first copy of a node when a - # way includes a node more than once - way = Way.find(wayid) + old_way.tags['history'] = "Retrieved from v#{old_way.version}" - long_array = [] - lat_array = [] - points = [] + [0, id, points, old_way.tags, old_way.version] + end + + # Find history of a way. Returns 'way', id, and + # an array of previous versions. - way.nodes.each do |node| - projected_longitude = node.lon_potlatch(baselong,masterscale) # do projection for potlatch - projected_latitude = node.lat_potlatch(basey,masterscale) - id = node.id - tags_hash = node.tags_as_hash + def getway_history(wayid) #:doc: + history = Way.find(wayid).old_ways.reverse.collect do |old_way| + user = old_way.user.data_public? ? old_way.user.display_name : 'anonymous' + uid = old_way.user.data_public? ? old_way.user.id : 0 + [old_way.version, old_way.timestamp.strftime("%d %b %Y, %H:%M"), old_way.visible ? 1 : 0, user, uid] + end - points << [projected_longitude, projected_latitude, id, nil, tags_hash] - long_array << projected_longitude - lat_array << projected_latitude - end - - [wayid,points,way.tags,long_array.min,long_array.max,lat_array.min,lat_array.max] + ['way',wayid,history] end - # ----- getway_old - # returns old version of way - # in: [0] way id, - # [1] way version to get (or -1 for "last deleted version") - # [2] baselong, [3] basey, [4] masterscale - # does: gets old version of way and all constituent nodes - # for undelete, always uses the most recent version of each node - # (even if it's moved) - # for revert, uses the historic version of each node, but if that node is - # still visible and has been changed since, generates a new node id - # out: [0] 0 (code for success), [1] SWF object name, - # [2] array of points (as getway _except_ [3] is node.visible?, 0 or 1), - # [4] xmin, [5] xmax, [6] ymin, [7] ymax (unprojected bbox), - # [8] way version - def getway_old(args) #:doc: - RAILS_DEFAULT_LOGGER.info(" Message: getway_old (server is #{SERVER_URL})") - # if SERVER_URL=="www.openstreetmap.org" then return -1,"Revert is not currently enabled on the OpenStreetMap server." end + # Find history of a node. Returns 'node', id, and + # an array of previous versions. - wayid,version,baselong,basey,masterscale=args - wayid = wayid.to_i - version = version.to_i - xmin = ymin = 999999 - xmax = ymax = -999999 - points=[] - if version<0 - historic=false - version=getlastversion(wayid,version) - else - historic=true - end - readwayquery_old(wayid,version,historic).each { |row| - points<<[long2coord(row['longitude'].to_f,baselong,masterscale),lat2coord(row['latitude'].to_f,basey,masterscale),row['id'].to_i,row['visible'].to_i,tag2array(row['tags'].to_s)] - xmin=[xmin,row['longitude'].to_f].min - xmax=[xmax,row['longitude'].to_f].max - ymin=[ymin,row['latitude' ].to_f].min - ymax=[ymax,row['latitude' ].to_f].max - } + def getnode_history(nodeid) #:doc: + history = Node.find(nodeid).old_nodes.reverse.collect do |old_node| + user = old_node.user.data_public? ? old_node.user.display_name : 'anonymous' + uid = old_node.user.data_public? ? old_node.user.id : 0 + [old_node.timestamp.to_i, old_node.timestamp.strftime("%d %b %Y, %H:%M"), old_node.visible ? 1 : 0, user, uid] + end - # get tags from this version - attributes={} - attrlist=ActiveRecord::Base.connection.select_all "SELECT k,v FROM way_tags WHERE id=#{wayid} AND version=#{version}" - attrlist.each {|a| attributes[a['k'].gsub(':','|')]=a['v'] } - attributes['history']="Retrieved from v"+version.to_s - - [0,wayid,points,attributes,xmin,xmax,ymin,ymax,version] + ['node',nodeid,history] end - # ----- getway_history - # find history of a way - # in: [0] way id - # does: finds history of a way - # out: [0] array of previous versions (where each is - # [0] version, [1] db timestamp (string), - # [2] visible 0 or 1, - # [3] username or 'anonymous' (string)) - def getway_history(args) #:doc: - wayid=args[0] - history=[] - sql=<<-EOF - SELECT version,timestamp,visible,display_name,data_public - FROM ways,users - WHERE ways.id=#{wayid} - AND ways.user_id=users.id - AND ways.visible=1 - ORDER BY version DESC - EOF - histlist=ActiveRecord::Base.connection.select_all(sql) - histlist.each { |row| - if row['data_public'].to_i==1 then user=row['display_name'] else user='anonymous' end - history<<[row['version'],row['timestamp'],row['visible'],user] - } - [history] + # Get a relation with all tags and members. + # Returns: + # 0. relation id, + # 1. hash of tags, + # 2. list of members. + + def getrelation(relid) #:doc: + rel = Relation.find(relid) + + [relid, rel.tags, rel.members] end - # ----- getrelation - # Get a relation with all of it's tags, and member IDs - # The input is an array with the following components, in order: - # 0. relid - the ID of the relation to get - # - # The output is an array which contains: - # [0] relation id, [1] hash of tags, [2] list of members - def getrelation(args) #:doc: - relid = args[0] - relid = relid.to_i - - RAILS_DEFAULT_LOGGER.info(" Message: getrel, id=#{relid}") - - rel = Relation.find(relid) - - [relid,rel.tags,rel.members]#nodes,ways] + # Find relations with specified name/id. + # Returns array of relations, each in same form as getrelation. + + def findrelations(searchterm) + rels = [] + if searchterm.to_i>0 then + rel = Relation.find(searchterm.to_i) + if rel and rel.visible then + rels.push([rel.id, rel.tags, rel.members]) + end + else + RelationTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", searchterm] ).each do |t| + if t.relation.visible then + rels.push([t.relation.id, t.relation.tags, t.relation.members]) + end + end + end + rels end - # ----- getrelation - # save relation to the database - # in: [0] user token (string), - # [1] original relation id (may be negative), - # [2] hash of tags, [3] list of members, - # [4] visible - # out: [0] 0 (success), [1] original relation id (unchanged), - # [2] new relation id - def putrelation(args, renumberednodes, renumberedways) #:doc: - usertoken,relid,tags,members,visible=args - uid=getuserid(usertoken) - if !uid then return -1,"You are not logged in, so the point could not be saved." end + # Save a relation. + # Returns + # 0. 0 (success), + # 1. original relation id (unchanged), + # 2. new relation id. - relid = relid.to_i + def putrelation(renumberednodes, renumberedways, usertoken, relid, tags, members, visible) #:doc: + uid = getuserid(usertoken) + if !uid then return -1,"You are not logged in, so the relation could not be saved." end + + relid = relid.to_i visible = visible.to_i # create a new relation, or find the existing one - if relid <= 0 - rel = Relation.new - else - rel = Relation.find(relid) - end + if relid <= 0 + rel = Relation.new + else + rel = Relation.find(relid) + end - # check the members are all positive, and correctly type - typedmembers = [] - members.each do |m| - mid = m[1].to_i - if mid < 0 - mid = renumberednodes[mid] if m[0] == 'node' - mid = renumberedways[mid] if m[0] == 'way' - if mid < 0 - return -2, "Negative ID unresolved" - end - end - typedmembers << [m[0], mid, m[2]] - end + # check the members are all positive, and correctly type + typedmembers = [] + members.each do |m| + mid = m[1].to_i + if mid < 0 + mid = renumberednodes[mid] if m[0] == 'node' + mid = renumberedways[mid] if m[0] == 'way' + if mid < 0 + return -2, "Negative ID unresolved" + end + end + typedmembers << [m[0], mid, m[2]] + end # assign new contents rel.members = typedmembers @@ -336,491 +286,318 @@ class AmfController < ApplicationController rel.visible = visible rel.user_id = uid - # check it then save it - # BUG: the following is commented out because it always fails on my - # install. I think it's a Rails bug. + # check it then save it + # BUG: the following is commented out because it always fails on my + # install. I think it's a Rails bug. - #if !rel.preconditions_ok? - # return -2, "Relation preconditions failed" - #else - rel.save_with_history! - #end + #if !rel.preconditions_ok? + # return -2, "Relation preconditions failed" + #else + rel.save_with_history! + #end - [0,relid,rel.id] + [0, relid, rel.id] end - # ----- putway - # saves a way to the database - # in: [0] user token (string), - # [1] original way id (may be negative), - # [2] array of points (as getway/getway_old), - # [3] hash of way tags, - # [4] original way version (0 if not a reverted/undeleted way), - # [5] baselong, [6] basey, [7] masterscale - # does: saves way to the database - # all constituent nodes are created/updated as necessary - # (or deleted if they were in the old version and are otherwise unused) - # out: [0] 0 (code for success), [1] original way id (unchanged), - # [2] new way id, [3] hash of renumbered nodes (old id=>new id), - # [4] xmin, [5] xmax, [6] ymin, [7] ymax (unprojected bbox) - def putway(args,renumberednodes) #:doc: - RAILS_DEFAULT_LOGGER.info(" putway started") - usertoken,originalway,points,attributes,oldversion,baselong,basey,masterscale=args - uid=getuserid(usertoken) - if !uid then return -1,"You are not logged in, so the way could not be saved." end + # Save a way to the database, including all nodes. Any nodes in the previous + # version and no longer used are deleted. + # + # Returns: + # 0. '0' (code for success), + # 1. original way id (unchanged), + # 2. new way id, + # 3. hash of renumbered nodes (old id=>new id) - RAILS_DEFAULT_LOGGER.info(" putway authenticated happily") - db_uqn='unin'+(rand*100).to_i.to_s+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # temp uniquenodes table name, typically 51 chars - db_now='@now'+(rand*100).to_i.to_s+uid.to_s+originalway.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars - ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()") - originalway=originalway.to_i - oldversion=oldversion.to_i + def putway(renumberednodes, usertoken, originalway, points, attributes) #:doc: - RAILS_DEFAULT_LOGGER.info(" Message: putway, id=#{originalway}") + # -- Initialise and carry out checks + + uid = getuserid(usertoken) + if !uid then return -1,"You are not logged in, so the way could not be saved." end - # -- Check for null IDs, short ways or lats=90 + originalway = originalway.to_i - points.each do |a| - if a[2]==0 or a[2].nil? then return -2,"Server error - node with id 0 found in way #{originalway}." end - if coord2lat(a[1],masterscale,basey)==90 then return -2,"Server error - node with lat -90 found in way #{originalway}." end - end - - if points.length<2 then return -2,"Server error - way is only #{points.length} points long." end + points.each do |a| + if a[2] == 0 or a[2].nil? then return -2,"Server error - node with id 0 found in way #{originalway}." end + if a[1] == 90 then return -2,"Server error - node with lat -90 found in way #{originalway}." end + end - # -- 3. read original way into memory + if points.length < 2 then return -2,"Server error - way is only #{points.length} points long." end - xc={}; yc={}; tagc={}; vc={} - if originalway>0 - way=originalway - if oldversion==0 then r=readwayquery(way,false) - else r=readwayquery_old(way,oldversion,true) end - r.each { |row| - id=row['id'].to_i - if (id>0) then - xc[id]=row['longitude'].to_f - yc[id]=row['latitude' ].to_f - tagc[id]=row['tags'] - vc[id]=row['visible'].to_i - end - } - ActiveRecord::Base.connection.update("UPDATE current_ways SET timestamp=#{db_now},user_id=#{uid},visible=1 WHERE id=#{way}") - else - way=ActiveRecord::Base.connection.insert("INSERT INTO current_ways (user_id,timestamp,visible) VALUES (#{uid},#{db_now},1)") - end + # -- Get unique nodes - # -- 4. get version by inserting new row into ways + if originalway < 0 + way = Way.new + uniques = [] + else + way = Way.find(originalway) + uniques = way.unshared_node_ids + end - version=ActiveRecord::Base.connection.insert("INSERT INTO ways (id,user_id,timestamp,visible) VALUES (#{way},#{uid},#{db_now},1)") + # -- Compare nodes and save changes to any that have changed - # -- 5. compare nodes and update xmin,xmax,ymin,ymax + nodes = [] - xmin=ymin= 999999 - xmax=ymax=-999999 - insertsql='' - nodelist=[] + points.each do |n| + lon = n[0].to_f + lat = n[1].to_f + id = n[2].to_i + savenode = false - points.each_index do |i| - xs=coord2long(points[i][0],masterscale,baselong) - ys=coord2lat(points[i][1],masterscale,basey) - xmin=[xs,xmin].min; xmax=[xs,xmax].max - ymin=[ys,ymin].min; ymax=[ys,ymax].max - node=points[i][2].to_i - tagstr=array2tag(points[i][4]) - tagsql="'"+sqlescape(tagstr)+"'" - lat=(ys * 10000000).round - long=(xs * 10000000).round - tile=QuadTile.tile_for_point(ys, xs) - - # compare node - if node<0 - # new node - create - if renumberednodes[node.to_s].nil? - newnode=ActiveRecord::Base.connection.insert("INSERT INTO current_nodes ( latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES ( #{lat},#{long},#{db_now},#{uid},1,#{tagsql},#{tile})") - ActiveRecord::Base.connection.insert("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{newnode},#{lat},#{long},#{db_now},#{uid},1,#{tagsql},#{tile})") - points[i][2]=newnode - nodelist.push(newnode) - renumberednodes[node.to_s]=newnode.to_s - else - points[i][2]=renumberednodes[node.to_s].to_i - end - - elsif xc.has_key?(node) - nodelist.push(node) - # old node from original way - update - if ((xs/0.0000001).round!=(xc[node]/0.0000001).round or (ys/0.0000001).round!=(yc[node]/0.0000001).round or tagstr!=tagc[node] or vc[node]==0) - ActiveRecord::Base.connection.insert("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{node},#{lat},#{long},#{db_now},#{uid},1,#{tagsql},#{tile})") - ActiveRecord::Base.connection.update("UPDATE current_nodes SET latitude=#{lat},longitude=#{long},timestamp=#{db_now},user_id=#{uid},tags=#{tagsql},visible=1,tile=#{tile} WHERE id=#{node}") - end - else - # old node, created in another way and now added to this way - end - end - - # -- 6a. delete any nodes not in modified way - - createuniquenodes(way,db_uqn,nodelist) # nodes which appear in this way but no other - - sql=<<-EOF - INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tile) - SELECT DISTINCT cn.id,cn.latitude,cn.longitude,#{db_now},#{uid},0,cn.tile - FROM current_nodes AS cn,#{db_uqn} - WHERE cn.id=node_id - EOF - ActiveRecord::Base.connection.insert(sql) - - sql=<<-EOF - UPDATE current_nodes AS cn, #{db_uqn} - SET cn.timestamp=#{db_now},cn.visible=0,cn.user_id=#{uid} - WHERE cn.id=node_id - EOF - ActiveRecord::Base.connection.update(sql) - - deleteuniquenoderelations(db_uqn,uid,db_now) - ActiveRecord::Base.connection.execute("DROP TEMPORARY TABLE #{db_uqn}") - - # 6b. insert new version of route into way_nodes - - insertsql ='' - currentsql='' - sequence =1 - points.each do |p| - if insertsql !='' then insertsql +=',' end - if currentsql!='' then currentsql+=',' end - insertsql +="(#{way},#{p[2]},#{sequence},#{version})" - currentsql+="(#{way},#{p[2]},#{sequence})" - sequence +=1 - end - - ActiveRecord::Base.connection.execute("DELETE FROM current_way_nodes WHERE id=#{way}"); - ActiveRecord::Base.connection.insert( "INSERT INTO way_nodes (id,node_id,sequence_id,version) VALUES #{insertsql}"); - ActiveRecord::Base.connection.insert( "INSERT INTO current_way_nodes (id,node_id,sequence_id ) VALUES #{currentsql}"); - - # -- 7. insert new way tags - - insertsql ='' - currentsql='' - attributes.each do |k,v| - if v=='' or v.nil? then next end - if v[0,6]=='(type ' then next end - if insertsql !='' then insertsql +=',' end - if currentsql!='' then currentsql+=',' end - insertsql +="(#{way},'"+sqlescape(k.gsub('|',':'))+"','"+sqlescape(v)+"',#{version})" - currentsql+="(#{way},'"+sqlescape(k.gsub('|',':'))+"','"+sqlescape(v)+"')" - end - - ActiveRecord::Base.connection.execute("DELETE FROM current_way_tags WHERE id=#{way}") - if (insertsql !='') then ActiveRecord::Base.connection.insert("INSERT INTO way_tags (id,k,v,version) VALUES #{insertsql}" ) end - if (currentsql!='') then ActiveRecord::Base.connection.insert("INSERT INTO current_way_tags (id,k,v) VALUES #{currentsql}") end - - [0,originalway,way,renumberednodes,xmin,xmax,ymin,ymax] - end - - # ----- putpoi - # save POI to the database - # in: [0] user token (string), - # [1] original node id (may be negative), - # [2] projected longitude, [3] projected latitude, - # [4] hash of tags, [5] visible (0 to delete, 1 otherwise), - # [6] baselong, [7] basey, [8] masterscale - # does: saves POI node to the database - # refuses save if the node has since become part of a way - # out: [0] 0 (success), [1] original node id (unchanged), - # [2] new node id - def putpoi(args) #:doc: - usertoken,id,x,y,tags,visible,baselong,basey,masterscale=args - uid=getuserid(usertoken) - if !uid then return -1,"You are not logged in, so the point could not be saved." end - - db_now='@now'+(rand*100).to_i.to_s+uid.to_s+id.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars - ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()") - - id=id.to_i - visible=visible.to_i - if visible==0 then - # if deleting, check node hasn't become part of a way - inway=ActiveRecord::Base.connection.select_one("SELECT cw.id FROM current_ways cw,current_way_nodes cwn WHERE cw.id=cwn.id AND cw.visible=1 AND cwn.node_id=#{id} LIMIT 1") - unless inway.nil? then return -1,"The point has since become part of a way, so you cannot save it as a POI." end - deleteitemrelations(id,'node',uid,db_now) - end - - x=coord2long(x.to_f,masterscale,baselong) - y=coord2lat(y.to_f,masterscale,basey) - tagsql="'"+sqlescape(array2tag(tags))+"'" - lat=(y * 10000000).round - long=(x * 10000000).round - tile=QuadTile.tile_for_point(y, x) - - if (id>0) then - ActiveRecord::Base.connection.insert("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{id},#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})"); - ActiveRecord::Base.connection.update("UPDATE current_nodes SET latitude=#{lat},longitude=#{long},timestamp=#{db_now},user_id=#{uid},visible=#{visible},tags=#{tagsql},tile=#{tile} WHERE id=#{id}"); - newid=id - else - newid=ActiveRecord::Base.connection.insert("INSERT INTO current_nodes (latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})"); - ActiveRecord::Base.connection.update("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags,tile) VALUES (#{newid},#{lat},#{long},#{db_now},#{uid},#{visible},#{tagsql},#{tile})"); - end - [0,id,newid] - end - - # ----- getpoi - # read POI from database - # (only called on revert: POIs are usually read by whichways) - # in: [0] node id, [1] baselong, [2] basey, [3] masterscale - # does: reads POI - # out: [0] id (unchanged), [1] projected long, [2] projected lat, - # [3] hash of tags - def getpoi(args) #:doc: - id,baselong,basey,masterscale = args - - n = Node.find(id.to_i) - if n - return [n.id, n.lon_potlatch(baselong,masterscale), n.lat_potlatch(basey,masterscale), n.tags_as_hash] - else - return [nil,nil,nil,''] - end - end - - # ----- deleteway - # delete way and constituent nodes from database - # in: [0] user token (string), [1] way id - # does: deletes way from db and any constituent nodes not used elsewhere - # also removes ways/nodes from any relations they're in - # out: [0] 0 (success), [1] way id (unchanged) - - def deleteway(args) #:doc: - usertoken,way_id=args - RAILS_DEFAULT_LOGGER.info(" Message: deleteway, id=#{way_id}") - uid=getuserid(usertoken) - if !uid then return -1,"You are not logged in, so the way could not be deleted." end - - # FIXME - # the next bit removes the way from any relations - # the delete_with_relations_and_nodes_and_history method should do this, - # but at present it just throws a 'precondition failed' - way=way.to_i - db_now='@now'+(rand*100).to_i.to_s+uid.to_s+way.abs.to_s+Time.new.to_i.to_s - db_uqn='unin'+(rand*100).to_i.to_s+uid.to_s+way.abs.to_s+Time.new.to_i.to_s - ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()") - createuniquenodes(way,db_uqn,[]) - deleteuniquenoderelations(db_uqn,uid,db_now) - deleteitemrelations(way_id,'way',uid,db_now) - ActiveRecord::Base.connection.execute("DROP TEMPORARY TABLE #{db_uqn}") - # end of FIXME - - # now delete the way - user = User.find(uid) - way = Way.find(way_id) - way.delete_with_relations_and_nodes_and_history(user) - return [0,way_id] - end - - - def readwayquery(id,insistonvisible) #:doc: - sql=<<-EOF - SELECT latitude*0.0000001 AS latitude,longitude*0.0000001 AS longitude,current_nodes.id,tags,visible - FROM current_way_nodes,current_nodes - WHERE current_way_nodes.id=#{id} - AND current_way_nodes.node_id=current_nodes.id - EOF - if insistonvisible then sql+=" AND current_nodes.visible=1 " end - sql+=" ORDER BY sequence_id" - ActiveRecord::Base.connection.select_all(sql) - end - - # Get the latest version id of a way - def getlastversion(id,version) #:doc: - old_way = OldWay.find(:first, :conditions => ['visible=1 AND id=?' , id], :order => 'version DESC') - old_way.version - end - - def readwayquery_old(id,version,historic) #:doc: - # Node handling on undelete (historic=false): - # - always use the node specified, even if it's moved - - # Node handling on revert (historic=true): - # - if it's a visible node, use a new node id (i.e. not mucking up the old one) - # which means the SWF needs to allocate new ids - # - if it's an invisible node, we can reuse the old node id - - # ----- get node list from specified version of way, - # and the _current_ lat/long/tags of each node - - row=ActiveRecord::Base.connection.select_one("SELECT timestamp FROM ways WHERE version=#{version} AND id=#{id}") - waytime=row['timestamp'] - - sql=<<-EOF - SELECT cn.id,visible,latitude*0.0000001 AS latitude,longitude*0.0000001 AS longitude,tags - FROM way_nodes wn,current_nodes cn - WHERE wn.version=#{version} - AND wn.id=#{id} - AND wn.node_id=cn.id - ORDER BY sequence_id - EOF - rows=ActiveRecord::Base.connection.select_all(sql) - - # ----- if historic (full revert), get the old version of each node - # - if it's in another way now, generate a new id - # - if it's not in another way, use the old ID - - if historic then - rows.each_index do |i| - sql=<<-EOF - SELECT latitude*0.0000001 AS latitude,longitude*0.0000001 AS longitude,tags,cwn.id AS currentway - FROM nodes n - LEFT JOIN current_way_nodes cwn - ON cwn.node_id=n.id AND cwn.id!=#{id} - WHERE n.id=#{rows[i]['id']} - AND n.timestamp<="#{waytime}" - ORDER BY n.timestamp DESC - LIMIT 1 - EOF - row=ActiveRecord::Base.connection.select_one(sql) - nx=row['longitude'].to_f - ny=row['latitude'].to_f - if (!row.nil?) - if (row['currentway'] && (nx!=rows[i]['longitude'].to_f or ny!=rows[i]['latitude'].to_f or row['tags']!=rows[i]['tags'])) then rows[i]['id']=-1 end + if renumberednodes[id] + id = renumberednodes[id] + elsif id < 0 + # Create new node + node = Node.new + savenode = true + else + node = Node.find(id) + if !fpcomp(lat, node.lat) or !fpcomp(lon, node.lon) or + Tags.join(n[4]) != node.tags or !node.visible? + savenode = true end - rows[i]['longitude']=nx - rows[i]['latitude' ]=ny - rows[i]['tags' ]=row['tags'] - end - end - rows + end + + if savenode + node.user_id = uid + node.lat = lat + node.lon = lon + node.tags = Tags.join(n[4]) + node.visible = true + node.save_with_history! + + if id != node.id + renumberednodes[id] = node.id + id = node.id + end + end + + uniques = uniques - [id] + nodes.push(id) + end + + # -- Delete any unique nodes + + uniques.each do |n| + deleteitemrelations(n, 'node') + + node = Node.find(n) + node.user_id = uid + node.visible = false + node.save_with_history! + end + + # -- Save revised way + + way.tags = attributes + way.nds = nodes + way.user_id = uid + way.visible = true + way.save_with_history! + + [0, originalway, way.id, renumberednodes] end - def createuniquenodes(way,uqn_name,nodelist) #:doc: - # Find nodes which appear in this way but no others - sql=<<-EOF - CREATE TEMPORARY TABLE #{uqn_name} - SELECT a.node_id - FROM (SELECT DISTINCT node_id FROM current_way_nodes - WHERE id=#{way}) a - LEFT JOIN current_way_nodes b - ON b.node_id=a.node_id - AND b.id!=#{way} - WHERE b.node_id IS NULL - EOF - unless nodelist.empty? then - sql+="AND a.node_id NOT IN ("+nodelist.join(',')+")" - end - ActiveRecord::Base.connection.execute(sql) + # Save POI to the database. + # Refuses save if the node has since become part of a way. + # Returns: + # 0. 0 (success), + # 1. original node id (unchanged), + # 2. new node id. + + def putpoi(usertoken, id, lon, lat, tags, visible) #:doc: + uid = getuserid(usertoken) + if !uid then return -1,"You are not logged in, so the point could not be saved." end + + id = id.to_i + visible = (visible.to_i == 1) + + if id > 0 then + node = Node.find(id) + + if !visible then + unless node.ways.empty? then return -1,"The point has since become part of a way, so you cannot save it as a POI." end + deleteitemrelations(id, 'node') + end + else + node = Node.new + end + + node.user_id = uid + node.lat = lat + node.lon = lon + node.tags = Tags.join(tags) + node.visible = visible + node.save_with_history! + + [0, id, node.id] end + # Read POI from database + # (only called on revert: POIs are usually read by whichways). + # + # Returns array of id, long, lat, hash of tags. + + def getpoi(id,timestamp) #:doc: + if timestamp>0 then + n = OldNode.find(id, :conditions=>['UNIX_TIMESTAMP(timestamp)=?',timestamp]) + else + n = Node.find(id) + end + + if n + return [n.id, n.lon, n.lat, n.tags_as_hash] + else + return [nil, nil, nil, ''] + end + end + + # Delete way and all constituent nodes. Also removes from any relations. + # Returns 0 (success), unchanged way id. + + def deleteway(usertoken, way_id) #:doc: + uid = getuserid(usertoken) + if !uid then return -1,"You are not logged in, so the way could not be deleted." end + + # FIXME: would be good not to make two history entries when removing + # two nodes from the same relation + user = User.find(uid) + way = Way.find(way_id) + way.unshared_node_ids.each do |n| + deleteitemrelations(n, 'node') + end + + way.delete_with_relations_and_nodes_and_history(user) + + [0, way_id] + end # ==================================================================== - # Relations handling - # deleteuniquenoderelations(uqn_name,uid,db_now) - # deleteitemrelations(way|node,'way'|'node',uid,db_now) + # Support functions - def deleteuniquenoderelations(uqn_name,uid,db_now) #:doc: - sql=<<-EOF - SELECT node_id,cr.id FROM #{uqn_name},current_relation_members crm,current_relations cr - WHERE crm.member_id=node_id - AND crm.member_type='node' - AND crm.id=cr.id - AND cr.visible=1 - EOF + # Remove a node or way from all relations - relnodes=ActiveRecord::Base.connection.select_all(sql) - relnodes.each do |a| - removefromrelation(a['node_id'],'node',a['id'],uid,db_now) - end + def deleteitemrelations(objid, type) #:doc: + relations = RelationMember.find(:all, + :conditions => ['member_type = ? and member_id = ?', type, objid], + :include => :relation).collect { |rm| rm.relation }.uniq + + relations.each do |rel| + rel.members.delete_if { |x| x[0] == type and x[1] == objid } + rel.save_with_history! + end end - def deleteitemrelations(objid,type,uid,db_now) #:doc: - sql=<<-EOF - SELECT cr.id FROM current_relation_members crm,current_relations cr - WHERE crm.member_id=#{objid} - AND crm.member_type='#{type}' - AND crm.id=cr.id - AND cr.visible=1 - EOF + # Break out node tags into a hash + # (should become obsolete as of API 0.6) - relways=ActiveRecord::Base.connection.select_all(sql) - relways.each do |a| - removefromrelation(objid,type,a['id'],uid,db_now) - end + def tagstring_to_hash(a) #:doc: + tags={} + Tags.split(a) do |k, v| + tags[k]=v + end + tags end - def removefromrelation(objid,type,relation,uid,db_now) #:doc: - rver=ActiveRecord::Base.connection.insert("INSERT INTO relations (id,user_id,timestamp,visible) VALUES (#{relation},#{uid},#{db_now},1)") - - tagsql=<<-EOF - INSERT INTO relation_tags (id,k,v,version) - SELECT id,k,v,#{rver} FROM current_relation_tags - WHERE id=#{relation} - EOF - ActiveRecord::Base.connection.insert(tagsql) - - membersql=<<-EOF - INSERT INTO relation_members (id,member_type,member_id,member_role,version) - SELECT id,member_type,member_id,member_role,#{rver} FROM current_relation_members - WHERE id=#{relation} - AND (member_id!=#{objid} OR member_type!='#{type}') - EOF - ActiveRecord::Base.connection.insert(membersql) - - ActiveRecord::Base.connection.update("UPDATE current_relations SET user_id=#{uid},timestamp=#{db_now} WHERE id=#{relation}") - ActiveRecord::Base.connection.execute("DELETE FROM current_relation_members WHERE id=#{relation} AND member_type='#{type}' AND member_id=#{objid}") - end - - def sqlescape(a) #:doc: - a.gsub(/[\000-\037]/,"").gsub("'","''").gsub(92.chr) {92.chr+92.chr} - end - - def tag2array(a) #:doc: - tags={} - Tags.split(a) do |k, v| - tags[k.gsub(':','|')]=v - end - tags - end - - def array2tag(a) #:doc: - tags = [] - a.each do |k,v| - if v=='' then next end - if v[0,6]=='(type ' then next end - tags << [k.gsub('|',':'), v] - end - return Tags.join(tags) - end + # Authenticate token + # (could be removed if no-one uses the username+password form) def getuserid(token) #:doc: - if (token =~ /^(.+)\+(.+)$/) then - user = User.authenticate(:username => $1, :password => $2) - else - user = User.authenticate(:token => token) - end + if (token =~ /^(.+)\+(.+)$/) then + user = User.authenticate(:username => $1, :password => $2) + else + user = User.authenticate(:token => token) + end - return user ? user.id : nil; + return user ? user.id : nil; end + # Compare two floating-point numbers to within 0.0000001 + + def fpcomp(a,b) #:doc: + return ((a/0.0000001).round==(b/0.0000001).round) + end + + # ==================================================================== - # Co-ordinate conversion + # Alternative SQL queries for getway/whichways - def lat2coord(a,basey,masterscale) #:doc: - -(lat2y(a)-basey)*masterscale + def sql_find_way_ids_in_area(xmin,ymin,xmax,ymax) + sql=<<-EOF + SELECT DISTINCT current_way_nodes.id AS wayid + FROM current_way_nodes + INNER JOIN current_nodes ON current_nodes.id=current_way_nodes.node_id + INNER JOIN current_ways ON current_ways.id =current_way_nodes.id + WHERE current_nodes.visible=1 + AND current_ways.visible=1 + AND #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")} + EOF + return ActiveRecord::Base.connection.select_all(sql).collect { |a| a['wayid'].to_i } end - - def long2coord(a,baselong,masterscale) #:doc: - (a-baselong)*masterscale + + def sql_find_pois_in_area(xmin,ymin,xmax,ymax) + sql=<<-EOF + SELECT current_nodes.id,current_nodes.latitude*0.0000001 AS lat,current_nodes.longitude*0.0000001 AS lon,current_nodes.tags + FROM current_nodes + LEFT OUTER JOIN current_way_nodes cwn ON cwn.node_id=current_nodes.id + WHERE current_nodes.visible=1 + AND cwn.id IS NULL + AND #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")} + EOF + return ActiveRecord::Base.connection.select_all(sql).collect { |n| [n['id'].to_i,n['lon'].to_f,n['lat'].to_f,tagstring_to_hash(n['tags'])] } end - - def lat2y(a) #:doc: - 180/Math::PI * Math.log(Math.tan(Math::PI/4+a*(Math::PI/180)/2)) + + def sql_find_relations_in_area_and_ways(xmin,ymin,xmax,ymax,way_ids) + # ** It would be more Potlatchy to get relations for nodes within ways + # during 'getway', not here + sql=<<-EOF + SELECT DISTINCT cr.id AS relid + FROM current_relations cr + INNER JOIN current_relation_members crm ON crm.id=cr.id + INNER JOIN current_nodes cn ON crm.member_id=cn.id AND crm.member_type='node' + WHERE #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "cn.")} + EOF + unless way_ids.empty? + sql+=<<-EOF + UNION + SELECT DISTINCT cr.id AS relid + FROM current_relations cr + INNER JOIN current_relation_members crm ON crm.id=cr.id + WHERE crm.member_type='way' + AND crm.member_id IN (#{way_ids.join(',')}) + EOF + end + return ActiveRecord::Base.connection.select_all(sql).collect { |a| a['relid'].to_i }.uniq end - - def coord2lat(a,masterscale,basey) #:doc: - y2lat(a/-masterscale+basey) + + def sql_get_nodes_in_way(wayid) + points=[] + sql=<<-EOF + SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,current_nodes.id,tags + FROM current_way_nodes,current_nodes + WHERE current_way_nodes.id=#{wayid.to_i} + AND current_way_nodes.node_id=current_nodes.id + AND current_nodes.visible=1 + ORDER BY sequence_id + EOF + ActiveRecord::Base.connection.select_all(sql).each do |row| + points << [row['lon'].to_f,row['lat'].to_f,row['id'].to_i,nil,tagstring_to_hash(row['tags'])] + end + points end - - def coord2long(a,masterscale,baselong) #:doc: - a/masterscale+baselong - end - - def y2lat(a) - 180/Math::PI * (2*Math.atan(Math.exp(a*Math::PI/180))-Math::PI/2) + + def sql_get_tags_in_way(wayid) + tags={} + ActiveRecord::Base.connection.select_all("SELECT k,v FROM current_way_tags WHERE id=#{wayid.to_i}").each do |row| + tags[row['k']]=row['v'] + end + tags end end + +# Local Variables: +# indent-tabs-mode: t +# tab-width: 4 +# End: diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 05dfb0133..2f040a92b 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -126,6 +126,14 @@ class ApiController < ApplicationController doc = OSM::API.new.get_xml_doc + # add bounds + bounds = XML::Node.new 'bounds' + bounds['minlat'] = min_lat.to_s + bounds['minlon'] = min_lon.to_s + bounds['maxlat'] = max_lat.to_s + bounds['maxlon'] = max_lon.to_s + doc.root << bounds + # get ways # find which ways are needed ways = Array.new @@ -168,15 +176,15 @@ class ApiController < ApplicationController end end - relations = visible_nodes.values.collect { |node| node.containing_relations.visible }.flatten + - way_ids.collect { |id| Way.find(id).containing_relations.visible }.flatten + relations = Relation.find_for_nodes(visible_nodes.keys, :conditions => "visible = 1") + + Relation.find_for_ways(way_ids, :conditions => "visible = 1") # we do not normally return the "other" partners referenced by an relation, # e.g. if we return a way A that is referenced by relation X, and there's # another way B also referenced, that is not returned. But we do make # an exception for cases where an relation references another *relation*; # in that case we return that as well (but we don't go recursive here) - relations += relations.collect { |relation| relation.containing_relations.visible }.flatten + relations += Relation.find_for_relations(relations.collect { |r| r.id }, :conditions => "visible = 1") # this "uniq" may be slightly inefficient; it may be better to first collect and output # all node-related relations, then find the *not yet covered* way-related ones etc. diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 68359585e..1c27cb4d5 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base def authorize_web if session[:user] - @user = User.find(session[:user]) + @user = User.find(session[:user], :conditions => "visible = 1") elsif session[:token] @user = User.authenticate(:token => session[:token]) session[:user] = @user.id diff --git a/app/controllers/diary_entry_controller.rb b/app/controllers/diary_entry_controller.rb index 5159f7362..b425ef4b6 100644 --- a/app/controllers/diary_entry_controller.rb +++ b/app/controllers/diary_entry_controller.rb @@ -2,16 +2,40 @@ class DiaryEntryController < ApplicationController layout 'site', :except => :rss before_filter :authorize_web - before_filter :require_user, :only => [:new] + before_filter :require_user, :only => [:new, :edit] before_filter :check_database_availability def new - @title = 'new diary entry' + @title = 'New diary entry' + if params[:diary_entry] @diary_entry = DiaryEntry.new(params[:diary_entry]) @diary_entry.user = @user + if @diary_entry.save redirect_to :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name + else + render :action => 'edit' + end + else + render :action => 'edit' + end + end + + def edit + @title= 'Edit diary entry' + @diary_entry = DiaryEntry.find(params[:id]) + + if @user != @diary_entry.user + redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id] + elsif params[:diary_entry] + @diary_entry.title = params[:diary_entry][:title] + @diary_entry.body = params[:diary_entry][:body] + @diary_entry.latitude = params[:diary_entry][:latitude] + @diary_entry.longitude = params[:diary_entry][:longitude] + + if @diary_entry.save + redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id] end end end @@ -27,10 +51,11 @@ class DiaryEntryController < ApplicationController render :action => 'view' end end - + def list if params[:display_name] - @this_user = User.find_by_display_name(params[:display_name]) + @this_user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") + if @this_user @title = @this_user.display_name + "'s diary" @entry_pages, @entries = paginate(:diary_entries, @@ -39,6 +64,7 @@ class DiaryEntryController < ApplicationController :per_page => 20) else @not_found_user = params[:display_name] + render :action => 'no_such_user', :status => :not_found end else @@ -51,23 +77,37 @@ class DiaryEntryController < ApplicationController def rss if params[:display_name] - user = User.find_by_display_name(params[:display_name]) - @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20) - @title = "OpenStreetMap diary entries for #{user.display_name}" - @description = "Recent OpenStreetmap diary entries from #{user.display_name}" - @link = "http://www.openstreetmap.org/user/#{user.display_name}/diary" + user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") + + if user + @entries = DiaryEntry.find(:all, :conditions => ['user_id = ?', user.id], :order => 'created_at DESC', :limit => 20) + @title = "OpenStreetMap diary entries for #{user.display_name}" + @description = "Recent OpenStreetmap diary entries from #{user.display_name}" + @link = "http://www.openstreetmap.org/user/#{user.display_name}/diary" + + render :content_type => Mime::RSS + else + render :nothing => true, :status => :not_found + end else @entries = DiaryEntry.find(:all, :order => 'created_at DESC', :limit => 20) @title = "OpenStreetMap diary entries" @description = "Recent diary entries from users of OpenStreetMap" @link = "http://www.openstreetmap.org/diary" - end - render :content_type => Mime::RSS + render :content_type => Mime::RSS + end end def view - user = User.find_by_display_name(params[:display_name]) - @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]]) + user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") + + if user + @entry = DiaryEntry.find(:first, :conditions => ['user_id = ? AND id = ?', user.id, params[:id]]) + else + @not_found_user = params[:display_name] + + render :action => 'no_such_user', :status => :not_found + end end end diff --git a/app/controllers/swf_controller.rb b/app/controllers/swf_controller.rb index 54f8382ea..a96e71d05 100644 --- a/app/controllers/swf_controller.rb +++ b/app/controllers/swf_controller.rb @@ -117,8 +117,8 @@ class SwfController < ApplicationController def startShape s =0.chr # No fill styles s+=2.chr # Two line styles - s+=packUI16(5) + 0.chr + 255.chr + 255.chr # Width 5, RGB #00FFFF - s+=packUI16(5) + 255.chr + 0.chr + 255.chr # Width 5, RGB #FF00FF + s+=packUI16(0) + 0.chr + 255.chr + 255.chr # Width 5, RGB #00FFFF + s+=packUI16(0) + 255.chr + 0.chr + 255.chr # Width 5, RGB #FF00FF s+=34.chr # 2 fill, 2 line index bits s end diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 0467e66ba..899df05df 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -12,13 +12,13 @@ class TraceController < ApplicationController # from display name, pick up user id if one user's traces only display_name = params[:display_name] if target_user.nil? and !display_name.blank? - target_user = User.find(:first, :conditions => [ "display_name = ?", display_name]) + target_user = User.find(:first, :conditions => [ "visible = 1 and display_name = ?", display_name]) end # set title if target_user.nil? @title = "Public GPS traces" - elsif @user and @user.id == target_user.id + elsif @user and @user == target_user @title = "Your GPS traces" else @title = "Public GPS traces from #{target_user.display_name}" @@ -38,7 +38,7 @@ class TraceController < ApplicationController conditions = ["gpx_files.public = 1"] #2 end else - if @user and @user.id == target_user.id + if @user and @user == target_user conditions = ["gpx_files.user_id = ?", @user.id] #3 (check vs user id, so no join + can't pick up non-public traces by changing name) else conditions = ["gpx_files.public = 1 AND gpx_files.user_id = ?", target_user.id] #4 @@ -88,7 +88,7 @@ class TraceController < ApplicationController @trace = Trace.find(params[:id]) if @trace and @trace.visible? and - (@trace.public? or @trace.user.id == @user.id) + (@trace.public? or @trace.user == @user) @title = "Viewing trace #{@trace.name}" else flash[:notice] = "Trace not found!" diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 5d26708fe..df2a799c3 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -2,8 +2,8 @@ class UserController < ApplicationController layout 'site' before_filter :authorize, :only => [:api_details, :api_gpx_files] - before_filter :authorize_web, :only => [:account, :go_public, :view, :diary, :make_friend, :remove_friend, :upload_image] - before_filter :require_user, :only => [:set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image] + before_filter :authorize_web, :except => [:api_details, :api_gpx_files] + before_filter :require_user, :only => [:set_home, :account, :go_public, :make_friend, :remove_friend, :upload_image, :delete_image] before_filter :check_database_availability, :except => [:api_details, :api_gpx_files] before_filter :check_read_availability, :only => [:api_details, :api_gpx_files] @@ -13,12 +13,13 @@ class UserController < ApplicationController @title = 'create account' @user = User.new(params[:user]) + @user.visible = true @user.data_public = true - + @user.description = "" if @user.description.nil? + if @user.save - token = @user.tokens.create flash[:notice] = "User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)
Please note that you won't be able to login until you've received and confirmed your email address." - Notifier::deliver_signup_confirm(@user, token) + Notifier.deliver_signup_confirm(@user, @user.tokens.create) redirect_to :action => 'login' else render :action => 'new' @@ -28,21 +29,28 @@ class UserController < ApplicationController def account @title = 'edit account' if params[:user] and params[:user][:display_name] and params[:user][:description] - home_lat = params[:user][:home_lat] - home_lon = params[:user][:home_lon] + if params[:user][:email] != @user.email + @user.new_email = params[:user][:email] + end @user.display_name = params[:user][:display_name] + if params[:user][:pass_crypt].length > 0 or params[:user][:pass_crypt_confirmation].length > 0 @user.pass_crypt = params[:user][:pass_crypt] @user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation] end + @user.description = params[:user][:description] - @user.home_lat = home_lat - @user.home_lon = home_lon + @user.home_lat = params[:user][:home_lat] + @user.home_lon = params[:user][:home_lon] + if @user.save - flash[:notice] = "User information updated successfully." - else - flash.delete(:notice) + if params[:user][:email] == @user.new_email + @notice = "User information updated successfully. Check your email for a note to confirm your new email address." + Notifier.deliver_email_confirm(@user, @user.tokens.create) + else + @notice = "User information updated successfully." + end end end end @@ -68,16 +76,15 @@ class UserController < ApplicationController def lost_password @title = 'lost password' if params[:user] and params[:user][:email] - user = User.find_by_email(params[:user][:email]) + user = User.find_by_email(params[:user][:email], :conditions => "visible = 1") + if user token = user.tokens.create - Notifier::deliver_lost_password(user, token) - flash[:notice] = "Sorry you lost it :-( but an email is on its way so you can reset it soon." + Notifier.deliver_lost_password(user, token) + @notice = "Sorry you lost it :-( but an email is on its way so you can reset it soon." else - flash[:notice] = "Couldn't find that email address, sorry." + @notice = "Couldn't find that email address, sorry." end - else - render :action => 'lost_password' end end @@ -91,14 +98,16 @@ class UserController < ApplicationController user.pass_crypt = pass user.pass_crypt_confirmation = pass user.active = true + user.email_valid = true user.save! token.destroy - Notifier::deliver_reset_password(user, pass) + Notifier.deliver_reset_password(user, pass) flash[:notice] = "Your password has been changed and is on its way to your mailbox :-)" else flash[:notice] = "Didn't find that token, check the URL maybe?" end end + redirect_to :action => 'login' end @@ -121,9 +130,9 @@ class UserController < ApplicationController end return elsif User.authenticate(:username => email_or_display_name, :password => pass, :inactive => true) - flash[:notice] = "Sorry, your account is not active yet.
Please click on the link in the account confirmation email to activate your account." + @notice = "Sorry, your account is not active yet.
Please click on the link in the account confirmation email to activate your account." else - flash[:notice] = "Sorry, couldn't log in with those details." + @notice = "Sorry, couldn't log in with those details." end end end @@ -150,13 +159,34 @@ class UserController < ApplicationController if token and !token.user.active? @user = token.user @user.active = true + @user.email_valid = true @user.save! token.destroy flash[:notice] = 'Confirmed your account, thanks for signing up!' session[:user] = @user.id redirect_to :action => 'account', :display_name => @user.display_name else - flash[:notice] = 'Something went wrong confirming that user.' + @notice = 'Something went wrong confirming that user.' + end + end + end + + def confirm_email + if params[:confirm_action] + token = UserToken.find_by_token(params[:confirm_string]) + if token and token.user.new_email? + @user = token.user + @user.email = @user.new_email + @user.new_email = nil + @user.active = true + @user.email_valid = true + @user.save! + token.destroy + flash[:notice] = 'Confirmed your email address, thanks for signing up!' + session[:user] = @user.id + redirect_to :action => 'account', :display_name => @user.display_name + else + @notice = 'Something went wrong confirming that email address.' end end end @@ -167,6 +197,12 @@ class UserController < ApplicationController redirect_to :controller => 'user', :action => 'view', :display_name => @user.display_name end + def delete_image + @user.image = nil + @user.save! + redirect_to :controller => 'user', :action => 'view', :display_name => @user.display_name + end + def api_details render :text => @user.to_xml.to_s, :content_type => "text/xml" end @@ -180,7 +216,7 @@ class UserController < ApplicationController end def view - @this_user = User.find_by_display_name(params[:display_name]) + @this_user = User.find_by_display_name(params[:display_name], :conditions => "visible = 1") if @this_user @title = @this_user.display_name @@ -193,20 +229,21 @@ class UserController < ApplicationController def make_friend if params[:display_name] name = params[:display_name] - new_friend = User.find_by_display_name(name) + new_friend = User.find_by_display_name(name, :conditions => "visible = 1") friend = Friend.new friend.user_id = @user.id friend.friend_user_id = new_friend.id unless @user.is_friends_with?(new_friend) if friend.save flash[:notice] = "#{name} is now your friend." - Notifier::deliver_friend_notification(friend) + Notifier.deliver_friend_notification(friend) else friend.add_error("Sorry, failed to add #{name} as a friend.") end else flash[:notice] = "You are already friends with #{name}." end + redirect_to :controller => 'user', :action => 'view' end end @@ -214,16 +251,15 @@ class UserController < ApplicationController def remove_friend if params[:display_name] name = params[:display_name] - friend = User.find_by_display_name(name) + friend = User.find_by_display_name(name, :conditions => "visible = 1") if @user.is_friends_with?(friend) Friend.delete_all "user_id = #{@user.id} AND friend_user_id = #{friend.id}" flash[:notice] = "#{friend.display_name} was removed from your friends." else - flash[:notice] = "#{friend.display_name} was not already one of your friends." + flash[:notice] = "#{friend.display_name} is not one of your friends." end + redirect_to :controller => 'user', :action => 'view' end end - end - diff --git a/app/models/friend.rb b/app/models/friend.rb index 242b74251..d740a711c 100644 --- a/app/models/friend.rb +++ b/app/models/friend.rb @@ -1,4 +1,4 @@ class Friend < ActiveRecord::Base - belongs_to :user - + belongs_to :befriender, :class_name => "User", :foreign_key => :user_id + belongs_to :befriendee, :class_name => "User", :foreign_key => :friend_user_id end diff --git a/app/models/node.rb b/app/models/node.rb index c8770922d..677023179 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -19,6 +19,9 @@ class Node < ActiveRecord::Base has_many :node_tags, :foreign_key => :id + has_many :old_way_nodes + has_many :ways_via_history, :class_name=> "Way", :through => :old_way_nodes, :source => :way + has_many :containing_relation_members, :class_name => "RelationMember", :as => :member has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder diff --git a/app/models/notifier.rb b/app/models/notifier.rb index 84d097341..3cc0f4cab 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -1,4 +1,3 @@ - class Notifier < ActionMailer::Base def signup_confirm(user, token) recipients user.email @@ -10,6 +9,17 @@ class Notifier < ActionMailer::Base :confirm_string => token.token) end + def email_confirm(user, token) + recipients user.new_email + from "webmaster@openstreetmap.org" + subject "[OpenStreetMap] Confirm your email address" + headers "Auto-Submitted" => "auto-generated" + body :address => user.new_email, + :url => url_for(:host => SERVER_URL, + :controller => "user", :action => "confirm_email", + :confirm_string => token.token) + end + def lost_password(user, token) recipients user.email from "webmaster@openstreetmap.org" @@ -29,7 +39,7 @@ class Notifier < ActionMailer::Base end def gpx_success(trace, possible_points) - recipients trace.user.email + recipients trace.user.email if trace.user.email_valid from "webmaster@openstreetmap.org" subject "[OpenStreetMap] GPX Import success" headers "Auto-Submitted" => "auto-generated" @@ -41,7 +51,7 @@ class Notifier < ActionMailer::Base end def gpx_failure(trace, error) - recipients trace.user.email + recipients trace.user.email if trace.user.email_valid from "webmaster@openstreetmap.org" subject "[OpenStreetMap] GPX Import failure" headers "Auto-Submitted" => "auto-generated" @@ -52,7 +62,7 @@ class Notifier < ActionMailer::Base end def message_notification(message) - recipients message.recipient.email + recipients message.recipient.email if message.recipient.email_valid from "webmaster@openstreetmap.org" subject "[OpenStreetMap] #{message.sender.display_name} sent you a new message" headers "Auto-Submitted" => "auto-generated" @@ -69,7 +79,7 @@ class Notifier < ActionMailer::Base end def diary_comment_notification(comment) - recipients comment.diary_entry.user.email + recipients comment.diary_entry.user.email if comment.diary_entry.user.email_valid from "webmaster@openstreetmap.org" subject "[OpenStreetMap] #{comment.user.display_name} commented on your diary entry" headers "Auto-Submitted" => "auto-generated" @@ -100,7 +110,7 @@ class Notifier < ActionMailer::Base befriender = User.find_by_id(friend.user_id) befriendee = User.find_by_id(friend.friend_user_id) - recipients befriendee.email + recipients befriendee.email if befriendee.email_valid from "webmaster@openstreetmap.org" subject "[OpenStreetMap] #{befriender.display_name} added you as a friend" headers "Auto-Submitted" => "auto-generated" diff --git a/app/models/old_way.rb b/app/models/old_way.rb index edf66aac3..3c88c4673 100644 --- a/app/models/old_way.rb +++ b/app/models/old_way.rb @@ -112,6 +112,35 @@ class OldWay < ActiveRecord::Base return el1 end + # Read full version of old way + # For get_nodes_undelete, uses same nodes, even if they've moved since + # For get_nodes_revert, allocates new ids + # Currently returns Potlatch-style array + + def get_nodes_undelete + points = [] + self.nds.each do |n| + node=Node.find(n) + points << [node.lon, node.lat, n, node.visible ? 1 : 0, node.tags_as_hash] + end + points + end + + def get_nodes_revert + points=[] + self.nds.each do |n| + oldnode=OldNode.find(:first, :conditions=>['id=? AND timestamp<=?',n,self.timestamp], :order=>"timestamp DESC") + curnode=Node.find(n) + id=n; v=curnode.visible ? 1 : 0 + if oldnode.lat!=curnode.lat or oldnode.lon!=curnode.lon or oldnode.tags!=curnode.tags then + # node has changed: if it's in other ways, give it a new id + if curnode.ways-[self.id] then id=-1; v=nil end + end + points << [oldnode.lon, oldnode.lat, id, v, oldnode.tags_as_hash] + end + points + end + # Temporary method to match interface to nodes def tags_as_hash return self.tags diff --git a/app/models/old_way_node.rb b/app/models/old_way_node.rb index 85a6f3c1c..7420b5cfc 100644 --- a/app/models/old_way_node.rb +++ b/app/models/old_way_node.rb @@ -2,4 +2,6 @@ class OldWayNode < ActiveRecord::Base set_table_name 'way_nodes' set_primary_keys :id, :version, :sequence_id + + belongs_to :way, :foreign_key=> :id end diff --git a/app/models/relation.rb b/app/models/relation.rb index eb3b06a13..e46da5ade 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -112,6 +112,36 @@ class Relation < ActiveRecord::Base return el1 end + def self.find_for_nodes(ids, options = {}) + if ids.empty? + return [] + else + self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'node' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do + return self.find(:all, options) + end + end + end + + def self.find_for_ways(ids, options = {}) + if ids.empty? + return [] + else + self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'way' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do + return self.find(:all, options) + end + end + end + + def self.find_for_relations(ids, options = {}) + if ids.empty? + return [] + else + self.with_scope(:find => { :joins => "INNER JOIN current_relation_members ON current_relation_members.id = current_relations.id", :conditions => "current_relation_members.member_type = 'relation' AND current_relation_members.member_id IN (#{ids.join(',')})" }) do + return self.find(:all, options) + end + end + end + # FIXME is this really needed? def members unless @members diff --git a/app/models/trace.rb b/app/models/trace.rb index d28c2c6f4..10e867bad 100644 --- a/app/models/trace.rb +++ b/app/models/trace.rb @@ -58,18 +58,16 @@ class Trace < ActiveRecord::Base data end - # FIXME change to permanent filestore area def large_picture_name - "/home/osm/icons/#{id}.gif" + "#{GPX_IMAGE_DIR}/#{id}.gif" end - # FIXME change to permanent filestore area def icon_picture_name - "/home/osm/icons/#{id}_icon.gif" + "#{GPX_IMAGE_DIR}/#{id}_icon.gif" end def trace_name - "/home/osm/gpx/#{id}.gpx" + "#{GPX_TRACE_DIR}/#{id}.gpx" end def mime_type @@ -158,7 +156,7 @@ class Trace < ActiveRecord::Base elsif bzipped system("bunzip2 -c #{trace_name} > #{tmpfile.path}") elsif zipped - system("unzip -p #{trace_name} > #{tmpfile.path}") + system("unzip -p #{trace_name} -x '__MACOSX/*' > #{tmpfile.path}") end tmpfile.unlink @@ -174,7 +172,7 @@ class Trace < ActiveRecord::Base def import logger.info("GPX Import importing #{name} (#{id}) from #{user.email}") - gpx = OSM::GPXImporter.new(self.xml_file) + gpx = GPX::File.new(self.xml_file) f_lat = 0 f_lon = 0 @@ -189,18 +187,18 @@ class Trace < ActiveRecord::Base gpx.points do |point| if first - f_lat = point['latitude'] - f_lon = point['longitude'] + f_lat = point.latitude + f_lon = point.longitude first = false end tp = Tracepoint.new - tp.lat = point['latitude'].to_f - tp.lon = point['longitude'].to_f - tp.altitude = point['altitude'].to_f - tp.timestamp = point['timestamp'] + tp.lat = point.latitude + tp.lon = point.longitude + tp.altitude = point.altitude + tp.timestamp = point.timestamp tp.gpx_id = id - tp.trackid = point['segment'].to_i + tp.trackid = point.segment tp.save! end @@ -217,8 +215,8 @@ class Trace < ActiveRecord::Base self.latitude = f_lat self.longitude = f_lon - self.large_picture = gpx.get_picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points) - self.icon_picture = gpx.get_icon(min_lat, min_lon, max_lat, max_lon) + self.large_picture = gpx.picture(min_lat, min_lon, max_lat, max_lon, gpx.actual_points) + self.icon_picture = gpx.icon(min_lat, min_lon, max_lat, max_lon) self.size = gpx.actual_points self.inserted = true self.save! diff --git a/app/models/user.rb b/app/models/user.rb index 61c76898a..9b5bfd595 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,7 +6,7 @@ class User < ActiveRecord::Base has_many :messages, :foreign_key => :to_user_id, :order => 'sent_on DESC' has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => "message_read = 0", :order => 'sent_on DESC' has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :order => 'sent_on DESC' - has_many :friends + has_many :friends, :include => :befriendee, :conditions => "users.visible = 1" has_many :tokens, :class_name => "UserToken" has_many :preferences, :class_name => "UserPreference" @@ -48,7 +48,7 @@ class User < ActiveRecord::Base end if user - user = nil unless user.active? or options[:inactive] + user = nil unless user.visible? and (user.active? or options[:inactive]) end token.update_attribute(:expiry, 1.week.from_now) if token and user @@ -80,7 +80,7 @@ class User < ActiveRecord::Base if self.home_lon and self.home_lat gc = OSM::GreatCircle.new(self.home_lat, self.home_lon) bounds = gc.bounds(radius) - nearby = User.find(:all, :conditions => "home_lat between #{bounds[:minlat]} and #{bounds[:maxlat]} and home_lon between #{bounds[:minlon]} and #{bounds[:maxlon]} and data_public = 1 and id != #{self.id}") + nearby = User.find(:all, :conditions => "visible = 1 and home_lat between #{bounds[:minlat]} and #{bounds[:maxlat]} and home_lon between #{bounds[:minlon]} and #{bounds[:maxlon]} and data_public = 1 and id != #{self.id}") nearby.delete_if { |u| gc.distance(u.home_lat, u.home_lon) > radius } nearby.sort! { |u1,u2| gc.distance(u1.home_lat, u1.home_lon) <=> gc.distance(u2.home_lat, u2.home_lon) } else diff --git a/app/models/way.rb b/app/models/way.rb index 34afc6585..3bc8bcebe 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -252,17 +252,8 @@ class Way < ActiveRecord::Base # FIXME: merge the potlatch code to delete the relations def delete_with_relations_and_nodes_and_history(user) - - node_ids = self.nodes.collect {|node| node.id } - node_ids_not_to_delete = [] - way_nodes = WayNode.find(:all, :conditions => "node_id in (#{node_ids.join(',')}) and id != #{self.id}") - - node_ids_not_to_delete = way_nodes.collect {|way_node| way_node.node_id} - - node_ids_to_delete = node_ids - node_ids_not_to_delete - # delete the nodes not used by other ways - node_ids_to_delete.each do |node_id| + self.unshared_node_ids.each do |node_id| n = Node.find(node_id) n.user_id = user.id n.visible = false @@ -272,7 +263,18 @@ class Way < ActiveRecord::Base self.user_id = user.id self.delete_with_history(user) + end + # Find nodes that belong to this way only + def unshared_node_ids + node_ids = self.nodes.collect { |node| node.id } + + unless node_ids.empty? + way_nodes = WayNode.find(:all, :conditions => "node_id in (#{node_ids.join(',')}) and id != #{self.id}") + node_ids = node_ids - way_nodes.collect { |way_node| way_node.node_id } + end + + return node_ids end # Temporary method to match interface to nodes diff --git a/app/views/diary_entry/_diary_entry.rhtml b/app/views/diary_entry/_diary_entry.rhtml index 372ec35f7..fe73155ac 100644 --- a/app/views/diary_entry/_diary_entry.rhtml +++ b/app/views/diary_entry/_diary_entry.rhtml @@ -3,13 +3,17 @@ <% if diary_entry.latitude and diary_entry.longitude %> Coordinates:
<%= diary_entry.latitude %>; <%= diary_entry.longitude %>
(<%=link_to 'map', :controller => 'site', :action => 'index', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %> / <%=link_to 'edit', :controller => 'site', :action => 'edit', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %>)
<% end %> -Posted by <%= link_to h(diary_entry.user.display_name), :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %> at <%= diary_entry.created_at %>
+Posted by <%= link_to h(diary_entry.user.display_name), :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %> at <%= diary_entry.created_at %> <% if params[:action] == 'list' %> +
<%= link_to 'Comment on this entry', :action => 'view', :display_name => diary_entry.user.display_name, :id => diary_entry.id, :anchor => 'newcomment' %> | <%= link_to 'Reply to this entry', :controller => 'message', :action => 'new', :user_id => diary_entry.user.id, :title => "Re: #{diary_entry.title}" %> | <%= link_to pluralize(diary_entry.diary_comments.count, "comment"), :action => 'view', :display_name => diary_entry.user.display_name, :id => diary_entry.id, :anchor => 'comments' %> <% end %> +<% if @user == diary_entry.user %> +| <%= link_to 'Edit this entry', :action => 'edit', :display_name => @user.display_name, :id => diary_entry.id %> +<% end %>

diff --git a/app/views/diary_entry/new.rhtml b/app/views/diary_entry/edit.rhtml similarity index 98% rename from app/views/diary_entry/new.rhtml rename to app/views/diary_entry/edit.rhtml index 0a5203a66..87f5e9fac 100644 --- a/app/views/diary_entry/new.rhtml +++ b/app/views/diary_entry/edit.rhtml @@ -1,3 +1,5 @@ +

<%= @title %>

+ <%= error_messages_for 'diary_entry' %> <% form_for :diary_entry do |f| %> diff --git a/app/views/diary_entry/list.rhtml b/app/views/diary_entry/list.rhtml index e648e46f2..7a2ccf74d 100644 --- a/app/views/diary_entry/list.rhtml +++ b/app/views/diary_entry/list.rhtml @@ -8,11 +8,11 @@ <% if @this_user %> <% if @user == @this_user %> - <%= link_to 'New diary post', :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> + <%= link_to 'New diary entry', :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> <% end %> <% else %> <% if @user %> - <%= link_to 'New diary post', :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> + <%= link_to 'New diary entry', :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> <% end %> <% end %> diff --git a/app/views/layouts/site.rhtml b/app/views/layouts/site.rhtml index 52e7b6b24..7aa2db7b9 100644 --- a/app/views/layouts/site.rhtml +++ b/app/views/layouts/site.rhtml @@ -11,8 +11,8 @@
- <% if flash[:notice] %> -
<%= flash[:notice] %>
+ <% if @notice || flash[:notice] %> +
<%= @notice || flash[:notice] %>
<% end %> <%= yield %> @@ -95,12 +95,6 @@ <%= yield :left_menu %>
-
-
- Come to the second OpenStreetMap Conference, The State of the Map: 12th-13th July 2008, Limerick, Ireland. -
-
- <%= yield :optionals %> " - @output.puts "" - @output.puts "" - @output.puts "" - @output.flush - end - - def html_header - <<-EOF - - - - - RSpec results - - - - - - -EOF - end - - def report_header - <<-EOF -
- - - -
-

RSpec Results

- -
-

 

-

 

-
-
- -
-EOF - end - - def global_scripts - <<-EOF -function moveProgressBar(percentDone) { - document.getElementById("rspec-header").style.width = percentDone +"%"; -} -function makeRed(element_id) { - document.getElementById(element_id).style.background = '#C40D0D'; - document.getElementById(element_id).style.color = '#FFFFFF'; -} - -function makeYellow(element_id) { - if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') - { - document.getElementById(element_id).style.background = '#FAF834'; - document.getElementById(element_id).style.color = '#000000'; - } - else - { - document.getElementById(element_id).style.background = '#FAF834'; - document.getElementById(element_id).style.color = '#000000'; - } -} -EOF - end - - def global_styles - <<-EOF -#rspec-header { - background: #65C400; color: #fff; -} - -.rspec-report h1 { - margin: 0px 10px 0px 10px; - padding: 10px; - font-family: "Lucida Grande", Helvetica, sans-serif; - font-size: 1.8em; -} - -#summary { - margin: 0; padding: 5px 10px; - font-family: "Lucida Grande", Helvetica, sans-serif; - text-align: right; - position: absolute; - top: 0px; - right: 0px; -} - -#summary p { - margin: 0 0 0 2px; -} - -#summary #totals { - font-size: 1.2em; -} - -.example_group { - margin: 0 10px 5px; - background: #fff; -} - -dl { - margin: 0; padding: 0 0 5px; - font: normal 11px "Lucida Grande", Helvetica, sans-serif; -} - -dt { - padding: 3px; - background: #65C400; - color: #fff; - font-weight: bold; -} - -dd { - margin: 5px 0 5px 5px; - padding: 3px 3px 3px 18px; -} - -dd.spec.passed { - border-left: 5px solid #65C400; - border-bottom: 1px solid #65C400; - background: #DBFFB4; color: #3D7700; -} - -dd.spec.failed { - border-left: 5px solid #C20000; - border-bottom: 1px solid #C20000; - color: #C20000; background: #FFFBD3; -} - -dd.spec.not_implemented { - border-left: 5px solid #FAF834; - border-bottom: 1px solid #FAF834; - background: #FCFB98; color: #131313; -} - -dd.spec.pending_fixed { - border-left: 5px solid #0000C2; - border-bottom: 1px solid #0000C2; - color: #0000C2; background: #D3FBFF; -} - -.backtrace { - color: #000; - font-size: 12px; -} - -a { - color: #BE5C00; -} - -/* Ruby code, style similar to vibrant ink */ -.ruby { - font-size: 12px; - font-family: monospace; - color: white; - background-color: black; - padding: 0.1em 0 0.2em 0; -} - -.ruby .keyword { color: #FF6600; } -.ruby .constant { color: #339999; } -.ruby .attribute { color: white; } -.ruby .global { color: white; } -.ruby .module { color: white; } -.ruby .class { color: white; } -.ruby .string { color: #66FF00; } -.ruby .ident { color: white; } -.ruby .method { color: #FFCC00; } -.ruby .number { color: white; } -.ruby .char { color: white; } -.ruby .comment { color: #9933CC; } -.ruby .symbol { color: white; } -.ruby .regex { color: #44B4CC; } -.ruby .punct { color: white; } -.ruby .escape { color: white; } -.ruby .interp { color: white; } -.ruby .expr { color: white; } - -.ruby .offending { background-color: gray; } -.ruby .linenum { - width: 75px; - padding: 0.1em 1em 0.2em 0; - color: #000000; - background-color: #FFFBD3; -} -EOF - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/profile_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/profile_formatter.rb deleted file mode 100644 index 3784f3ac7..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/profile_formatter.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'spec/runner/formatter/progress_bar_formatter' - -module Spec - module Runner - module Formatter - class ProfileFormatter < ProgressBarFormatter - - def initialize(options, where) - super - @example_times = [] - end - - def start(count) - @output.puts "Profiling enabled." - end - - def example_started(example) - @time = Time.now - end - - def example_passed(example) - super - @example_times << [ - example_group.description, - example.description, - Time.now - @time - ] - end - - def start_dump - super - @output.puts "\n\nTop 10 slowest examples:\n" - - @example_times = @example_times.sort_by do |description, example, time| - time - end.reverse - - @example_times[0..9].each do |description, example, time| - @output.print red(sprintf("%.7f", time)) - @output.puts " #{description} #{example}" - end - @output.flush - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/progress_bar_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/progress_bar_formatter.rb deleted file mode 100644 index 8d0e50432..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/progress_bar_formatter.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'spec/runner/formatter/base_text_formatter' - -module Spec - module Runner - module Formatter - class ProgressBarFormatter < BaseTextFormatter - def example_failed(example, counter, failure) - @output.print colourise('F', failure) - @output.flush - end - - def example_passed(example) - @output.print green('.') - @output.flush - end - - def example_pending(example_group_description, example, message) - super - @output.print yellow('P') - @output.flush - end - - def start_dump - @output.puts - @output.flush - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/snippet_extractor.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/snippet_extractor.rb deleted file mode 100644 index 41119fe46..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/snippet_extractor.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Spec - module Runner - module Formatter - # This class extracts code snippets by looking at the backtrace of the passed error - class SnippetExtractor #:nodoc: - class NullConverter; def convert(code, pre); code; end; end #:nodoc: - begin; require 'rubygems'; require 'syntax/convertors/html'; @@converter = Syntax::Convertors::HTML.for_syntax "ruby"; rescue LoadError => e; @@converter = NullConverter.new; end - - def snippet(error) - raw_code, line = snippet_for(error.backtrace[0]) - highlighted = @@converter.convert(raw_code, false) - highlighted << "\n# gem install syntax to get syntax highlighting" if @@converter.is_a?(NullConverter) - post_process(highlighted, line) - end - - def snippet_for(error_line) - if error_line =~ /(.*):(\d+)/ - file = $1 - line = $2.to_i - [lines_around(file, line), line] - else - ["# Couldn't get snippet for #{error_line}", 1] - end - end - - def lines_around(file, line) - if File.file?(file) - lines = File.open(file).read.split("\n") - min = [0, line-3].max - max = [line+1, lines.length-1].min - selected_lines = [] - selected_lines.join("\n") - lines[min..max].join("\n") - else - "# Couldn't get snippet for #{file}" - end - end - - def post_process(highlighted, offending_line) - new_lines = [] - highlighted.split("\n").each_with_index do |line, i| - new_line = "#{offending_line+i-2}#{line}" - new_line = "#{new_line}" if i == 2 - new_lines << new_line - end - new_lines.join("\n") - end - - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/specdoc_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/specdoc_formatter.rb deleted file mode 100644 index f426dc948..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/specdoc_formatter.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'spec/runner/formatter/base_text_formatter' - -module Spec - module Runner - module Formatter - class SpecdocFormatter < BaseTextFormatter - def add_example_group(example_group) - super - output.puts - output.puts example_group.description - output.flush - end - - def example_failed(example, counter, failure) - message = if failure.expectation_not_met? - "- #{example.description} (FAILED - #{counter})" - else - "- #{example.description} (ERROR - #{counter})" - end - - output.puts(failure.expectation_not_met? ? red(message) : magenta(message)) - output.flush - end - - def example_passed(example) - message = "- #{example.description}" - output.puts green(message) - output.flush - end - - def example_pending(example_group_description, example, message) - super - output.puts yellow("- #{example.description} (PENDING: #{message})") - output.flush - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb deleted file mode 100644 index b70ac153a..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/html_formatter.rb +++ /dev/null @@ -1,125 +0,0 @@ -require 'erb' -require 'spec/runner/formatter/base_text_formatter' - -module Spec - module Runner - module Formatter - module Story - class HtmlFormatter < BaseTextFormatter - include ERB::Util - - def run_started(count) - @output.puts <<-EOF - - - - - Stories - - - - - - - - - -
-EOF - end - - def collected_steps(steps) - unless steps.empty? - @output.puts "
    " - steps.each do |step| - @output.puts "
  • #{step}
  • " - end - @output.puts "
" - end - end - - def run_ended - @output.puts <<-EOF -
- - -EOF - end - - def story_started(title, narrative) - @output.puts <<-EOF -
-
Story: #{h title}
-
-

- #{h(narrative).split("\n").join("
")} -

-EOF - end - - def story_ended(title, narrative) - @output.puts <<-EOF -
-
-EOF - end - - def scenario_started(story_title, scenario_name) - @output.puts <<-EOF -
-
Scenario: #{h scenario_name}
-
-
    -EOF - end - - def scenario_ended - @output.puts <<-EOF -
-
-
-EOF - end - - def found_scenario(type, description) - end - - def scenario_succeeded(story_title, scenario_name) - scenario_ended - end - - def scenario_pending(story_title, scenario_name, reason) - scenario_ended - end - - def scenario_failed(story_title, scenario_name, err) - scenario_ended - end - - def step_succeeded(type, description, *args) - print_step('passed', type, description, *args) # TODO: uses succeeded CSS class - end - - def step_pending(type, description, *args) - print_step('pending', type, description, *args) - end - - def step_failed(type, description, *args) - print_step('failed', type, description, *args) - end - - def print_step(klass, type, description, *args) - spans = args.map { |arg| "#{arg}" } - desc_string = description.step_name - arg_regexp = description.arg_regexp - i = -1 - inner = type.to_s.capitalize + ' ' + desc_string.gsub(arg_regexp) { |param| spans[i+=1] } - @output.puts "
  • #{inner}
  • " - end - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb deleted file mode 100644 index 424e27cc6..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/story/plain_text_formatter.rb +++ /dev/null @@ -1,128 +0,0 @@ -require 'spec/runner/formatter/base_text_formatter' - -module Spec - module Runner - module Formatter - module Story - class PlainTextFormatter < BaseTextFormatter - def initialize(options, where) - super - @successful_scenario_count = 0 - @pending_scenario_count = 0 - @failed_scenarios = [] - @pending_steps = [] - @previous_type = nil - end - - def run_started(count) - @count = count - @output.puts "Running #@count scenarios\n\n" - end - - def story_started(title, narrative) - @current_story_title = title - @output.puts "Story: #{title}\n\n" - narrative.each_line do |line| - @output.print " " - @output.print line - end - end - - def story_ended(title, narrative) - @output.puts - @output.puts - end - - def scenario_started(story_title, scenario_name) - @current_scenario_name = scenario_name - @scenario_already_failed = false - @output.print "\n\n Scenario: #{scenario_name}" - @scenario_ok = true - end - - def scenario_succeeded(story_title, scenario_name) - @successful_scenario_count += 1 - end - - def scenario_failed(story_title, scenario_name, err) - @options.backtrace_tweaker.tweak_backtrace(err) - @failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed - @scenario_already_failed = true - end - - def scenario_pending(story_title, scenario_name, msg) - @pending_scenario_count += 1 unless @scenario_already_failed - @scenario_already_failed = true - end - - def run_ended - @output.puts "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending" - unless @pending_steps.empty? - @output.puts "\nPending Steps:" - @pending_steps.each_with_index do |pending, i| - story_name, scenario_name, msg = pending - @output.puts "#{i+1}) #{story_name} (#{scenario_name}): #{msg}" - end - end - unless @failed_scenarios.empty? - @output.print "\nFAILURES:" - @failed_scenarios.each_with_index do |failure, i| - title, scenario_name, err = failure - @output.print %[ - #{i+1}) #{title} (#{scenario_name}) FAILED - #{err.class}: #{err.message} - #{err.backtrace.join("\n")} -] - end - end - end - - def step_succeeded(type, description, *args) - found_step(type, description, false, *args) - end - - def step_pending(type, description, *args) - found_step(type, description, false, *args) - @pending_steps << [@current_story_title, @current_scenario_name, description] - @output.print " (PENDING)" - @scenario_ok = false - end - - def step_failed(type, description, *args) - found_step(type, description, true, *args) - @output.print red(@scenario_ok ? " (FAILED)" : " (SKIPPED)") - @scenario_ok = false - end - - def collected_steps(steps) - end - - def method_missing(sym, *args, &block) #:nodoc: - # noop - ignore unknown messages - end - - private - - def found_step(type, description, failed, *args) - desc_string = description.step_name - arg_regexp = description.arg_regexp - text = if(type == @previous_type) - "\n And " - else - "\n\n #{type.to_s.capitalize} " - end - i = -1 - text << desc_string.gsub(arg_regexp) { |param| args[i+=1] } - @output.print(failed ? red(text) : green(text)) - - if type == :'given scenario' - @previous_type = :given - else - @previous_type = type - end - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/text_mate_formatter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/text_mate_formatter.rb deleted file mode 100644 index 4c0a9c7de..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/formatter/text_mate_formatter.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'spec/runner/formatter/html_formatter' - -module Spec - module Runner - module Formatter - # Formats backtraces so they're clickable by TextMate - class TextMateFormatter < HtmlFormatter - def backtrace_line(line) - line.gsub(/([^:]*\.rb):(\d*)/) do - "#{$1}:#{$2} " - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner.rb deleted file mode 100644 index 7695fe794..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner.rb +++ /dev/null @@ -1,72 +0,0 @@ -begin - require 'rubygems' - require 'heckle' -rescue LoadError ; raise "You must gem install heckle to use --heckle" ; end - -module Spec - module Runner - # Creates a new Heckler configured to heckle all methods in the classes - # whose name matches +filter+ - class HeckleRunner - def initialize(filter, heckle_class=Heckler) - @filter = filter - @heckle_class = heckle_class - end - - # Runs all the example groups held by +rspec_options+ once for each of the - # methods in the matched classes. - def heckle_with - if @filter =~ /(.*)[#\.](.*)/ - heckle_method($1, $2) - else - heckle_class_or_module(@filter) - end - end - - def heckle_method(class_name, method_name) - verify_constant(class_name) - heckle = @heckle_class.new(class_name, method_name, rspec_options) - heckle.validate - end - - def heckle_class_or_module(class_or_module_name) - verify_constant(class_or_module_name) - pattern = /^#{class_or_module_name}/ - classes = [] - ObjectSpace.each_object(Class) do |klass| - classes << klass if klass.name =~ pattern - end - - classes.each do |klass| - klass.instance_methods(false).each do |method_name| - heckle = @heckle_class.new(klass.name, method_name, rspec_options) - heckle.validate - end - end - end - - def verify_constant(name) - begin - # This is defined in Heckle - name.to_class - rescue - raise "Heckling failed - \"#{name}\" is not a known class or module" - end - end - end - - #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base) - class Heckler < (Heckle.const_defined?(:Base) ? Heckle::Base : Heckle) - def initialize(klass_name, method_name, rspec_options) - super(klass_name, method_name) - @rspec_options = rspec_options - end - - def tests_pass? - success = @rspec_options.run_examples - success - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner_unsupported.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner_unsupported.rb deleted file mode 100644 index 02aa37953..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/heckle_runner_unsupported.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Spec - module Runner - # Dummy implementation for Windows that just fails (Heckle is not supported on Windows) - class HeckleRunner - def initialize(filter) - raise "Heckle not supported on Windows" - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/option_parser.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/option_parser.rb deleted file mode 100644 index 09cedccac..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/option_parser.rb +++ /dev/null @@ -1,229 +0,0 @@ -require 'optparse' -require 'stringio' - -module Spec - module Runner - class OptionParser < ::OptionParser - class << self - def parse(args, err, out) - parser = new(err, out) - parser.parse(args) - parser.options - end - end - - attr_reader :options - - OPTIONS = { - :diff => ["-D", "--diff [FORMAT]", "Show diff of objects that are expected to be equal when they are not", - "Builtin formats: unified|u|context|c", - "You can also specify a custom differ class", - "(in which case you should also specify --require)"], - :colour => ["-c", "--colour", "--color", "Show coloured (red/green) output"], - :example => ["-e", "--example [NAME|FILE_NAME]", "Execute example(s) with matching name(s). If the argument is", - "the path to an existing file (typically generated by a previous", - "run using --format failing_examples:file.txt), then the examples", - "on each line of thatfile will be executed. If the file is empty,", - "all examples will be run (as if --example was not specified).", - " ", - "If the argument is not an existing file, then it is treated as", - "an example name directly, causing RSpec to run just the example", - "matching that name"], - :specification => ["-s", "--specification [NAME]", "DEPRECATED - use -e instead", "(This will be removed when autotest works with -e)"], - :line => ["-l", "--line LINE_NUMBER", Integer, "Execute behaviout or specification at given line.", - "(does not work for dynamically generated specs)"], - :format => ["-f", "--format FORMAT[:WHERE]", "Specifies what format to use for output. Specify WHERE to tell", - "the formatter where to write the output. All built-in formats", - "expect WHERE to be a file name, and will write to STDOUT if it's", - "not specified. The --format option may be specified several times", - "if you want several outputs", - " ", - "Builtin formats for examples: ", - "progress|p : Text progress", - "profile|o : Text progress with profiling of 10 slowest examples", - "specdoc|s : Example doc as text", - "html|h : A nice HTML report", - "failing_examples|e : Write all failing examples - input for --example", - "failing_example_groups|g : Write all failing example groups - input for --example", - " ", - "Builtin formats for stories: ", - "plain|p : Plain Text", - "html|h : A nice HTML report", - " ", - "FORMAT can also be the name of a custom formatter class", - "(in which case you should also specify --require to load it)"], - :require => ["-r", "--require FILE", "Require FILE before running specs", - "Useful for loading custom formatters or other extensions.", - "If this option is used it must come before the others"], - :backtrace => ["-b", "--backtrace", "Output full backtrace"], - :loadby => ["-L", "--loadby STRATEGY", "Specify the strategy by which spec files should be loaded.", - "STRATEGY can currently only be 'mtime' (File modification time)", - "By default, spec files are loaded in alphabetical order if --loadby", - "is not specified."], - :reverse => ["-R", "--reverse", "Run examples in reverse order"], - :timeout => ["-t", "--timeout FLOAT", "Interrupt and fail each example that doesn't complete in the", - "specified time"], - :heckle => ["-H", "--heckle CODE", "If all examples pass, this will mutate the classes and methods", - "identified by CODE little by little and run all the examples again", - "for each mutation. The intent is that for each mutation, at least", - "one example *should* fail, and RSpec will tell you if this is not the", - "case. CODE should be either Some::Module, Some::Class or", - "Some::Fabulous#method}"], - :dry_run => ["-d", "--dry-run", "Invokes formatters without executing the examples."], - :options_file => ["-O", "--options PATH", "Read options from a file"], - :generate_options => ["-G", "--generate-options PATH", "Generate an options file for --options"], - :runner => ["-U", "--runner RUNNER", "Use a custom Runner."], - :drb => ["-X", "--drb", "Run examples via DRb. (For example against script/spec_server)"], - :version => ["-v", "--version", "Show version"], - :help => ["-h", "--help", "You're looking at it"] - } - - def initialize(err, out) - super() - @error_stream = err - @out_stream = out - @options = Options.new(@error_stream, @out_stream) - - @spec_parser = SpecParser.new - @file_factory = File - - self.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]" - self.separator "" - on(*OPTIONS[:diff]) {|diff| @options.parse_diff(diff)} - on(*OPTIONS[:colour]) {@options.colour = true} - on(*OPTIONS[:example]) {|example| @options.parse_example(example)} - on(*OPTIONS[:specification]) {|example| @options.parse_example(example)} - on(*OPTIONS[:line]) {|line_number| @options.line_number = line_number.to_i} - on(*OPTIONS[:format]) {|format| @options.parse_format(format)} - on(*OPTIONS[:require]) {|requires| invoke_requires(requires)} - on(*OPTIONS[:backtrace]) {@options.backtrace_tweaker = NoisyBacktraceTweaker.new} - on(*OPTIONS[:loadby]) {|loadby| @options.loadby = loadby} - on(*OPTIONS[:reverse]) {@options.reverse = true} - on(*OPTIONS[:timeout]) {|timeout| @options.timeout = timeout.to_f} - on(*OPTIONS[:heckle]) {|heckle| @options.load_heckle_runner(heckle)} - on(*OPTIONS[:dry_run]) {@options.dry_run = true} - on(*OPTIONS[:options_file]) {|options_file| parse_options_file(options_file)} - on(*OPTIONS[:generate_options]) do |options_file| - end - on(*OPTIONS[:runner]) do |runner| - @options.user_input_for_runner = runner - end - on(*OPTIONS[:drb]) {} - on(*OPTIONS[:version]) {parse_version} - on_tail(*OPTIONS[:help]) {parse_help} - end - - def order!(argv, &blk) - @argv = argv - @options.argv = @argv.dup - return if parse_generate_options - return if parse_drb - - super(@argv) do |file| - @options.files << file - blk.call(file) if blk - end - - if @options.line_number - set_spec_from_line_number - end - - @options - end - - protected - def invoke_requires(requires) - requires.split(",").each do |file| - require file - end - end - - def parse_options_file(options_file) - option_file_args = IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten - @argv.push(*option_file_args) - end - - def parse_generate_options - # Remove the --generate-options option and the argument before writing to file - options_file = nil - ['-G', '--generate-options'].each do |option| - if index = @argv.index(option) - @argv.delete_at(index) - options_file = @argv.delete_at(index) - end - end - - if options_file - write_generated_options(options_file) - return true - else - return false - end - end - - def write_generated_options(options_file) - File.open(options_file, 'w') do |io| - io.puts @argv.join("\n") - end - @out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:" - @out_stream.puts "spec --options #{options_file}" - @options.examples_should_not_be_run - end - - def parse_drb - is_drb = false - argv = @options.argv - is_drb ||= argv.delete(OPTIONS[:drb][0]) - is_drb ||= argv.delete(OPTIONS[:drb][1]) - return nil unless is_drb - @options.examples_should_not_be_run - DrbCommandLine.run( - self.class.parse(argv, @error_stream, @out_stream) - ) - true - end - - def parse_version - @out_stream.puts ::Spec::VERSION::DESCRIPTION - exit if stdout? - end - - def parse_help - @out_stream.puts self - exit if stdout? - end - - def set_spec_from_line_number - if @options.examples.empty? - if @options.files.length == 1 - if @file_factory.file?(@options.files[0]) - source = @file_factory.open(@options.files[0]) - example = @spec_parser.spec_name_for(source, @options.line_number) - @options.parse_example(example) - elsif @file_factory.directory?(@options.files[0]) - @error_stream.puts "You must specify one file, not a directory when using the --line option" - exit(1) if stderr? - else - @error_stream.puts "#{@options.files[0]} does not exist" - exit(2) if stderr? - end - else - @error_stream.puts "Only one file can be specified when using the --line option: #{@options.files.inspect}" - exit(3) if stderr? - end - else - @error_stream.puts "You cannot use both --line and --example" - exit(4) if stderr? - end - end - - def stdout? - @out_stream == $stdout - end - - def stderr? - @error_stream == $stderr - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/options.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/options.rb deleted file mode 100644 index a5a07548d..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/options.rb +++ /dev/null @@ -1,253 +0,0 @@ -module Spec - module Runner - class Options - FILE_SORTERS = { - 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)} - } - - EXAMPLE_FORMATTERS = { # Load these lazily for better speed - 'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], - 's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], - 'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], - 'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], - 'progress' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], - 'p' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], - 'failing_examples' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], - 'e' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], -'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], - 'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], - 'profile' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], - 'o' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], - 'textmate' => ['spec/runner/formatter/text_mate_formatter', 'Formatter::TextMateFormatter'] - } - - STORY_FORMATTERS = { - 'plain' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'], - 'p' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'], - 'html' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter'], - 'h' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter'] - } - - attr_accessor( - :backtrace_tweaker, - :context_lines, - :diff_format, - :dry_run, - :profile, - :examples, - :heckle_runner, - :line_number, - :loadby, - :reporter, - :reverse, - :timeout, - :verbose, - :user_input_for_runner, - :error_stream, - :output_stream, - # TODO: BT - Figure out a better name - :argv - ) - attr_reader :colour, :differ_class, :files, :example_groups - - def initialize(error_stream, output_stream) - @error_stream = error_stream - @output_stream = output_stream - @backtrace_tweaker = QuietBacktraceTweaker.new - @examples = [] - @colour = false - @profile = false - @dry_run = false - @reporter = Reporter.new(self) - @context_lines = 3 - @diff_format = :unified - @files = [] - @example_groups = [] - @examples_run = false - @examples_should_be_run = nil - @user_input_for_runner = nil - end - - def add_example_group(example_group) - @example_groups << example_group - end - - def remove_example_group(example_group) - @example_groups.delete(example_group) - end - - def run_examples - return true unless examples_should_be_run? - runner = custom_runner || ExampleGroupRunner.new(self) - - runner.load_files(files_to_load) - if example_groups.empty? - true - else - success = runner.run - @examples_run = true - heckle if heckle_runner - success - end - end - - def examples_run? - @examples_run - end - - def examples_should_not_be_run - @examples_should_be_run = false - end - - def colour=(colour) - @colour = colour - begin; \ - require 'Win32/Console/ANSI' if @colour && PLATFORM =~ /win32/; \ - rescue LoadError ; \ - raise "You must gem install win32console to use colour on Windows" ; \ - end - end - - def parse_diff(format) - case format - when :context, 'context', 'c' - @diff_format = :context - default_differ - when :unified, 'unified', 'u', '', nil - @diff_format = :unified - default_differ - else - @diff_format = :custom - self.differ_class = load_class(format, 'differ', '--diff') - end - end - - def parse_example(example) - if(File.file?(example)) - @examples = File.open(example).read.split("\n") - else - @examples = [example] - end - end - - def parse_format(format_arg) - format, where = ClassAndArgumentsParser.parse(format_arg) - unless where - raise "When using several --format options only one of them can be without a file" if @out_used - where = @output_stream - @out_used = true - end - @format_options ||= [] - @format_options << [format, where] - end - - def formatters - @format_options ||= [['progress', @output_stream]] - @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS) - end - - def story_formatters - @format_options ||= [['plain', @output_stream]] - @formatters ||= load_formatters(@format_options, STORY_FORMATTERS) - end - - def load_formatters(format_options, formatters) - format_options.map do |format, where| - formatter_type = if formatters[format] - require formatters[format][0] - eval(formatters[format][1], binding, __FILE__, __LINE__) - else - load_class(format, 'formatter', '--format') - end - formatter_type.new(self, where) - end - end - - def load_heckle_runner(heckle) - suffix = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? '_unsupported' : '' - require "spec/runner/heckle_runner#{suffix}" - @heckle_runner = HeckleRunner.new(heckle) - end - - def number_of_examples - @example_groups.inject(0) do |sum, example_group| - sum + example_group.number_of_examples - end - end - - protected - def examples_should_be_run? - return @examples_should_be_run unless @examples_should_be_run.nil? - @examples_should_be_run = true - end - - def differ_class=(klass) - return unless klass - @differ_class = klass - Spec::Expectations.differ = self.differ_class.new(self) - end - - def load_class(name, kind, option) - if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ - arg = $2 == "" ? nil : $2 - [$1, arg] - else - m = "#{name.inspect} is not a valid class name" - @error_stream.puts m - raise m - end - begin - eval(name, binding, __FILE__, __LINE__) - rescue NameError => e - @error_stream.puts "Couldn't find #{kind} class #{name}" - @error_stream.puts "Make sure the --require option is specified *before* #{option}" - if $_spec_spec ; raise e ; else exit(1) ; end - end - end - - def files_to_load - result = [] - sorted_files.each do |file| - if test ?d, file - result += Dir[File.expand_path("#{file}/**/*.rb")] - elsif test ?f, file - result << file - else - raise "File or directory not found: #{file}" - end - end - result - end - - def custom_runner - return nil unless custom_runner? - klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner) - runner_type = load_class(klass_name, 'behaviour runner', '--runner') - return runner_type.new(self, arg) - end - - def custom_runner? - return user_input_for_runner ? true : false - end - - def heckle - returns = self.heckle_runner.heckle_with - self.heckle_runner = nil - returns - end - - def sorted_files - return sorter ? files.sort(&sorter) : files - end - - def sorter - FILE_SORTERS[loadby] - end - - def default_differ - require 'spec/expectations/differs/default' - self.differ_class = Spec::Expectations::Differs::Default - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/reporter.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/reporter.rb deleted file mode 100644 index cfc511baf..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/reporter.rb +++ /dev/null @@ -1,143 +0,0 @@ -module Spec - module Runner - class Reporter - attr_reader :options, :example_groups - - def initialize(options) - @options = options - @options.reporter = self - clear - end - - def add_example_group(example_group) - formatters.each do |f| - f.add_example_group(example_group) - end - example_groups << example_group - end - - def example_started(example) - formatters.each{|f| f.example_started(example)} - end - - def example_finished(example, error=nil) - @examples << example - - if error.nil? - example_passed(example) - elsif Spec::Example::ExamplePendingError === error - example_pending(example_groups.last, example, error.message) - else - example_failed(example, error) - end - end - - def failure(example, error) - backtrace_tweaker.tweak_backtrace(error) - example_name = "#{example_groups.last.description} #{example.description}" - failure = Failure.new(example_name, error) - @failures << failure - formatters.each do |f| - f.example_failed(example, @failures.length, failure) - end - end - alias_method :example_failed, :failure - - def start(number_of_examples) - clear - @start_time = Time.new - formatters.each{|f| f.start(number_of_examples)} - end - - def end - @end_time = Time.new - end - - # Dumps the summary and returns the total number of failures - def dump - formatters.each{|f| f.start_dump} - dump_pending - dump_failures - formatters.each do |f| - f.dump_summary(duration, @examples.length, @failures.length, @pending_count) - f.close - end - @failures.length - end - - private - - def formatters - @options.formatters - end - - def backtrace_tweaker - @options.backtrace_tweaker - end - - def clear - @example_groups = [] - @failures = [] - @pending_count = 0 - @examples = [] - @start_time = nil - @end_time = nil - end - - def dump_failures - return if @failures.empty? - @failures.inject(1) do |index, failure| - formatters.each{|f| f.dump_failure(index, failure)} - index + 1 - end - end - def dump_pending - formatters.each{|f| f.dump_pending} - end - - def duration - return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?) - return "0.0" - end - - def example_passed(example) - formatters.each{|f| f.example_passed(example)} - end - - def example_pending(example_group, example, message="Not Yet Implemented") - @pending_count += 1 - formatters.each do |f| - f.example_pending(example_group.description, example, message) - end - end - - class Failure - attr_reader :exception - - def initialize(example_name, exception) - @example_name = example_name - @exception = exception - end - - def header - if expectation_not_met? - "'#{@example_name}' FAILED" - elsif pending_fixed? - "'#{@example_name}' FIXED" - else - "#{@exception.class.name} in '#{@example_name}'" - end - end - - def pending_fixed? - @exception.is_a?(Spec::Example::PendingExampleFixedError) - end - - def expectation_not_met? - @exception.is_a?(Spec::Expectations::ExpectationNotMetError) - end - - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/runner/spec_parser.rb b/vendor/gems/rspec-1.1.2/lib/spec/runner/spec_parser.rb deleted file mode 100644 index 5ce51e3b2..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/runner/spec_parser.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Spec - module Runner - # Parses a spec file and finds the nearest example for a given line number. - class SpecParser - def spec_name_for(io, line_number) - source = io.read - example_group, example_group_line = example_group_at_line(source, line_number) - example, example_line = example_at_line(source, line_number) - if example_group && example && (example_group_line < example_line) - "#{example_group} #{example}" - elsif example_group - example_group - else - nil - end - end - - protected - - def example_group_at_line(source, line_number) - find_above(source, line_number, /^\s*(context|describe)\s+(.*)\s+do/) - end - - def example_at_line(source, line_number) - find_above(source, line_number, /^\s*(specify|it)\s+(.*)\s+do/) - end - - # Returns the context/describe or specify/it name and the line number - def find_above(source, line_number, pattern) - lines_above_reversed(source, line_number).each_with_index do |line, n| - return [parse_description($2), line_number-n] if line =~ pattern - end - nil - end - - def lines_above_reversed(source, line_number) - lines = source.split("\n") - lines[0...line_number].reverse - end - - def parse_description(str) - return str[1..-2] if str =~ /^['"].*['"]$/ - if matches = /^['"](.*)['"](,.*)?$/.match(str) - return ::Spec::Example::ExampleGroupMethods.description_text(matches[1]) - end - if matches = /^(.*)\s*,\s*['"](.*)['"](,.*)?$/.match(str) - return ::Spec::Example::ExampleGroupMethods.description_text(matches[1], matches[2]) - end - return str - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story.rb b/vendor/gems/rspec-1.1.2/lib/spec/story.rb deleted file mode 100644 index bc6960a28..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec' -require 'spec/story/extensions' -require 'spec/story/given_scenario' -require 'spec/story/runner' -require 'spec/story/scenario' -require 'spec/story/step' -require 'spec/story/step_group' -require 'spec/story/step_mother' -require 'spec/story/story' -require 'spec/story/world' diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/extensions.rb deleted file mode 100644 index dc7dd1140..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'spec/story/extensions/main' -require 'spec/story/extensions/string' -require 'spec/story/extensions/regexp' diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/main.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/main.rb deleted file mode 100644 index 6336b630c..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/main.rb +++ /dev/null @@ -1,86 +0,0 @@ -module Spec - module Story - module Extensions - module Main - def Story(title, narrative, params = {}, &body) - ::Spec::Story::Runner.story_runner.Story(title, narrative, params, &body) - end - - # Calling this deprecated is silly, since it hasn't been released yet. But, for - # those who are reading this - this will be deleted before the 1.1 release. - def run_story(*args, &block) - runner = Spec::Story::Runner::PlainTextStoryRunner.new(*args) - runner.instance_eval(&block) if block - runner.run - end - - # Creates (or appends to an existing) a namespaced group of steps for use in Stories - # - # == Examples - # - # # Creating a new group - # steps_for :forms do - # When("user enters $value in the $field field") do ... end - # When("user submits the $form form") do ... end - # end - def steps_for(tag, &block) - steps = rspec_story_steps[tag] - steps.instance_eval(&block) if block - steps - end - - # Creates a context for running a Plain Text Story with specific groups of Steps. - # Also supports adding arbitrary steps that will only be accessible to - # the Story being run. - # - # == Examples - # - # # Run a Story with one group of steps - # with_steps_for :checking_accounts do - # run File.dirname(__FILE__) + "/withdraw_cash" - # end - # - # # Run a Story, adding steps that are only available for this Story - # with_steps_for :accounts do - # Given "user is logged in as account administrator" - # run File.dirname(__FILE__) + "/reconcile_accounts" - # end - # - # # Run a Story with steps from two groups - # with_steps_for :checking_accounts, :savings_accounts do - # run File.dirname(__FILE__) + "/transfer_money" - # end - # - # # Run a Story with a specific Story extension - # with_steps_for :login, :navigation do - # run File.dirname(__FILE__) + "/user_changes_password", :type => RailsStory - # end - def with_steps_for(*tags, &block) - steps = Spec::Story::StepGroup.new do - extend StoryRunnerStepGroupAdapter - end - tags.each {|tag| steps << rspec_story_steps[tag]} - steps.instance_eval(&block) if block - steps - end - - private - - module StoryRunnerStepGroupAdapter - def run(path, options={}) - runner = Spec::Story::Runner::PlainTextStoryRunner.new(path, options) - runner.steps << self - runner.run - end - end - - def rspec_story_steps # :nodoc: - $rspec_story_steps ||= Spec::Story::StepGroupHash.new - end - - end - end - end -end - -include Spec::Story::Extensions::Main \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/regexp.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/regexp.rb deleted file mode 100644 index 7955b4c33..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/regexp.rb +++ /dev/null @@ -1,9 +0,0 @@ -class Regexp - def step_name - self.source - end - - def arg_regexp - ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/string.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/string.rb deleted file mode 100644 index 896578def..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/extensions/string.rb +++ /dev/null @@ -1,9 +0,0 @@ -class String - def step_name - self - end - - def arg_regexp - ::Spec::Story::Step::PARAM_PATTERN - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/given_scenario.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/given_scenario.rb deleted file mode 100644 index 88c51f981..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/given_scenario.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Spec - module Story - class GivenScenario - def initialize(name) - @name = name - end - - def perform(instance, ignore_name) - scenario = Runner::StoryRunner.scenario_from_current_story(@name) - Runner::ScenarioRunner.new.run(scenario, instance) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner.rb deleted file mode 100644 index 2dd36fbc6..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner.rb +++ /dev/null @@ -1,58 +0,0 @@ -require 'spec/story/runner/scenario_collector.rb' -require 'spec/story/runner/scenario_runner.rb' -require 'spec/story/runner/story_runner.rb' -require 'spec/story/runner/story_parser.rb' -require 'spec/story/runner/story_mediator.rb' -require 'spec/story/runner/plain_text_story_runner.rb' - -module Spec - module Story - module Runner - class << self - def run_options # :nodoc: - @run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout) - end - - def story_runner # :nodoc: - unless @story_runner - @story_runner = StoryRunner.new(scenario_runner, world_creator) - run_options.story_formatters.each do |formatter| - register_listener(formatter) - end - Runner.register_exit_hook - end - @story_runner - end - - def scenario_runner # :nodoc: - @scenario_runner ||= ScenarioRunner.new - end - - def world_creator # :nodoc: - @world_creator ||= World - end - - # Use this to register a customer output formatter. - def register_listener(listener) - story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended - world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed - scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed - end - - def register_exit_hook # :nodoc: - # TODO - when story runner uses test/unit runners like example runner does we can kill - # this and also the assorted Kernel.stub!(:at_exit) in examples - at_exit do - Runner.story_runner.run_stories unless $! - end - # TODO exit with non-zero status if run fails - end - - def dry_run - run_options.dry_run - end - - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/plain_text_story_runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/plain_text_story_runner.rb deleted file mode 100644 index 8d34ea2d2..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/plain_text_story_runner.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Spec - module Story - module Runner - class PlainTextStoryRunner - # You can initialize a PlainTextStoryRunner with the path to the - # story file or a block, in which you can define the path using load. - # - # == Examples - # - # PlainTextStoryRunner.new('path/to/file') - # - # PlainTextStoryRunner.new do |runner| - # runner.load 'path/to/file' - # end - def initialize(*args) - @options = Hash === args.last ? args.pop : {} - @story_file = args.empty? ? nil : args.shift - yield self if block_given? - end - - def []=(key, value) - @options[key] = value - end - - def load(path) - @story_file = path - end - - def run - raise "You must set a path to the file with the story. See the RDoc." if @story_file.nil? - mediator = Spec::Story::Runner::StoryMediator.new(steps, Spec::Story::Runner.story_runner, @options) - parser = Spec::Story::Runner::StoryParser.new(mediator) - - story_text = File.read(@story_file) - parser.parse(story_text.split("\n")) - - mediator.run_stories - end - - def steps - @step_group ||= Spec::Story::StepGroup.new - yield @step_group if block_given? - @step_group - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_collector.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_collector.rb deleted file mode 100644 index 78339fd22..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_collector.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Spec - module Story - module Runner - class ScenarioCollector - attr_accessor :scenarios - - def initialize(story) - @story = story - @scenarios = [] - end - - def Scenario(name, &body) - @scenarios << Scenario.new(@story, name, &body) - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_runner.rb deleted file mode 100644 index aee52e412..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/scenario_runner.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Spec - module Story - module Runner - class ScenarioRunner - def initialize - @listeners = [] - end - - def run(scenario, world) - @listeners.each { |l| l.scenario_started(scenario.story.title, scenario.name) } - run_story_ignoring_scenarios(scenario.story, world) - - world.start_collecting_errors - world.instance_eval(&scenario.body) - if world.errors.empty? - @listeners.each { |l| l.scenario_succeeded(scenario.story.title, scenario.name) } - else - if Spec::Example::ExamplePendingError === (e = world.errors.first) - @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, e.message) } - else - @listeners.each { |l| l.scenario_failed(scenario.story.title, scenario.name, e) } - end - end - end - - def add_listener(listener) - @listeners << listener - end - - private - - def run_story_ignoring_scenarios(story, world) - class << world - def Scenario(name, &block) - # do nothing - end - end - story.run_in(world) - class << world - remove_method(:Scenario) - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb deleted file mode 100644 index 1f4744b9f..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb +++ /dev/null @@ -1,123 +0,0 @@ - module Spec - module Story - module Runner - - class StoryMediator - def initialize(step_group, runner, options={}) - @step_group = step_group - @stories = [] - @runner = runner - @options = options - end - - def stories - @stories.collect { |p| p.to_proc } - end - - def create_story(title, narrative) - @stories << Story.new(title, narrative, @step_group, @options) - end - - def create_scenario(title) - current_story.add_scenario Scenario.new(title) - end - - def create_given(name) - current_scenario.add_step Step.new('Given', name) - end - - def create_given_scenario(name) - current_scenario.add_step Step.new('GivenScenario', name) - end - - def create_when(name) - current_scenario.add_step Step.new('When', name) - end - - def create_then(name) - current_scenario.add_step Step.new('Then', name) - end - - def run_stories - stories.each { |story| @runner.instance_eval(&story) } - end - - private - def current_story - @stories.last - end - - def current_scenario - current_story.current_scenario - end - - class Story - def initialize(title, narrative, step_group, options) - @title = title - @narrative = narrative - @scenarios = [] - @step_group = step_group - @options = options - end - - def to_proc - title = @title - narrative = @narrative - scenarios = @scenarios.collect { |scenario| scenario.to_proc } - options = @options.merge(:steps => @step_group) - lambda do - Story title, narrative, options do - scenarios.each { |scenario| instance_eval(&scenario) } - end - end - end - - def add_scenario(scenario) - @scenarios << scenario - end - - def current_scenario - @scenarios.last - end - end - - class Scenario - def initialize(name) - @name = name - @steps = [] - end - - def to_proc - name = @name - steps = @steps.collect { |step| step.to_proc } - lambda do - Scenario name do - steps.each { |step| instance_eval(&step) } - end - end - end - - def add_step(step) - @steps << step - end - end - - class Step - def initialize(type, name) - @type = type - @name = name - end - - def to_proc - type = @type - name = @name - lambda do - send(type, name) - end - end - end - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_parser.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_parser.rb deleted file mode 100644 index d454df8cb..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_parser.rb +++ /dev/null @@ -1,227 +0,0 @@ -module Spec - module Story - module Runner - - class IllegalStepError < StandardError - def initialize(state, event) - super("Illegal attempt to create a #{event} after a #{state}") - end - end - - class StoryParser - def initialize(story_mediator) - @story_mediator = story_mediator - @current_story_lines = [] - transition_to(:starting_state) - end - - def parse(lines) - lines.reject! {|line| line == ""} - until lines.empty? - process_line(lines.shift) - end - @state.eof - end - - def process_line(line) - line.strip! - case line - when /^Story: / then @state.story(line) - when /^Scenario: / then @state.scenario(line) - when /^Given:? / then @state.given(line) - when /^GivenScenario:? / then @state.given_scenario(line) - when /^When:? / then @state.event(line) - when /^Then:? / then @state.outcome(line) - when /^And:? / then @state.one_more_of_the_same(line) - else @state.other(line) - end - end - - def init_story(title) - @current_story_lines.clear - add_story_line(title) - end - - def add_story_line(line) - @current_story_lines << line - end - - def create_story() - unless @current_story_lines.empty? - @story_mediator.create_story(@current_story_lines[0].gsub("Story: ",""), @current_story_lines[1..-1].join("\n")) - @current_story_lines.clear - end - end - - def create_scenario(title) - @story_mediator.create_scenario(title.gsub("Scenario: ","")) - end - - def create_given(name) - @story_mediator.create_given(name) - end - - def create_given_scenario(name) - @story_mediator.create_given_scenario(name) - end - - def create_when(name) - @story_mediator.create_when(name) - end - - def create_then(name) - @story_mediator.create_then(name) - end - - def transition_to(key) - @state = states[key] - end - - def states - @states ||= { - :starting_state => StartingState.new(self), - :story_state => StoryState.new(self), - :scenario_state => ScenarioState.new(self), - :given_state => GivenState.new(self), - :when_state => WhenState.new(self), - :then_state => ThenState.new(self) - } - end - - class State - def initialize(parser) - @parser = parser - end - - def story(line) - @parser.init_story(line) - @parser.transition_to(:story_state) - end - - def scenario(line) - @parser.create_scenario(line) - @parser.transition_to(:scenario_state) - end - - def given(line) - @parser.create_given(remove_tag_from(:given, line)) - @parser.transition_to(:given_state) - end - - def given_scenario(line) - @parser.create_given_scenario(remove_tag_from(:givenscenario, line)) - @parser.transition_to(:given_state) - end - - def event(line) - @parser.create_when(remove_tag_from(:when, line)) - @parser.transition_to(:when_state) - end - - def outcome(line) - @parser.create_then(remove_tag_from(:then, line)) - @parser.transition_to(:then_state) - end - - def remove_tag_from(tag, line) - tokens = line.split - # validation of tag can go here - tokens[0].downcase.match(/#{tag.to_s}:?/) ? - (tokens[1..-1].join(' ')) : line - end - - def eof - end - - def other(line) - # no-op - supports header text before the first story in a file - end - end - - class StartingState < State - def initialize(parser) - @parser = parser - end - end - - class StoryState < State - def one_more_of_the_same(line) - other(line) - end - - def story(line) - @parser.create_story - @parser.add_story_line(line) - end - - def scenario(line) - @parser.create_story - @parser.create_scenario(line) - @parser.transition_to(:scenario_state) - end - - def given(line) - other(line) - end - - def event(line) - other(line) - end - - def outcome(line) - other(line) - end - - def other(line) - @parser.add_story_line(line) - end - - def eof - @parser.create_story - end - end - - class ScenarioState < State - def one_more_of_the_same(line) - raise IllegalStepError.new("Scenario", "And") - end - - def scenario(line) - @parser.create_scenario(line) - end - end - - class GivenState < State - def one_more_of_the_same(line) - @parser.create_given(remove_tag_from(:and, line)) - end - - def given(line) - @parser.create_given(remove_tag_from(:given, line)) - end - end - - class WhenState < State - def one_more_of_the_same(line) - @parser.create_when(remove_tag_from(:and ,line)) - end - - def event(line) - @parser.create_when(remove_tag_from(:when ,line)) - end - end - - class ThenState < State - def one_more_of_the_same(line) - @parser.create_then(remove_tag_from(:and ,line)) - end - - def outcome(line) - @parser.create_then(remove_tag_from(:then ,line)) - end - end - - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb deleted file mode 100644 index f9eeb9ac1..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_runner.rb +++ /dev/null @@ -1,68 +0,0 @@ -module Spec - module Story - module Runner - class StoryRunner - class << self - attr_accessor :current_story_runner - - def scenario_from_current_story(scenario_name) - current_story_runner.scenario_from_current_story(scenario_name) - end - end - - attr_accessor :stories, :scenarios, :current_story - - def initialize(scenario_runner, world_creator = World) - StoryRunner.current_story_runner = self - @scenario_runner = scenario_runner - @world_creator = world_creator - @stories = [] - @scenarios_by_story = {} - @scenarios = [] - @listeners = [] - end - - def Story(title, narrative, params = {}, &body) - story = Story.new(title, narrative, params, &body) - @stories << story - - # collect scenarios - collector = ScenarioCollector.new(story) - story.run_in(collector) - @scenarios += collector.scenarios - @scenarios_by_story[story.title] = collector.scenarios - end - - def run_stories - return if @stories.empty? - @listeners.each { |l| l.run_started(scenarios.size) } - @stories.each do |story| - story.assign_steps_to(World) - @current_story = story - @listeners.each { |l| l.story_started(story.title, story.narrative) } - scenarios = @scenarios_by_story[story.title] - scenarios.each do |scenario| - type = story[:type] || Object - args = story[:args] || [] - world = @world_creator.create(type, *args) - @scenario_runner.run(scenario, world) - end - @listeners.each { |l| l.story_ended(story.title, story.narrative) } - World.step_mother.clear - end - unique_steps = (World.step_names.collect {|n| Regexp === n ? n.source : n.to_s}).uniq.sort - @listeners.each { |l| l.collected_steps(unique_steps) } - @listeners.each { |l| l.run_ended } - end - - def add_listener(listener) - @listeners << listener - end - - def scenario_from_current_story(scenario_name) - @scenarios_by_story[@current_story.title].find {|s| s.name == scenario_name } - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/scenario.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/scenario.rb deleted file mode 100644 index d83b3eeb8..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/scenario.rb +++ /dev/null @@ -1,14 +0,0 @@ - -module Spec - module Story - class Scenario - attr_accessor :name, :body, :story - - def initialize(story, name, &body) - @story = story - @name = name - @body = body - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/step.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/step.rb deleted file mode 100644 index 1d596e92c..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/step.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Spec - module Story - class Step - PARAM_PATTERN = /(\$\w*)/ - PARAM_OR_GROUP_PATTERN = /(\$\w*)|\(.*?\)/ - - attr_reader :name - def initialize(name, &block) - @name = name - assign_expression(name) - init_module(name, &block) - end - - def perform(instance, *args) - instance.extend(@mod) - instance.__send__(sanitize(@name), *args) - end - - def init_module(name, &block) - sanitized_name = sanitize(name) - @mod = Module.new do - define_method(sanitized_name, &block) - end - end - - def sanitize(a_string_or_regexp) - return a_string_or_regexp.source if Regexp == a_string_or_regexp - a_string_or_regexp.to_s - end - - - def matches?(name) - !(matches = name.match(@expression)).nil? - end - - def parse_args(name) - name.match(@expression)[1..-1] - end - - private - - def assign_expression(name) - expression = name.dup - if String === expression - expression.gsub! '(', '\(' - expression.gsub! ')', '\)' - while expression =~ PARAM_PATTERN - expression.gsub!($1, "(.*?)") - end - end - @expression = Regexp.new("^#{expression}$") - end - - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/step_group.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/step_group.rb deleted file mode 100644 index cae558c40..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/step_group.rb +++ /dev/null @@ -1,89 +0,0 @@ -module Spec - module Story - - class StepGroupHash < Hash - def initialize - super do |h,k| - h[k] = Spec::Story::StepGroup.new - end - end - end - - class StepGroup - def self.steps(&block) - @step_group ||= StepGroup.new(false) - @step_group.instance_eval(&block) if block - @step_group - end - - def initialize(init_defaults=true, &block) - @hash_of_lists_of_steps = Hash.new {|h, k| h[k] = []} - if init_defaults - self.class.steps.add_to(self) - end - instance_eval(&block) if block - end - - def find(type, name) - @hash_of_lists_of_steps[type].each do |step| - return step if step.matches?(name) - end - return nil - end - - def GivenScenario(name, &block) - create_matcher(:given_scenario, name, &block) - end - - def Given(name, &block) - create_matcher(:given, name, &block) - end - - def When(name, &block) - create_matcher(:when, name, &block) - end - - def Then(name, &block) - create_matcher(:then, name, &block) - end - - alias :given_scenario :GivenScenario - alias :given :Given - alias :when :When - alias :then :Then - - def add(type, steps) - (@hash_of_lists_of_steps[type] << steps).flatten! - end - - def clear - @hash_of_lists_of_steps.clear - end - - def empty? - [:given_scenario, :given, :when, :then].each do |type| - return false unless @hash_of_lists_of_steps[type].empty? - end - return true - end - - def add_to(other_step_matchers) - [:given_scenario, :given, :when, :then].each do |type| - other_step_matchers.add(type, @hash_of_lists_of_steps[type]) - end - end - - def <<(other_step_matchers) - other_step_matchers.add_to(self) if other_step_matchers.respond_to?(:add_to) - end - - # TODO - make me private - def create_matcher(type, name, &block) - matcher = Step.new(name, &block) - @hash_of_lists_of_steps[type] << matcher - matcher - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/step_mother.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/step_mother.rb deleted file mode 100644 index a2e84e310..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/step_mother.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Spec - module Story - class StepMother - def initialize - @steps = StepGroup.new - end - - def use(new_step_group) - @steps << new_step_group - end - - def store(type, step) - @steps.add(type, step) - end - - def find(type, name) - if @steps.find(type, name).nil? - @steps.add(type, - Step.new(name) do - raise Spec::Example::ExamplePendingError.new("Unimplemented step: #{name}") - end - ) - end - @steps.find(type, name) - end - - def clear - @steps.clear - end - - def empty? - @steps.empty? - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/story.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/story.rb deleted file mode 100644 index 112e9414b..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/story.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Spec - module Story - class Story - attr_reader :title, :narrative - - def initialize(title, narrative, params = {}, &body) - @body = body - @title = title - @narrative = narrative - @params = params - end - - def [](key) - @params[key] - end - - def run_in(obj) - obj.instance_eval(&@body) - end - - def assign_steps_to(assignee) - if @params[:steps] - assignee.use(@params[:steps]) - else - case keys = @params[:steps_for] - when Symbol - keys = [keys] - when nil - keys = [] - end - keys.each do |key| - assignee.use(steps_for(key)) - end - end - end - - def steps_for(key) - $rspec_story_steps[key] - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/world.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/world.rb deleted file mode 100644 index 6296537b8..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/story/world.rb +++ /dev/null @@ -1,124 +0,0 @@ -require 'rubygems' -require 'spec/expectations' -require 'spec/matchers' -require 'spec/example/pending' - -module Spec - module Story -=begin - A World represents the actual instance a scenario will run in. - - The runner ensures any instance variables and methods defined anywhere - in a story block are available to all the scenarios. This includes - variables that are created or referenced inside Given, When and Then - blocks. -=end - module World - include ::Spec::Example::Pending - include ::Spec::Matchers - # store steps and listeners in the singleton metaclass. - # This serves both to keep them out of the way of runtime Worlds - # and to make them available to all instances. - class << self - def create(cls = Object, *args) - cls.new(*args).extend(World) - end - - def listeners - @listeners ||= [] - end - - def add_listener(listener) - listeners() << listener - end - - def step_mother - @step_mother ||= StepMother.new - end - - def use(steps) - step_mother.use(steps) - end - - def step_names - @step_names ||= [] - end - - def run_given_scenario_with_suspended_listeners(world, type, name, scenario) - current_listeners = Array.new(listeners) - begin - listeners.each { |l| l.found_scenario(type, name) } - @listeners.clear - scenario.perform(world, name) unless ::Spec::Story::Runner.dry_run - ensure - @listeners.replace(current_listeners) - end - end - - def store_and_call(world, type, name, *args, &block) - if block_given? - step_mother.store(type, Step.new(name, &block)) - end - step = step_mother.find(type, name) - - step_name = step.name - step_names << step_name - - # It's important to have access to the parsed args here, so - # we can give them to the listeners. The HTML reporter needs - # the args so it can style them. See the generated output in - # story_server/prototype/rspec_stories.html (generated by rake stories) - args = step.parse_args(name) if args.empty? - begin - step.perform(world, *args) unless ::Spec::Story::Runner.dry_run - listeners.each { |l| l.step_succeeded(type, step_name, *args) } - rescue Exception => e - case e - when Spec::Example::ExamplePendingError - @listeners.each { |l| l.step_pending(type, step_name, *args) } - else - @listeners.each { |l| l.step_failed(type, step_name, *args) } - end - errors << e - end - end - - def errors - @errors ||= [] - end - end # end of class << self - - def start_collecting_errors - errors.clear - end - - def errors - World.errors - end - - def GivenScenario(name) - World.run_given_scenario_with_suspended_listeners(self, :'given scenario', name, GivenScenario.new(name)) - @__previous_step = :given - end - - def Given(name, *args, &block) - World.store_and_call self, :given, name, *args, &block - @__previous_step = :given - end - - def When(name, *args, &block) - World.store_and_call self, :when, name, *args, &block - @__previous_step = :when - end - - def Then(name, *args, &block) - World.store_and_call self, :then, name, *args, &block - @__previous_step = :then - end - - def And(name, *args, &block) - World.store_and_call self, @__previous_step, name, *args, &block - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/translator.rb b/vendor/gems/rspec-1.1.2/lib/spec/translator.rb deleted file mode 100644 index c1e07eda4..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/translator.rb +++ /dev/null @@ -1,114 +0,0 @@ -require 'fileutils' - -module Spec - class Translator - def translate(from, to) - from = File.expand_path(from) - to = File.expand_path(to) - if File.directory?(from) - translate_dir(from, to) - elsif(from =~ /\.rb$/) - translate_file(from, to) - end - end - - def translate_dir(from, to) - FileUtils.mkdir_p(to) unless File.directory?(to) - Dir["#{from}/*"].each do |sub_from| - path = sub_from[from.length+1..-1] - sub_to = File.join(to, path) - translate(sub_from, sub_to) - end - end - - def translate_file(from, to) - translation = "" - File.open(from) do |io| - io.each_line do |line| - translation << translate_line(line) - end - end - File.open(to, "w") do |io| - io.write(translation) - end - end - - def translate_line(line) - # Translate deprecated mock constraints - line.gsub!(/:any_args/, 'any_args') - line.gsub!(/:anything/, 'anything') - line.gsub!(/:boolean/, 'boolean') - line.gsub!(/:no_args/, 'no_args') - line.gsub!(/:numeric/, 'an_instance_of(Numeric)') - line.gsub!(/:string/, 'an_instance_of(String)') - - return line if line =~ /(should_not|should)_receive/ - - line.gsub!(/(^\s*)context([\s*|\(]['|"|A-Z])/, '\1describe\2') - line.gsub!(/(^\s*)specify([\s*|\(]['|"|A-Z])/, '\1it\2') - line.gsub!(/(^\s*)context_setup(\s*[do|\{])/, '\1before(:all)\2') - line.gsub!(/(^\s*)context_teardown(\s*[do|\{])/, '\1after(:all)\2') - line.gsub!(/(^\s*)setup(\s*[do|\{])/, '\1before(:each)\2') - line.gsub!(/(^\s*)teardown(\s*[do|\{])/, '\1after(:each)\2') - - if line =~ /(.*\.)(should_not|should)(?:_be)(?!_)(.*)/m - pre = $1 - should = $2 - post = $3 - be_or_equal = post =~ /(<|>)/ ? "be" : "equal" - - return "#{pre}#{should} #{be_or_equal}#{post}" - end - - if line =~ /(.*\.)(should_not|should)_(?!not)\s*(.*)/m - pre = $1 - should = $2 - post = $3 - - post.gsub!(/^raise/, 'raise_error') - post.gsub!(/^throw/, 'throw_symbol') - - unless standard_matcher?(post) - post = "be_#{post}" - end - - # Add parenthesis - post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\'|\"|\:|@| ]+)(\})/, '\1(\2)\3') # inside a block - post.gsub!(/^(redirect_to)\s+(.*)/, '\1(\2)') # redirect_to, which often has http: - post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\{.*\}|\'|\"|\:|@| ]+)/, '\1(\2)') - post.gsub!(/(\s+\))/, ')') - post.gsub!(/\)\}/, ') }') - post.gsub!(/^(\w+)\s+(\/.*\/)/, '\1(\2)') #regexps - line = "#{pre}#{should} #{post}" - end - - line - end - - def standard_matcher?(matcher) - patterns = [ - /^be/, - /^be_close/, - /^eql/, - /^equal/, - /^has/, - /^have/, - /^change/, - /^include/, - /^match/, - /^raise_error/, - /^respond_to/, - /^redirect_to/, - /^satisfy/, - /^throw_symbol/, - # Extra ones that we use in spec_helper - /^pass/, - /^fail/, - /^fail_with/, - ] - matched = patterns.detect{ |p| matcher =~ p } - !matched.nil? - end - - end -end diff --git a/vendor/gems/rspec-1.1.2/lib/spec/version.rb b/vendor/gems/rspec-1.1.2/lib/spec/version.rb deleted file mode 100644 index f83a4c697..000000000 --- a/vendor/gems/rspec-1.1.2/lib/spec/version.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Spec - module VERSION - unless defined? MAJOR - MAJOR = 1 - MINOR = 1 - TINY = 2 - RELEASE_CANDIDATE = nil - - BUILD_TIME_UTC = 20080114022430 - - STRING = [MAJOR, MINOR, TINY].join('.') - TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_') - FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})" - - NAME = "RSpec" - URL = "http://rspec.rubyforge.org/" - - DESCRIPTION = "#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}" - end - end -end - diff --git a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/flexmock.rb b/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/flexmock.rb deleted file mode 100644 index 6875a5222..000000000 --- a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/flexmock.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# -# Created by Jim Weirich on 2007-04-10. -# Copyright (c) 2007. All rights reserved. - -require 'flexmock/rspec' - -module Spec - module Plugins - module MockFramework - include FlexMock::MockContainer - def setup_mocks_for_rspec - # No setup required - end - def verify_mocks_for_rspec - flexmock_verify - end - def teardown_mocks_for_rspec - flexmock_close - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/mocha.rb b/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/mocha.rb deleted file mode 100644 index 69d11636c..000000000 --- a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/mocha.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'mocha/standalone' -require 'mocha/object' - -module Spec - module Plugins - module MockFramework - include Mocha::Standalone - def setup_mocks_for_rspec - mocha_setup - end - def verify_mocks_for_rspec - mocha_verify - end - def teardown_mocks_for_rspec - mocha_teardown - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rr.rb b/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rr.rb deleted file mode 100644 index c019c18a1..000000000 --- a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rr.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'rr' - -patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS -patterns.push(RR::Errors::BACKTRACE_IDENTIFIER) - -module Spec - module Plugins - module MockFramework - include RR::Extensions::InstanceMethods - def setup_mocks_for_rspec - RR::Space.instance.reset - end - def verify_mocks_for_rspec - RR::Space.instance.verify_doubles - end - def teardown_mocks_for_rspec - RR::Space.instance.reset - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rspec.rb b/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rspec.rb deleted file mode 100644 index ce215ace2..000000000 --- a/vendor/gems/rspec-1.1.2/plugins/mock_frameworks/rspec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "spec", "mocks")) - -module Spec - module Plugins - module MockFramework - include Spec::Mocks::ExampleMethods - def setup_mocks_for_rspec - $rspec_mocks ||= Spec::Mocks::Space.new - end - def verify_mocks_for_rspec - $rspec_mocks.verify_all - end - def teardown_mocks_for_rspec - $rspec_mocks.reset_all - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/autotest/discover_spec.rb b/vendor/gems/rspec-1.1.2/spec/autotest/discover_spec.rb deleted file mode 100644 index da5cb1445..000000000 --- a/vendor/gems/rspec-1.1.2/spec/autotest/discover_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require File.dirname(__FILE__) + "/../autotest_helper" - -module DiscoveryHelper - def load_discovery - require File.dirname(__FILE__) + "/../../lib/autotest/discover" - end -end - - -class Autotest - describe Rspec, "discovery" do - include DiscoveryHelper - - it "should add the rspec autotest plugin" do - Autotest.should_receive(:add_discovery).and_yield - load_discovery - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/autotest/rspec_spec.rb b/vendor/gems/rspec-1.1.2/spec/autotest/rspec_spec.rb deleted file mode 100644 index 64c020de9..000000000 --- a/vendor/gems/rspec-1.1.2/spec/autotest/rspec_spec.rb +++ /dev/null @@ -1,264 +0,0 @@ -require File.dirname(__FILE__) + "/../autotest_helper" - -class Autotest - - module AutotestHelper - def rspec_output - <<-HERE -.............PPF - -1) -'false should be false' FAILED -expected: true, - got: false (using ==) -./spec/autotest/rspec_spec.rb:203: - -Finished in 0.158674 seconds - -16 examples, 1 failure, 2 pending - -Pending: -Autotest::Rspec handling failed results should return an array of failed examples and errors (TODO) -Autotest::Rspec tests/specs for a given file should find all the specs for a given file (TODO) -HERE - end - - - def common_setup - @proc = mock Proc - @kernel = mock Kernel - @kernel.stub!(:proc).and_return @proc - - File.stub!(:exists).and_return true - @windows_alt_separator = "\\" - @posix_separator = '/' - - @rspec_output = rspec_output - end - end - - describe Rspec, "rspec_commands" do - it "should contain the various commands, ordered by preference" do - Rspec.new.spec_commands.should == [ - File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec"), - "#{Config::CONFIG['bindir']}/spec" - ] - end - end - - describe Rspec, "selection of rspec command" do - include AutotestHelper - - before :each do - common_setup - @rspec_autotest = Rspec.new - end - - it "should try to find the spec command if it exists in ./bin and use it above everything else" do - File.stub!(:exists?).and_return true - - spec_path = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") - File.should_receive(:exists?).with(spec_path).and_return true - @rspec_autotest.spec_command.should == spec_path - end - - it "should otherwise select the default spec command in gem_dir/bin/spec" do - @rspec_autotest.stub!(:spec_commands).and_return ["/foo/spec"] - Config::CONFIG.stub!(:[]).and_return "/foo" - File.should_receive(:exists?).with("/foo/spec").and_return(true) - - @rspec_autotest.spec_command.should == "/foo/spec" - end - - it "should raise an error if no spec command is found at all" do - File.stub!(:exists?).and_return false - - lambda { - @rspec_autotest.spec_command - }.should raise_error(RspecCommandError, "No spec command could be found!") - end - - end - - describe Rspec, "selection of rspec command (windows compatibility issues)" do - include AutotestHelper - - before :each do - common_setup - end - - it "should use the ALT_SEPARATOR if it is non-nil" do - pending("autotest got re-worked so this is failing for the moment") - @rspec_autotest = Rspec.new - spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") - @rspec_autotest.stub!(:spec_commands).and_return [spec_command] - @rspec_autotest.spec_command.should == spec_command.gsub('/', '\\') - end - - it "should not use the ALT_SEPATOR if it is nil" do - @windows_alt_separator = nil - @rspec_autotest = Rspec.new - spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec") - @rspec_autotest.stub!(:spec_commands).and_return [spec_command] - @rspec_autotest.spec_command.should == spec_command - end - end - - describe Rspec, "adding spec.opts --options" do - before :each do - @rspec_autotest = Rspec.new - end - - it "should return the command line option to add spec.opts if the options file exists" do - File.stub!(:exist?).and_return true - @rspec_autotest.add_options_if_present.should == "-O spec/spec.opts " - end - - it "should return an empty string if no spec.opts exists" do - File.stub!(:exist?).and_return false - Rspec.new.add_options_if_present.should == "" - end - end - - describe Rspec do - before :each do - @rspec_autotest = Rspec.new - @rspec_autotest.stub!(:ruby).and_return "ruby" - @rspec_autotest.stub!(:add_options_if_present).and_return "-O spec/spec.opts" - - @ruby = @rspec_autotest.ruby - @spec_command = @rspec_autotest.spec_command - @options = @rspec_autotest.add_options_if_present - @files_to_test = { - :spec => ["file_one", "file_two"] - } - # this is not the inner representation of Autotest! - @rspec_autotest.stub!(:files_to_test).and_return @files_to_test - @files_to_test.stub!(:keys).and_return @files_to_test[:spec] - @to_test = @files_to_test.keys.flatten.join ' ' - end - - it "should make the apropriate test command" do - @rspec_autotest.make_test_cmd(@files_to_test).should == "#{@ruby} -S #{@spec_command} #{@options} #{@to_test}" - end - end - - describe Rspec, "test mappings" do - before :each do - @rspec_autotest = Rspec.new - @rspec_autotest.hook :initialize - end - - it "should map all filenames in spec/ which end in .rb" do - @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^spec/.*\.rb$%) - end - - it "should map all names in lib which end in .rb to the corresponding ones in spec/" do - @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^lib/(.*)\.rb$%) - end - - it "should find all files in spec/shares/* and the spec helper in spec/spec_helper" do - @rspec_autotest.instance_eval{@test_mappings}.should have_key(%r%^spec/(spec_helper|shared/.*)\.rb$%) - end - end - - describe Rspec, "handling results" do - include AutotestHelper - - before :each do - common_setup - @rspec_autotest = Rspec.new - @rspec_autotest.stub!(:hook) - - @results = mock String - @results.stub!(:scan).and_return "" - end - - it "should call hook(:red) if there are failures" do - @rspec_autotest.stub!(:consolidate_failures).and_return ["spec/some_spec.rb"] - - @rspec_autotest.should_receive(:hook).with(:red) - @rspec_autotest.handle_results(@results) - end - - it "should call hook(:green) if there are no failures" do - @rspec_autotest.stub!(:consolidate_failures).and_return [] - @rspec_autotest.should_receive(:hook).with(:green) - @rspec_autotest.handle_results(@results) - end - end - - describe Rspec, "handling failed results" do - include AutotestHelper - - before :each do - common_setup - end - - it %(should scan the output into a multi-dimensional array, - consisting of the failing spec's name as the first element, - and the failure as the second) do - @rspec_autotest = Rspec.new - @rspec_autotest.failed_results(@rspec_output).should == [ - [ - "false should be false", - "expected: true,\n got: false (using ==)\n./spec/autotest/rspec_spec.rb:203:" - ] - ] - end - end - - describe Rspec, "specs for a given file" do - before :each do - @lib_file = "lib/something.rb" - @spec_file = "spec/something_spec.rb" - @rspec_autotest = Rspec.new - @rspec_autotest.hook :initialize - - @rspec_autotest.instance_variable_set("@files", {@lib_file => Time.now, @spec_file => Time.now}) - @rspec_autotest.stub!(:find_files_to_test).and_return true - end - - it "should find the spec file for a given lib file" do - @rspec_autotest.specs_for_file(@lib_file).should == [@spec_file] - end - - it "should find the spec file if given a spec file" do - @rspec_autotest.specs_for_file(@spec_file).should == [@spec_file] - end - - it "should only find the file if the file is being tracked (in @file)" do - @other_file = "lib/some_non_tracked_file" - @rspec_autotest.specs_for_file(@other_file).should == [] - end - end - - describe Rspec, "consolidating failures" do - include AutotestHelper - - before :each do - common_setup - @rspec_autotest = Rspec.new - - @spec_file = "./spec/autotest/rspec_spec.rb" - @rspec_autotest.instance_variable_set("@files", {@spec_file => Time.now}) - @rspec_autotest.stub!(:find_files_to_test).and_return true - end - - it "should return no failures if no failures were given in the output" do - @rspec_autotest.stub!(:failed_results).and_return [[]] - @rspec_autotest.consolidate_failures(@rspec_autotest.failed_results).should == {} - end - - it "should return a hash with the spec filename => spec name for each failure or error" do - @rspec_autotest.stub!(:failed_results).and_return([ - [ - "false should be false", - "expected: true,\n got: false (using ==)\n./spec/autotest/rspec_spec.rb:203:" - ] - ]) - @rspec_autotest.consolidate_failures(@rspec_autotest.failed_results).should == {@spec_file => ["false should be false"]} - end - - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/autotest_helper.rb b/vendor/gems/rspec-1.1.2/spec/autotest_helper.rb deleted file mode 100644 index 6d994eaa2..000000000 --- a/vendor/gems/rspec-1.1.2/spec/autotest_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -require "rubygems" -require 'autotest' -dir = File.dirname(__FILE__) -require "#{dir}/spec_helper" -require File.expand_path("#{dir}/../lib/autotest/rspec") \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/rspec_suite.rb b/vendor/gems/rspec-1.1.2/spec/rspec_suite.rb deleted file mode 100644 index ae076bbf1..000000000 --- a/vendor/gems/rspec-1.1.2/spec/rspec_suite.rb +++ /dev/null @@ -1,7 +0,0 @@ -if __FILE__ == $0 - dir = File.dirname(__FILE__) - Dir["#{dir}/**/*_spec.rb"].each do |file| -# puts "require '#{file}'" - require file - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/ruby_forker.rb b/vendor/gems/rspec-1.1.2/spec/ruby_forker.rb deleted file mode 100644 index 6ab038750..000000000 --- a/vendor/gems/rspec-1.1.2/spec/ruby_forker.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'rbconfig' - -module RubyForker - # Forks a ruby interpreter with same type as ourself. - # juby will fork jruby, ruby will fork ruby etc. - def ruby(args, stderr=nil) - config = ::Config::CONFIG - interpreter = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT'] - cmd = "#{interpreter} #{args}" - cmd << " 2> #{stderr}" unless stderr.nil? - `#{cmd}` - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/configuration_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/configuration_spec.rb deleted file mode 100644 index 5b4a6049e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/configuration_spec.rb +++ /dev/null @@ -1,282 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Example - - describe Configuration do - before(:each) do - @config = Configuration.new - @example_group = mock("example_group") - end - - describe "#mock_with" do - - it "should default mock framework to rspec" do - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ - end - - it "should let you set rspec mocking explicitly" do - @config.mock_with(:rspec) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ - end - - it "should let you set mocha" do - @config.mock_with(:mocha) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/ - end - - it "should let you set flexmock" do - @config.mock_with(:flexmock) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/ - end - - it "should let you set rr" do - @config.mock_with(:rr) - @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rr$/ - end - - it "should let you set an arbitrary adapter module" do - adapter = Module.new - @config.mock_with(adapter) - @config.mock_framework.should == adapter - end - end - - describe "#include" do - - before do - @original_configuration = Spec::Runner.configuration - spec_configuration = @config - Spec::Runner.instance_eval {@configuration = spec_configuration} - @example_group_class = Class.new(ExampleGroup) do - class << self - def this_class_has_special_methods - end - end - end - ExampleGroupFactory.register(:foobar, @example_group_class) - end - - after do - original_configuration = @original_configuration - Spec::Runner.instance_eval {@configuration = original_configuration} - ExampleGroupFactory.reset - end - - it "should include the submitted module in ExampleGroup subclasses" do - mod = Module.new - @config.include mod - Class.new(@example_group_class).included_modules.should include(mod) - end - - it "should let you define modules to be included for a specific type" do - mod = Module.new - @config.include mod, :type => :foobar - Class.new(@example_group_class).included_modules.should include(mod) - end - - it "should not include modules in a type they are not intended for" do - mod = Module.new - @other_example_group_class = Class.new(ExampleGroup) - ExampleGroupFactory.register(:baz, @other_example_group_class) - - @config.include mod, :type => :foobar - - Class.new(@other_example_group_class).included_modules.should_not include(mod) - end - - end - - end - - describe Configuration do - - before(:each) do - @config = Configuration.new - @special_example_group = Class.new(ExampleGroup) - @special_child_example_group = Class.new(@special_example_group) - @nonspecial_example_group = Class.new(ExampleGroup) - ExampleGroupFactory.register(:special, @special_example_group) - ExampleGroupFactory.register(:special_child, @special_child_example_group) - ExampleGroupFactory.register(:non_special, @nonspecial_example_group) - @example_group = @special_child_example_group.describe "Special Example Group" - @unselected_example_group = Class.new(@nonspecial_example_group).describe "Non Special Example Group" - end - - after(:each) do - ExampleGroupFactory.reset - end - - describe "#prepend_before" do - it "prepends the before block on all instances of the passed in type" do - order = [] - @config.prepend_before(:all) do - order << :prepend__before_all - end - @config.prepend_before(:all, :type => :special) do - order << :special_prepend__before_all - end - @config.prepend_before(:all, :type => :special_child) do - order << :special_child_prepend__before_all - end - @config.prepend_before(:each) do - order << :prepend__before_each - end - @config.prepend_before(:each, :type => :special) do - order << :special_prepend__before_each - end - @config.prepend_before(:each, :type => :special_child) do - order << :special_child_prepend__before_each - end - @config.prepend_before(:all, :type => :non_special) do - order << :special_prepend__before_all - end - @config.prepend_before(:each, :type => :non_special) do - order << :special_prepend__before_each - end - @example_group.it "calls prepend_before" do - end - - @example_group.run - order.should == [ - :prepend__before_all, - :special_prepend__before_all, - :special_child_prepend__before_all, - :prepend__before_each, - :special_prepend__before_each, - :special_child_prepend__before_each - ] - end - end - - describe "#append_before" do - - it "calls append_before on the type" do - order = [] - @config.append_before(:all) do - order << :append_before_all - end - @config.append_before(:all, :type => :special) do - order << :special_append_before_all - end - @config.append_before(:all, :type => :special_child) do - order << :special_child_append_before_all - end - @config.append_before(:each) do - order << :append_before_each - end - @config.append_before(:each, :type => :special) do - order << :special_append_before_each - end - @config.append_before(:each, :type => :special_child) do - order << :special_child_append_before_each - end - @config.append_before(:all, :type => :non_special) do - order << :special_append_before_all - end - @config.append_before(:each, :type => :non_special) do - order << :special_append_before_each - end - @example_group.it "calls append_before" do - end - - @example_group.run - order.should == [ - :append_before_all, - :special_append_before_all, - :special_child_append_before_all, - :append_before_each, - :special_append_before_each, - :special_child_append_before_each - ] - end - end - - describe "#prepend_after" do - - it "prepends the after block on all instances of the passed in type" do - order = [] - @config.prepend_after(:all) do - order << :prepend__after_all - end - @config.prepend_after(:all, :type => :special) do - order << :special_prepend__after_all - end - @config.prepend_after(:all, :type => :special) do - order << :special_child_prepend__after_all - end - @config.prepend_after(:each) do - order << :prepend__after_each - end - @config.prepend_after(:each, :type => :special) do - order << :special_prepend__after_each - end - @config.prepend_after(:each, :type => :special) do - order << :special_child_prepend__after_each - end - @config.prepend_after(:all, :type => :non_special) do - order << :special_prepend__after_all - end - @config.prepend_after(:each, :type => :non_special) do - order << :special_prepend__after_each - end - @example_group.it "calls prepend_after" do - end - - @example_group.run - order.should == [ - :special_child_prepend__after_each, - :special_prepend__after_each, - :prepend__after_each, - :special_child_prepend__after_all, - :special_prepend__after_all, - :prepend__after_all - ] - end - end - - describe "#append_after" do - - it "calls append_after on the type" do - order = [] - @config.append_after(:all) do - order << :append__after_all - end - @config.append_after(:all, :type => :special) do - order << :special_append__after_all - end - @config.append_after(:all, :type => :special_child) do - order << :special_child_append__after_all - end - @config.append_after(:each) do - order << :append__after_each - end - @config.append_after(:each, :type => :special) do - order << :special_append__after_each - end - @config.append_after(:each, :type => :special_child) do - order << :special_child_append__after_each - end - @config.append_after(:all, :type => :non_special) do - order << :non_special_append_after_all - end - @config.append_after(:each, :type => :non_special) do - order << :non_special_append_after_each - end - @example_group.it "calls append_after" do - end - - @example_group.run - order.should == [ - :special_child_append__after_each, - :special_append__after_each, - :append__after_each, - :special_child_append__after_all, - :special_append__after_all, - :append__after_all - ] - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_class_definition_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_class_definition_spec.rb deleted file mode 100644 index 0b00e1397..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_class_definition_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - class ExampleGroupSubclass < ExampleGroup - class << self - attr_accessor :examples_ran - end - - @@klass_variable_set = true - CONSTANT = :foobar - - before do - @instance_variable = :hello - end - - it "should run" do - self.class.examples_ran = true - end - - it "should have access to instance variables" do - @instance_variable.should == :hello - end - - it "should have access to class variables" do - @@klass_variable_set.should == true - end - - it "should have access to constants" do - CONSTANT.should == :foobar - end - - it "should have access to methods defined in the Example Group" do - a_method.should == 22 - end - - def a_method - 22 - end - end - - describe ExampleGroupSubclass do - it "should run" do - ExampleGroupSubclass.examples_ran.should be_true - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_factory_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_factory_spec.rb deleted file mode 100644 index 3b50011f7..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_factory_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - describe ExampleGroupFactory, "with :foobar registered as custom type" do - - before do - @example_group = Class.new(ExampleGroup) - ExampleGroupFactory.register(:foobar, @example_group) - end - - after do - ExampleGroupFactory.reset - end - - it "should #get the default ExampleGroup type when passed nil" do - ExampleGroupFactory.get(nil).should == ExampleGroup - end - - it "should #get the default ExampleGroup for unregistered non-nil values" do - ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup - end - - it "should #get custom type for :foobar" do - ExampleGroupFactory.get(:foobar).should == @example_group - end - - it "should #get the actual type when that is passed in" do - ExampleGroupFactory.get(@example_group).should == @example_group - end - - end - - describe ExampleGroupFactory, "#create_example_group" do - it "should create a uniquely named class" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {} - example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/ - end - - it "should create a Spec::Example::Example subclass by default" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {} - example_group.superclass.should == Spec::Example::ExampleGroup - end - - it "should create a Spec::Example::Example when :type => :default" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "example_group", :type => :default - ) {} - example_group.superclass.should == Spec::Example::ExampleGroup - end - - it "should create a Spec::Example::Example when :type => :default" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "example_group", :type => :default - ) {} - example_group.superclass.should == Spec::Example::ExampleGroup - end - - it "should create specified type when :type => :something_other_than_default" do - klass = Class.new(ExampleGroup) do - def initialize(*args, &block); end - end - Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "example_group", :type => :something_other_than_default - ) {} - example_group.superclass.should == klass - end - - it "should create a type indicated by :spec_path" do - klass = Class.new(ExampleGroup) do - def initialize(*args, &block); end - end - Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb" - ) {} - example_group.superclass.should == klass - end - - it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do - klass = Class.new(ExampleGroup) do - def initialize(*args, &block); end - end - Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "example_group", :spec_path => "./spec\\something_other_than_default\\some_spec.rb" - ) {} - example_group.superclass.should == klass - end - - it "should create and register a Spec::Example::Example if :shared => true" do - shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true - ) {} - shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup) - SharedExampleGroup.shared_example_groups.should include(shared_example_group) - end - - it "should favor the :type over the :spec_path" do - klass = Class.new(ExampleGroup) do - def initialize(*args, &block); end - end - Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) - example_group = Spec::Example::ExampleGroupFactory.create_example_group( - "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default - ) {} - example_group.superclass.should == klass - end - - it "should register ExampleGroup by default" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do - end - rspec_options.example_groups.should include(example_group) - end - - it "should enable unregistering of ExampleGroups" do - example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do - unregister - end - rspec_options.example_groups.should_not include(example_group) - end - - after(:each) do - Spec::Example::ExampleGroupFactory.reset - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb deleted file mode 100644 index fa08e6fca..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb +++ /dev/null @@ -1,480 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - describe 'ExampleGroupMethods' do - it_should_behave_like "sandboxed rspec_options" - attr_reader :example_group, :result, :reporter - before(:each) do - options.formatters << mock("formatter", :null_object => true) - options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true) - @reporter = FakeReporter.new(@options) - options.reporter = reporter - @example_group = Class.new(ExampleGroup) do - describe("ExampleGroup") - it "does nothing" - end - class << example_group - public :include - end - @result = nil - end - - after(:each) do - ExampleGroup.reset - end - - describe "#describe" do - attr_reader :child_example_group - before do - @child_example_group = @example_group.describe("Another ExampleGroup") do - it "should pass" do - true.should be_true - end - end - end - - it "should create a subclass of the ExampleGroup when passed a block" do - child_example_group.superclass.should == @example_group - @options.example_groups.should include(child_example_group) - end - - it "should not inherit examples" do - child_example_group.examples.length.should == 1 - end - end - - describe "#it" do - it "should should create an example instance" do - lambda { - @example_group.it("") - }.should change { @example_group.examples.length }.by(1) - end - end - - describe "#xit" do - before(:each) do - Kernel.stub!(:warn) - end - - it "should NOT should create an example instance" do - lambda { - @example_group.xit("") - }.should_not change(@example_group.examples, :length) - end - - it "should warn that it is disabled" do - Kernel.should_receive(:warn).with("Example disabled: foo") - @example_group.xit("foo") - end - end - - describe "#examples" do - it "should have Examples" do - example_group = Class.new(ExampleGroup) do - describe('example') - it "should pass" do - 1.should == 1 - end - end - example_group.examples.length.should == 1 - example_group.examples.first.description.should == "should pass" - end - - it "should not include methods that begin with test (only when TU interop is loaded)" do - example_group = Class.new(ExampleGroup) do - describe('example') - def test_any_args(*args) - true.should be_true - end - def test_something - 1.should == 1 - end - def test - raise "This is not a real test" - end - def testify - raise "This is not a real test" - end - end - example_group.examples.length.should == 0 - example_group.run.should be_true - end - - it "should include methods that begin with should and has an arity of 0 in suite" do - example_group = Class.new(ExampleGroup) do - describe('example') - def shouldCamelCase - true.should be_true - end - def should_any_args(*args) - true.should be_true - end - def should_something - 1.should == 1 - end - def should_not_something - 1.should_not == 2 - end - def should - raise "This is not a real example" - end - def should_not - raise "This is not a real example" - end - end - example_group = example_group.dup - example_group.examples.length.should == 4 - descriptions = example_group.examples.collect {|example| example.description}.sort - descriptions.should include("shouldCamelCase") - descriptions.should include("should_any_args") - descriptions.should include("should_something") - descriptions.should include("should_not_something") - end - - it "should not include methods that begin with test_ and has an arity > 0 in suite" do - example_group = Class.new(ExampleGroup) do - describe('example') - def test_invalid(foo) - 1.should == 1 - end - def testInvalidCamelCase(foo) - 1.should == 1 - end - end - example_group.examples.length.should == 0 - end - - it "should not include methods that begin with should_ and has an arity > 0 in suite" do - example_group = Class.new(ExampleGroup) do - describe('example') - def should_invalid(foo) - 1.should == 2 - end - def shouldInvalidCamelCase(foo) - 1.should == 3 - end - def should_not_invalid(foo) - 1.should == 4 - end - def should_valid - 1.should == 1 - end - end - example_group.examples.length.should == 1 - example_group.run.should be_true - end - - it "should run should_methods" do - example_group = Class.new(ExampleGroup) do - def should_valid - 1.should == 2 - end - end - example_group.examples.length.should == 1 - example_group.run.should be_false - end - end - - describe "#set_description" do - attr_reader :example_group - before do - class << example_group - public :set_description - end - end - - describe "#set_description(String)" do - before(:each) do - example_group.set_description("abc") - end - - specify ".description should return the String passed into .set_description" do - example_group.description.should == "abc" - end - - specify ".described_type should provide nil as its type" do - example_group.described_type.should be_nil - end - end - - describe "#set_description(Type)" do - before(:each) do - example_group.set_description(ExampleGroup) - end - - specify ".description should return a String representation of that type (fully qualified) as its name" do - example_group.description.should == "Spec::Example::ExampleGroup" - end - - specify ".described_type should return the passed in type" do - example_group.described_type.should == Spec::Example::ExampleGroup - end - end - - describe "#set_description(String, Type)" do - before(:each) do - example_group.set_description("behaving", ExampleGroup) - end - - specify ".description should return String then space then Type" do - example_group.description.should == "behaving Spec::Example::ExampleGroup" - end - - specify ".described_type should return the passed in type" do - example_group.described_type.should == Spec::Example::ExampleGroup - end - end - - describe "#set_description(Type, String not starting with a space)" do - before(:each) do - example_group.set_description(ExampleGroup, "behaving") - end - - specify ".description should return the Type then space then String" do - example_group.description.should == "Spec::Example::ExampleGroup behaving" - end - end - - describe "#set_description(Type, String starting with .)" do - before(:each) do - example_group.set_description(ExampleGroup, ".behaving") - end - - specify ".description should return the Type then String" do - example_group.description.should == "Spec::Example::ExampleGroup.behaving" - end - end - - describe "#set_description(Type, String containing .)" do - before(:each) do - example_group.set_description(ExampleGroup, "calling a.b") - end - - specify ".description should return the Type then space then String" do - example_group.description.should == "Spec::Example::ExampleGroup calling a.b" - end - end - - describe "#set_description(Type, String starting with .)" do - before(:each) do - example_group.set_description(ExampleGroup, ".behaving") - end - - specify "should return the Type then String" do - example_group.description.should == "Spec::Example::ExampleGroup.behaving" - end - end - - describe "#set_description(Type, String containing .)" do - before(:each) do - example_group.set_description(ExampleGroup, "is #1") - end - - specify ".description should return the Type then space then String" do - example_group.description.should == "Spec::Example::ExampleGroup is #1" - end - end - - describe "#set_description(String, Type, String)" do - before(:each) do - example_group.set_description("A", Hash, "with one entry") - end - - specify ".description should return the first String then space then Type then second String" do - example_group.description.should == "A Hash with one entry" - end - end - - describe "#set_description(Hash representing options)" do - before(:each) do - example_group.set_description(:a => "b", :spec_path => "blah") - end - - it ".spec_path should expand the passed in :spec_path option passed into the constructor" do - example_group.spec_path.should == File.expand_path("blah") - end - - it ".description_options should return all the options passed in" do - example_group.description_options.should == {:a => "b", :spec_path => "blah"} - end - - end - end - - describe "#description" do - it "should return the same description instance for each call" do - example_group.description.should eql(example_group.description) - end - - it "should not add a space when description_text begins with #" do - child_example_group = Class.new(example_group) do - describe("#foobar", "Does something") - end - child_example_group.description.should == "ExampleGroup#foobar Does something" - end - - it "should not add a space when description_text begins with ." do - child_example_group = Class.new(example_group) do - describe(".foobar", "Does something") - end - child_example_group.description.should == "ExampleGroup.foobar Does something" - end - - it "should return the class name if nil" do - example_group.set_description(nil) - example_group.description.should =~ /Class:/ - end - - it "should return the class name if nil" do - example_group.set_description("") - example_group.description.should =~ /Class:/ - end - end - - describe "#description_parts" do - it "should return an Array of the current class description args" do - example_group.description_parts.should == [example_group.description] - end - - it "should return an Array of the description args from each class in the hierarchy" do - child_example_group = Class.new(example_group) - child_example_group.describe("Child", ExampleGroup) - child_example_group.description.should_not be_empty - - grand_child_example_group = Class.new(child_example_group) - grand_child_example_group.describe("GrandChild", ExampleGroup) - grand_child_example_group.description.should_not be_empty - - grand_child_example_group.description_parts.should == [ - "ExampleGroup", - "Child", - Spec::Example::ExampleGroup, - "GrandChild", - Spec::Example::ExampleGroup - ] - end - end - - describe "#described_type" do - it "should return passed in type" do - child_example_group = Class.new(example_group) do - describe Object - end - child_example_group.described_type.should == Object - end - - it "should return #described_type of superclass when no passed in type" do - parent_example_group = Class.new(ExampleGroup) do - describe Object, "#foobar" - end - child_example_group = Class.new(parent_example_group) do - describe "not a type" - end - child_example_group.described_type.should == Object - end - end - - describe "#remove_after" do - it "should unregister a given after(:each) block" do - after_all_ran = false - @example_group.it("example") {} - proc = Proc.new { after_all_ran = true } - ExampleGroup.after(:each, &proc) - @example_group.run - after_all_ran.should be_true - - after_all_ran = false - ExampleGroup.remove_after(:each, &proc) - @example_group.run - after_all_ran.should be_false - end - end - - describe "#include" do - it "should have accessible class methods from included module" do - mod1_method_called = false - mod1 = Module.new do - class_methods = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - metaclass.class_eval do - define_method(:included) do |receiver| - receiver.extend class_methods - end - end - end - - mod2_method_called = false - mod2 = Module.new do - class_methods = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - metaclass.class_eval do - define_method(:included) do |receiver| - receiver.extend class_methods - end - end - end - - @example_group.include mod1, mod2 - - @example_group.mod1_method - @example_group.mod2_method - mod1_method_called.should be_true - mod2_method_called.should be_true - end - end - - describe "#number_of_examples" do - it "should count number of specs" do - proc do - @example_group.it("one") {} - @example_group.it("two") {} - @example_group.it("three") {} - @example_group.it("four") {} - end.should change {@example_group.number_of_examples}.by(4) - end - end - - describe "#class_eval" do - it "should allow constants to be defined" do - example_group = Class.new(ExampleGroup) do - describe('example') - FOO = 1 - it "should reference FOO" do - FOO.should == 1 - end - end - example_group.run - Object.const_defined?(:FOO).should == false - end - end - - describe '#register' do - it "should add ExampleGroup to set of ExampleGroups to be run" do - example_group.register - options.example_groups.should include(example_group) - end - end - - describe '#unregister' do - before do - example_group.register - options.example_groups.should include(example_group) - end - - it "should remove ExampleGroup from set of ExampleGroups to be run" do - example_group.unregister - options.example_groups.should_not include(example_group) - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_spec.rb deleted file mode 100644 index 93e558a97..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_spec.rb +++ /dev/null @@ -1,711 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - class ExampleModuleScopingSpec < ExampleGroup - describe ExampleGroup, "via a class definition" - - module Foo - module Bar - def self.loaded? - true - end - end - end - include Foo - - it "should understand module scoping" do - Bar.should be_loaded - end - - @@foo = 1 - - it "should allow class variables to be defined" do - @@foo.should == 1 - end - end - - class ExampleClassVariablePollutionSpec < ExampleGroup - describe ExampleGroup, "via a class definition without a class variable" - - it "should not retain class variables from other Example classes" do - proc do - @@foo - end.should raise_error - end - end - - describe ExampleGroup, "#pending" do - it "should raise a Pending error when its block fails" do - block_ran = false - lambda { - pending("something") do - block_ran = true - raise "something wrong with my example" - end - }.should raise_error(Spec::Example::ExamplePendingError, "something") - block_ran.should == true - end - - it "should raise Spec::Example::PendingExampleFixedError when its block does not fail" do - block_ran = false - lambda { - pending("something") do - block_ran = true - end - }.should raise_error(Spec::Example::PendingExampleFixedError, "Expected pending 'something' to fail. No Error was raised.") - block_ran.should == true - end - end - - describe ExampleGroup, "#run with failure in example", :shared => true do - it "should add an example failure to the TestResult" do - example_group.run.should be_false - end - end - - describe ExampleGroup, "#run" do - it_should_behave_like "sandboxed rspec_options" - attr_reader :example_group, :formatter, :reporter - before :each do - @formatter = mock("formatter", :null_object => true) - options.formatters << formatter - options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true) - @reporter = FakeReporter.new(options) - options.reporter = reporter - @example_group = Class.new(ExampleGroup) do - describe("example") - it "does nothing" do - end - end - class << example_group - public :include - end - end - - after :each do - ExampleGroup.reset - end - - it "should not run when there are no examples" do - example_group = Class.new(ExampleGroup) do - describe("Foobar") - end - example_group.examples.should be_empty - - reporter = mock("Reporter") - reporter.should_not_receive(:add_example_group) - example_group.run - end - - describe "when before_each fails" do - before(:each) do - $example_ran = $after_each_ran = false - @example_group = describe("Foobar") do - before(:each) {raise} - it "should not be run" do - $example_ran = true - end - after(:each) do - $after_each_ran = true - end - end - end - - it "should not run example block" do - example_group.run - $example_ran.should be_false - end - - it "should run after_each" do - example_group.run - $after_each_ran.should be_true - end - - it "should report failure location when in before_each" do - reporter.should_receive(:example_finished) do |example_group, error| - error.message.should eql("in before_each") - end - example_group.run - end - end - - describe ExampleGroup, "#run on dry run" do - before do - @options.dry_run = true - end - - it "should not run before(:all) or after(:all)" do - before_all_ran = false - after_all_ran = false - ExampleGroup.before(:all) { before_all_ran = true } - ExampleGroup.after(:all) { after_all_ran = true } - example_group.it("should") {} - example_group.run - before_all_ran.should be_false - after_all_ran.should be_false - end - - it "should not run example" do - example_ran = false - example_group.it("should") {example_ran = true} - example_group.run - example_ran.should be_false - end - end - - describe ExampleGroup, "#run with specified examples" do - attr_reader :examples_that_were_run - before do - @examples_that_were_run = [] - end - - describe "when specified_examples matches entire ExampleGroup" do - before do - examples_that_were_run = @examples_that_were_run - @example_group = Class.new(ExampleGroup) do - describe("the ExampleGroup") - it("should be run") do - examples_that_were_run << 'should be run' - end - - it("should also be run") do - examples_that_were_run << 'should also be run' - end - end - options.examples = ["the ExampleGroup"] - end - - it "should not run the Examples in the ExampleGroup" do - example_group.run - examples_that_were_run.should == ['should be run', 'should also be run'] - end - end - - describe ExampleGroup, "#run when specified_examples matches only Example description" do - before do - examples_that_were_run = @examples_that_were_run - @example_group = Class.new(ExampleGroup) do - describe("example") - it("should be run") do - examples_that_were_run << 'should be run' - end - end - options.examples = ["should be run"] - end - - it "should not run the example" do - example_group.run - examples_that_were_run.should == ['should be run'] - end - end - - describe ExampleGroup, "#run when specified_examples does not match an Example description" do - before do - examples_that_were_run = @examples_that_were_run - @example_group = Class.new(ExampleGroup) do - describe("example") - it("should be something else") do - examples_that_were_run << 'should be something else' - end - end - options.examples = ["does not match anything"] - end - - it "should not run the example" do - example_group.run - examples_that_were_run.should == [] - end - end - - describe ExampleGroup, "#run when specified_examples matches an Example description" do - before do - examples_that_were_run = @examples_that_were_run - @example_group = Class.new(ExampleGroup) do - describe("example") - it("should be run") do - examples_that_were_run << 'should be run' - end - it("should not be run") do - examples_that_were_run << 'should not be run' - end - end - options.examples = ["should be run"] - end - - it "should run only the example, when there in only one" do - example_group.run - examples_that_were_run.should == ["should be run"] - end - - it "should run only the one example" do - example_group.run - examples_that_were_run.should == ["should be run"] end - end - end - - describe ExampleGroup, "#run with success" do - before do - @special_example_group = Class.new(ExampleGroup) - ExampleGroupFactory.register(:special, @special_example_group) - @not_special_example_group = Class.new(ExampleGroup) - ExampleGroupFactory.register(:not_special, @not_special_example_group) - end - - after do - ExampleGroupFactory.reset - end - - it "should send reporter add_example_group" do - example_group.run - reporter.example_groups.should == [example_group] - end - - it "should run example on run" do - example_ran = false - example_group.it("should") {example_ran = true} - example_group.run - example_ran.should be_true - end - - it "should run before(:all) block only once" do - before_all_run_count_run_count = 0 - example_group.before(:all) {before_all_run_count_run_count += 1} - example_group.it("test") {true} - example_group.it("test2") {true} - example_group.run - before_all_run_count_run_count.should == 1 - end - - it "should run after(:all) block only once" do - after_all_run_count = 0 - example_group.after(:all) {after_all_run_count += 1} - example_group.it("test") {true} - example_group.it("test2") {true} - example_group.run - after_all_run_count.should == 1 - @reporter.rspec_verify - end - - it "after(:all) should have access to all instance variables defined in before(:all)" do - context_instance_value_in = "Hello there" - context_instance_value_out = "" - example_group.before(:all) { @instance_var = context_instance_value_in } - example_group.after(:all) { context_instance_value_out = @instance_var } - example_group.it("test") {true} - example_group.run - context_instance_value_in.should == context_instance_value_out - end - - it "should copy instance variables from before(:all)'s execution context into spec's execution context" do - context_instance_value_in = "Hello there" - context_instance_value_out = "" - example_group.before(:all) { @instance_var = context_instance_value_in } - example_group.it("test") {context_instance_value_out = @instance_var} - example_group.run - context_instance_value_in.should == context_instance_value_out - end - - it "should not add global before callbacks for untargetted example_group" do - fiddle = [] - - ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } - ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } - @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" } - @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" } - @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" } - @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" } - - example_group = Class.new(ExampleGroup) do - describe("I'm not special", :type => :not_special) - it "does nothing" - end - example_group.run - fiddle.should == [ - 'Example.prepend_before(:all)', - 'Example.before(:all)', - ] - end - - it "should add global before callbacks for targetted example_groups" do - fiddle = [] - - ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } - ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } - @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" } - @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" } - @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" } - @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" } - @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" } - - example_group = Class.new(@special_example_group).describe("I'm a special example_group") {} - example_group.it("test") {true} - example_group.run - fiddle.should == [ - 'Example.prepend_before(:all)', - 'Example.before(:all)', - 'special.prepend_before(:all, :type => :special)', - 'special.before(:all, :type => :special)', - 'special.prepend_before(:each, :type => :special)', - 'special.before(:each, :type => :special)', - 'special.append_before(:each, :type => :special)', - ] - end - - it "should order before callbacks from global to local" do - fiddle = [] - ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } - ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } - example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" } - example_group.before(:all) { fiddle << "before(:all)" } - example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" } - example_group.before(:each) { fiddle << "before(:each)" } - example_group.run - fiddle.should == [ - 'Example.prepend_before(:all)', - 'Example.before(:all)', - 'prepend_before(:all)', - 'before(:all)', - 'prepend_before(:each)', - 'before(:each)' - ] - end - - it "should order after callbacks from local to global" do - fiddle = [] - example_group.after(:each) { fiddle << "after(:each)" } - example_group.append_after(:each) { fiddle << "append_after(:each)" } - example_group.after(:all) { fiddle << "after(:all)" } - example_group.append_after(:all) { fiddle << "append_after(:all)" } - ExampleGroup.after(:all) { fiddle << "Example.after(:all)" } - ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" } - example_group.run - fiddle.should == [ - 'after(:each)', - 'append_after(:each)', - 'after(:all)', - 'append_after(:all)', - 'Example.after(:all)', - 'Example.append_after(:all)' - ] - end - - it "should have accessible instance methods from included module" do - mod1_method_called = false - mod1 = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - mod2_method_called = false - mod2 = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - example_group.include mod1, mod2 - - example_group.it("test") do - mod1_method - mod2_method - end - example_group.run - mod1_method_called.should be_true - mod2_method_called.should be_true - end - - it "should include targetted modules included using configuration" do - mod1 = Module.new - mod2 = Module.new - mod3 = Module.new - Spec::Runner.configuration.include(mod1, mod2) - Spec::Runner.configuration.include(mod3, :type => :not_special) - - example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do - it "does nothing" - end - example_group.run - - example_group.included_modules.should include(mod1) - example_group.included_modules.should include(mod2) - example_group.included_modules.should_not include(mod3) - end - - it "should include any predicate_matchers included using configuration" do - $included_predicate_matcher_found = false - Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something? - example_group = Class.new(ExampleGroup) do - describe('example') - it "should respond to do_something" do - $included_predicate_matcher_found = respond_to?(:do_something) - end - end - example_group.run - $included_predicate_matcher_found.should be(true) - end - - it "should use a mock framework set up in config" do - mod = Module.new do - class << self - def included(mod) - $included_module = mod - end - end - - def teardown_mocks_for_rspec - $torn_down = true - end - end - - begin - $included_module = nil - $torn_down = true - Spec::Runner.configuration.mock_with mod - - example_group = Class.new(ExampleGroup) do - describe('example') - it "does nothing" - end - example_group.run - - $included_module.should_not be_nil - $torn_down.should == true - ensure - Spec::Runner.configuration.mock_with :rspec - end - end - end - - describe ExampleGroup, "#run with pending example that has a failing assertion" do - before do - example_group.it("should be pending") do - pending("Example fails") {false.should be_true} - end - end - - it "should send example_pending to formatter" do - @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails") - example_group.run - end - end - - describe ExampleGroup, "#run with pending example that does not have a failing assertion" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - example_group.it("should be pending") do - pending("Example passes") {true.should be_true} - end - end - - it "should send example_pending to formatter" do - @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes") - example_group.run - end - end - - describe ExampleGroup, "#run when before(:all) fails" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" } - end - - it "should not run any example" do - spec_ran = false - example_group.it("test") {spec_ran = true} - example_group.run - spec_ran.should be_false - end - - it "should run ExampleGroup after(:all)" do - after_all_ran = false - ExampleGroup.after(:all) { after_all_ran = true } - example_group.run - after_all_ran.should be_true - end - - it "should run example_group after(:all)" do - after_all_ran = false - example_group.after(:all) { after_all_ran = true } - example_group.run - after_all_ran.should be_true - end - - it "should supply before(:all) as description" do - @reporter.should_receive(:failure) do |example, error| - example.description.should eql("before(:all)") - error.message.should eql("before(:all) failure") - end - - example_group.it("test") {true} - example_group.run - end - end - - describe ExampleGroup, "#run when before(:each) fails" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - ExampleGroup.before(:each) { raise NonStandardError } - end - - it "should run after(:all)" do - after_all_ran = false - ExampleGroup.after(:all) { after_all_ran = true } - example_group.run - after_all_ran.should be_true - end - end - - describe ExampleGroup, "#run when any example fails" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - example_group.it("should") { raise NonStandardError } - end - - it "should run after(:all)" do - after_all_ran = false - ExampleGroup.after(:all) { after_all_ran = true } - example_group.run - after_all_ran.should be_true - end - end - - describe ExampleGroup, "#run when first after(:each) block fails" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - class << example_group - attr_accessor :first_after_ran, :second_after_ran - end - example_group.first_after_ran = false - example_group.second_after_ran = false - - example_group.after(:each) do - self.class.second_after_ran = true - end - example_group.after(:each) do - self.class.first_after_ran = true - raise "first" - end - end - - it "should run second after(:each) block" do - reporter.should_receive(:example_finished) do |example, error| - example.should equal(example) - error.message.should eql("first") - end - example_group.run - example_group.first_after_ran.should be_true - example_group.second_after_ran.should be_true - end - end - - describe ExampleGroup, "#run when first before(:each) block fails" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - class << example_group - attr_accessor :first_before_ran, :second_before_ran - end - example_group.first_before_ran = false - example_group.second_before_ran = false - - example_group.before(:each) do - self.class.first_before_ran = true - raise "first" - end - example_group.before(:each) do - self.class.second_before_ran = true - end - end - - it "should not run second before(:each)" do - reporter.should_receive(:example_finished) do |name, error| - error.message.should eql("first") - end - example_group.run - example_group.first_before_ran.should be_true - example_group.second_before_ran.should be_false - end - end - - describe ExampleGroup, "#run when failure in after(:all)" do - it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" - - before do - ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" } - end - - it "should return false" do - example_group.run.should be_false - end - end - end - - class ExampleSubclass < ExampleGroup - end - - describe ExampleGroup, "subclasses" do - after do - ExampleGroupFactory.reset - end - - it "should have access to the described_type" do - example_group = Class.new(ExampleSubclass) do - describe(Array) - end - example_group.send(:described_type).should == Array - end - - it "should concat descriptions when nested" do - example_group = Class.new(ExampleSubclass) do - describe(Array) - $nested_group = describe("when empty") do - end - end - $nested_group.description.to_s.should == "Array when empty" - end - end - - describe Enumerable do - def each(&block) - ["4", "2", "1"].each(&block) - end - - it "should be included in examples because it is a module" do - map{|e| e.to_i}.should == [4,2,1] - end - end - - describe "An", Enumerable, "as a second argument" do - def each(&block) - ["4", "2", "1"].each(&block) - end - - it "should be included in examples because it is a module" do - map{|e| e.to_i}.should == [4,2,1] - end - end - - describe Enumerable do - describe "as the parent of nested example groups" do - it "should be included in examples because it is a module" do - pending("need to make sure nested groups know the described type") do - map{|e| e.to_i}.should == [4,2,1] - end - end - end - end - - describe String do - it"should not be included in examples because it is not a module" do - lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_matcher_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_matcher_spec.rb deleted file mode 100644 index ea0dfe019..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_matcher_spec.rb +++ /dev/null @@ -1,96 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Example - module ExampleMatcherSpecHelper - class MatchDescription - def initialize(description) - @description = description - end - - def matches?(matcher) - matcher.matches?(@description) - end - - def failure_message - "expected matcher.matches?(#{@description.inspect}) to return true, got false" - end - - def negative_failure_message - "expected matcher.matches?(#{@description.inspect}) to return false, got true" - end - end - def match_description(description) - MatchDescription.new(description) - end - end - - describe ExampleMatcher, "#matches?" do - include ExampleMatcherSpecHelper - - it "should match correct example_group and example" do - matcher = ExampleMatcher.new("example_group", "example") - matcher.should match_description("example_group example") - end - - it "should not match wrong example" do - matcher = ExampleMatcher.new("example_group", "other example") - matcher.should_not match_description("example_group example") - end - - it "should not match wrong example_group" do - matcher = ExampleMatcher.new("other example_group", "example") - matcher.should_not match_description("example_group example") - end - - it "should match example only" do - matcher = ExampleMatcher.new("example_group", "example") - matcher.should match_description("example") - end - - it "should match example_group only" do - matcher = ExampleMatcher.new("example_group", "example") - matcher.should match_description("example_group") - end - - it "should match example_group ending with before(:all)" do - matcher = ExampleMatcher.new("example_group", "example") - matcher.should match_description("example_group before(:all)") - end - - it "should escape regexp chars" do - matcher = ExampleMatcher.new("(con|text)", "[example]") - matcher.should_not match_description("con p") - end - - it "should match when example_group is modularized" do - matcher = ExampleMatcher.new("MyModule::MyClass", "example") - matcher.should match_description("MyClass example") - end - end - - describe ExampleMatcher, "#matches? normal case" do - it "matches when passed in example matches" do - matcher = ExampleMatcher.new("Foo", "bar") - matcher.matches?(["no match", "Foo bar"]).should == true - end - - it "does not match when no passed in examples match" do - matcher = ExampleMatcher.new("Foo", "bar") - matcher.matches?(["no match1", "no match2"]).should == false - end - end - - describe ExampleMatcher, "#matches? where description has '::' in it" do - it "matches when passed in example matches" do - matcher = ExampleMatcher.new("Foo::Bar", "baz") - matcher.matches?(["no match", "Foo::Bar baz"]).should == true - end - - it "does not match when no passed in examples match" do - matcher = ExampleMatcher.new("Foo::Bar", "baz") - matcher.matches?(["no match1", "no match2"]).should == false - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_methods_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_methods_spec.rb deleted file mode 100644 index ce688a7f9..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_methods_spec.rb +++ /dev/null @@ -1,91 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - module ModuleThatIsReopened - end - - module ExampleMethods - include ModuleThatIsReopened - end - - module ModuleThatIsReopened - def module_that_is_reopened_method - end - end - - describe "ExampleMethods with an included module that is reopened" do - it "should have repoened methods" do - method(:module_that_is_reopened_method).should_not be_nil - end - end - - describe ExampleMethods, "lifecycle" do - before do - @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) - @options.formatters << mock("formatter", :null_object => true) - @options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true) - @reporter = FakeReporter.new(@options) - @options.reporter = @reporter - - ExampleMethods.before_all_parts.should == [] - ExampleMethods.before_each_parts.should == [] - ExampleMethods.after_each_parts.should == [] - ExampleMethods.after_all_parts.should == [] - def ExampleMethods.count - @count ||= 0 - @count = @count + 1 - @count - end - end - - after do - ExampleMethods.instance_variable_set("@before_all_parts", []) - ExampleMethods.instance_variable_set("@before_each_parts", []) - ExampleMethods.instance_variable_set("@after_each_parts", []) - ExampleMethods.instance_variable_set("@after_all_parts", []) - end - - it "should pass before and after callbacks to all ExampleGroup subclasses" do - ExampleMethods.before(:all) do - ExampleMethods.count.should == 1 - end - - ExampleMethods.before(:each) do - ExampleMethods.count.should == 2 - end - - ExampleMethods.after(:each) do - ExampleMethods.count.should == 3 - end - - ExampleMethods.after(:all) do - ExampleMethods.count.should == 4 - end - - @example_group = Class.new(ExampleGroup) do - it "should use ExampleMethods callbacks" do - end - end - @example_group.run - ExampleMethods.count.should == 5 - end - - describe "run_with_description_capturing" do - before(:each) do - @example_group = Class.new(ExampleGroup) do end - @example = @example_group.new("foo", &(lambda { 2.should == 2 })) - @example.run_with_description_capturing - end - - it "should provide the generated description" do - @example.instance_eval { @_matcher_description }.should == "should == 2" - end - - it "should clear the global generated_description" do - Spec::Matchers.generated_description.should == nil - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_runner_spec.rb deleted file mode 100644 index 1b5abdf0f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_runner_spec.rb +++ /dev/null @@ -1,194 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Example - # describe "Spec::Example::ExampleRunner", "#run", :shared => true do - # before(:each) do - # @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) - # @reporter = ::Spec::Runner::Reporter.new(@options) - # @options.reporter = @reporter - # @example_group_class = Class.new(ExampleGroup) do - # plugin_mock_framework - # describe("Some Examples") - # end - # end - # - # def create_runner(example_definition) - # example = @example_group_class.new(example_definition) - # runner = ExampleGroup.new(@options, example) - # runner.stub!(:verify_mocks) - # runner.stub!(:teardown_mocks) - # runner - # end - # end - # - # describe ExampleRunner, "#run with blank passing example" do - # it_should_behave_like "Spec::Example::ExampleRunner#run" - # - # before do - # @e = @example_group_class.it("example") {} - # @runner = create_runner(@e) - # end - # - # it "should send reporter example_started" do - # @reporter.should_receive(:example_started).with(equal(@e)) - # @runner.run - # end - # - # it "should report its name for dry run" do - # @options.dry_run = true - # @reporter.should_receive(:example_finished).with(equal(@e), nil) - # @runner.run - # end - # - # it "should report success" do - # @reporter.should_receive(:example_finished).with(equal(@e), nil) - # @runner.run - # end - # end - # - # describe ExampleRunner, "#run with a failing example" do - # predicate_matchers[:is_a] = [:is_a?] - # it_should_behave_like "Spec::Example::ExampleRunner#run" - # - # before do - # @e = @example_group_class.it("example") do - # (2+2).should == 5 - # end - # @runner = create_runner(@e) - # end - # - # it "should report failure due to failure" do - # @reporter.should_receive(:example_finished).with( - # equal(@e), - # is_a(Spec::Expectations::ExpectationNotMetError) - # ) - # @runner.run - # end - # end - # - # describe ExampleRunner, "#run with a erroring example" do - # it_should_behave_like "Spec::Example::ExampleRunner#run" - # - # before do - # @error = error = NonStandardError.new("in body") - # @example_definition = @example_group_class.it("example") do - # raise(error) - # end - # @runner = create_runner(@example_definition) - # end - # - # it "should report failure due to error" do - # @reporter.should_receive(:example_finished).with( - # equal(@example_definition), - # @error - # ) - # @runner.run - # end - # - # it "should run after_each block" do - # @example_group_class.after(:each) do - # raise("in after_each") - # end - # @reporter.should_receive(:example_finished) do |example_definition, error| - # example_definition.should equal(@example_definition) - # error.message.should eql("in body") - # end - # @runner.run - # end - # end - # - # describe ExampleRunner, "#run where after_each fails" do - # it_should_behave_like "Spec::Example::ExampleRunner#run" - # - # before do - # @example_ran = example_ran = false - # @example_definition = @example_group_class.it("should not run") do - # example_ran = true - # end - # @runner = create_runner(@example_definition) - # @example_group_class.after(:each) { raise(NonStandardError.new("in after_each")) } - # end - # - # it "should report failure location when in after_each" do - # @reporter.should_receive(:example_finished) do |example_definition, error| - # example_definition.should equal(@example_definition) - # error.message.should eql("in after_each") - # end - # @runner.run - # end - # end - # - # describe ExampleRunner, "#run with use cases" do - # predicate_matchers[:is_a] = [:is_a?] - # it_should_behave_like "Spec::Example::ExampleRunner#run" - # - # it "should report NO NAME when told to use generated description with --dry-run" do - # @options.dry_run = true - # example_definition = @example_group_class.it() do - # 5.should == 5 - # end - # runner = create_runner(example_definition) - # - # @reporter.should_receive(:example_finished) do |example_definition, error| - # example_definition.description.should == "NO NAME (Because of --dry-run)" - # end - # runner.run - # end - # - # it "should report given name if present with --dry-run" do - # @options.dry_run = true - # example_definition = @example_group_class.it("example name") do - # 5.should == 5 - # end - # runner = create_runner(example_definition) - # - # @reporter.should_receive(:example_finished) do |example_definition, error| - # example_definition.description.should == "example name" - # end - # runner.run - # end - # - # it "should report NO NAME when told to use generated description with no expectations" do - # example_definition = @example_group_class.it() {} - # runner = create_runner(example_definition) - # @reporter.should_receive(:example_finished) do |example, error| - # example.description.should == "NO NAME (Because there were no expectations)" - # end - # runner.run - # end - # - # it "should report NO NAME when told to use generated description and matcher fails" do - # example_definition = @example_group_class.it() do - # 5.should "" # Has no matches? method.. - # end - # runner = create_runner(example_definition) - # - # @reporter.should_receive(:example_finished) do |example, error| - # example_definition.description.should == "NO NAME (Because of Error raised in matcher)" - # end - # runner.run - # end - # - # it "should report generated description when told to and it is available" do - # example_definition = @example_group_class.it() { - # 5.should == 5 - # } - # runner = create_runner(example_definition) - # - # @reporter.should_receive(:example_finished) do |example_definition, error| - # example_definition.description.should == "should == 5" - # end - # runner.run - # end - # - # it "should unregister description_generated callback (lest a memory leak should build up)" do - # example_definition = @example_group_class.it("something") - # runner = create_runner(example_definition) - # - # Spec::Matchers.should_receive(:example_finished) - # runner.run - # end - # end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_spec.rb deleted file mode 100644 index c8125b447..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/example_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - # describe Example do - # before(:each) do - # @example = Example.new "example" do - # foo - # end - # end - # - # it "should tell you its docstring" do - # @example.description.should == "example" - # end - # - # it "should execute its block in the context provided" do - # context = Class.new do - # def foo - # "foo" - # end - # end.new - # @example.run_in(context).should == "foo" - # end - # end - # - # describe Example, "#description" do - # it "should default to NO NAME when not passed anything when there are no matchers" do - # example = Example.new {} - # example.run_in(Object.new) - # example.description.should == "NO NAME" - # end - # - # it "should default to NO NAME description (Because of --dry-run) when passed nil and there are no matchers" do - # example = Example.new(nil) {} - # example.run_in(Object.new) - # example.description.should == "NO NAME" - # end - # - # it "should allow description to be overridden" do - # example = Example.new("Test description") - # example.description.should == "Test description" - # end - # - # it "should use description generated from matcher when there is no passed in description" do - # example = Example.new(nil) do - # 1.should == 1 - # end - # example.run_in(Object.new) - # example.description.should == "should == 1" - # end - # end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/nested_example_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/nested_example_group_spec.rb deleted file mode 100644 index 35e8a9890..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/nested_example_group_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - describe 'Nested Example Groups' do - parent = self - - def count - @count ||= 0 - @count = @count + 1 - @count - end - - before(:all) do - count.should == 1 - end - - before(:all) do - count.should == 2 - end - - before(:each) do - count.should == 3 - end - - before(:each) do - count.should == 4 - end - - it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do - count.should == 5 - end - - after(:each) do - count.should == 7 - end - - after(:each) do - count.should == 6 - end - - after(:all) do - count.should == 9 - end - - after(:all) do - count.should == 8 - end - - describe 'nested example group' do - self.superclass.should == parent - - it "should run all before and after callbacks" do - count.should == 5 - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/pending_module_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/pending_module_spec.rb deleted file mode 100644 index c3ab0126b..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/pending_module_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Spec - module Example - describe Pending do - - it 'should raise an ExamplePendingError if no block is supplied' do - lambda { - include Pending - pending "TODO" - }.should raise_error(ExamplePendingError, /TODO/) - end - - it 'should raise an ExamplePendingError if a supplied block fails as expected' do - lambda { - include Pending - pending "TODO" do - raise "oops" - end - }.should raise_error(ExamplePendingError, /TODO/) - end - - it 'should raise a PendingExampleFixedError if a supplied block starts working' do - lambda { - include Pending - pending "TODO" do - # success! - end - }.should raise_error(PendingExampleFixedError, /TODO/) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/predicate_matcher_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/predicate_matcher_spec.rb deleted file mode 100644 index 7c4638b4b..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/predicate_matcher_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - class Fish - def can_swim?(distance_in_yards) - distance_in_yards < 1000 - end - end - - describe "predicate_matcher[method_on_object] = matcher_method" do - predicate_matchers[:swim] = :can_swim? - it "should match matcher_method if method_on_object returns true" do - swim(100).matches?(Fish.new).should be_true - end - it "should not match matcher_method if method_on_object returns false" do - swim(10000).matches?(Fish.new).should be_false - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/shared_example_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/shared_example_group_spec.rb deleted file mode 100644 index 803536ab5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/shared_example_group_spec.rb +++ /dev/null @@ -1,265 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - describe ExampleGroup, "with :shared => true" do - it_should_behave_like "sandboxed rspec_options" - attr_reader :formatter, :example_group - before(:each) do - @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true) - options.formatters << formatter - @example_group = Class.new(ExampleGroup).describe("example_group") - class << example_group - public :include - end - end - - after(:each) do - @formatter.rspec_verify - @example_group = nil - $shared_example_groups.clear unless $shared_example_groups.nil? - end - - def make_shared_example_group(name, opts=nil, &block) - example_group = SharedExampleGroup.new(name, :shared => true, &block) - SharedExampleGroup.add_shared_example_group(example_group) - example_group - end - - def non_shared_example_group() - @non_shared_example_group ||= Class.new(ExampleGroup).describe("example_group") - end - - it "should accept an optional options hash" do - lambda { Class.new(ExampleGroup).describe("context") }.should_not raise_error(Exception) - lambda { Class.new(ExampleGroup).describe("context", :shared => true) }.should_not raise_error(Exception) - end - - it "should return all shared example_groups" do - b1 = make_shared_example_group("b1", :shared => true) {} - b2 = make_shared_example_group("b2", :shared => true) {} - - b1.should_not be(nil) - b2.should_not be(nil) - - SharedExampleGroup.find_shared_example_group("b1").should equal(b1) - SharedExampleGroup.find_shared_example_group("b2").should equal(b2) - end - - it "should register as shared example_group" do - example_group = make_shared_example_group("example_group") {} - SharedExampleGroup.shared_example_groups.should include(example_group) - end - - it "should not be shared when not configured as shared" do - example_group = non_shared_example_group - SharedExampleGroup.shared_example_groups.should_not include(example_group) - end - - it "should complain when adding a second shared example_group with the same description" do - describe "shared example_group", :shared => true do - end - lambda do - describe "shared example_group", :shared => true do - end - end.should raise_error(ArgumentError) - end - - it "should NOT complain when adding the same shared example_group instance again" do - shared_example_group = Class.new(ExampleGroup).describe("shared example_group", :shared => true) - SharedExampleGroup.add_shared_example_group(shared_example_group) - SharedExampleGroup.add_shared_example_group(shared_example_group) - end - - it "should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do - lambda do - 2.times do - describe "shared example_group which gets loaded twice", :shared => true do - end - end - end.should_not raise_error(ArgumentError) - end - - it "should NOT complain when adding the same shared example_group in same file with different absolute path" do - shared_example_group_1 = Class.new(ExampleGroup).describe( - "shared example_group", - :shared => true, - :spec_path => "/my/spec/a/../shared.rb" - ) - shared_example_group_2 = Class.new(ExampleGroup).describe( - "shared example_group", - :shared => true, - :spec_path => "/my/spec/b/../shared.rb" - ) - - SharedExampleGroup.add_shared_example_group(shared_example_group_1) - SharedExampleGroup.add_shared_example_group(shared_example_group_2) - end - - it "should complain when adding a different shared example_group with the same name in a different file with the same basename" do - shared_example_group_1 = Class.new(ExampleGroup).describe( - "shared example_group", - :shared => true, - :spec_path => "/my/spec/a/shared.rb" - ) - shared_example_group_2 = Class.new(ExampleGroup).describe( - "shared example_group", - :shared => true, - :spec_path => "/my/spec/b/shared.rb" - ) - - SharedExampleGroup.add_shared_example_group(shared_example_group_1) - lambda do - SharedExampleGroup.add_shared_example_group(shared_example_group_2) - end.should raise_error(ArgumentError, /already exists/) - end - - it "should add examples to current example_group using it_should_behave_like" do - shared_example_group = make_shared_example_group("shared example_group") do - it("shared example") {} - it("shared example 2") {} - end - - example_group.it("example") {} - example_group.number_of_examples.should == 1 - example_group.it_should_behave_like("shared example_group") - example_group.number_of_examples.should == 3 - end - - it "should add examples to current example_group using include" do - shared_example_group = describe "all things", :shared => true do - it "should do stuff" do end - end - - example_group = describe "one thing" do - include shared_example_group - end - - example_group.number_of_examples.should == 1 - end - - it "should add examples to current example_group using it_should_behave_like with a module" do - AllThings = describe "all things", :shared => true do - it "should do stuff" do end - end - - example_group = describe "one thing" do - it_should_behave_like AllThings - end - - example_group.number_of_examples.should == 1 - end - - it "should run shared examples" do - shared_example_ran = false - shared_example_group = make_shared_example_group("shared example_group") do - it("shared example") { shared_example_ran = true } - end - - example_ran = false - - example_group.it_should_behave_like("shared example_group") - example_group.it("example") {example_ran = true} - example_group.run - example_ran.should be_true - shared_example_ran.should be_true - end - - it "should run setup and teardown from shared example_group" do - shared_setup_ran = false - shared_teardown_ran = false - shared_example_group = make_shared_example_group("shared example_group") do - before { shared_setup_ran = true } - after { shared_teardown_ran = true } - it("shared example") { shared_example_ran = true } - end - - example_ran = false - - example_group.it_should_behave_like("shared example_group") - example_group.it("example") {example_ran = true} - example_group.run - example_ran.should be_true - shared_setup_ran.should be_true - shared_teardown_ran.should be_true - end - - it "should run before(:all) and after(:all) only once from shared example_group" do - shared_before_all_run_count = 0 - shared_after_all_run_count = 0 - shared_example_group = make_shared_example_group("shared example_group") do - before(:all) { shared_before_all_run_count += 1} - after(:all) { shared_after_all_run_count += 1} - it("shared example") { shared_example_ran = true } - end - - example_ran = false - - example_group.it_should_behave_like("shared example_group") - example_group.it("example") {example_ran = true} - example_group.run - example_ran.should be_true - shared_before_all_run_count.should == 1 - shared_after_all_run_count.should == 1 - end - - it "should include modules, included into shared example_group, into current example_group" do - @formatter.should_receive(:add_example_group).with(any_args) - - shared_example_group = make_shared_example_group("shared example_group") do - it("shared example") { shared_example_ran = true } - end - - mod1_method_called = false - mod1 = Module.new do - define_method :mod1_method do - mod1_method_called = true - end - end - - mod2_method_called = false - mod2 = Module.new do - define_method :mod2_method do - mod2_method_called = true - end - end - - shared_example_group.include mod2 - - example_group.it_should_behave_like("shared example_group") - example_group.include mod1 - - example_group.it("test") do - mod1_method - mod2_method - end - example_group.run - mod1_method_called.should be_true - mod2_method_called.should be_true - end - - it "should make methods defined in the shared example_group available in consuming example_group" do - shared_example_group = make_shared_example_group("shared example_group xyz") do - def a_shared_helper_method - "this got defined in a shared example_group" - end - end - example_group.it_should_behave_like("shared example_group xyz") - success = false - example_group.it("should access a_shared_helper_method") do - a_shared_helper_method - success = true - end - example_group.run - success.should be_true - end - - it "should raise when named shared example_group can not be found" do - lambda { - example_group.it_should_behave_like("non-existent shared example group") - violated - }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found") - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/subclassing_example_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/subclassing_example_group_spec.rb deleted file mode 100644 index 888f2ceb3..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/example/subclassing_example_group_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Example - class GrandParentExampleGroup < Spec::Example::ExampleGroup - describe "Grandparent ExampleGroup" - end - - class ParentExampleGroup < GrandParentExampleGroup - describe "Parent ExampleGroup" - it "should bar" do - end - end - - class ChildExampleGroup < ParentExampleGroup - describe "Child ExampleGroup" - it "should bam" do - end - end - - describe ChildExampleGroup do - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/expectations/differs/default_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/expectations/differs/default_spec.rb deleted file mode 100644 index ea720846b..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/expectations/differs/default_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -module Spec - module Fixtures - class Animal - def initialize(name,species) - @name,@species = name,species - end - - def inspect - <<-EOA - - EOA - end - end - end -end - -describe "Diff" do - before(:each) do - @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) - @differ = Spec::Expectations::Differs::Default.new(@options) - end - - it "should output unified diff of two strings" do - expected="foo\nbar\nzap\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nline\n" - actual="foo\nzap\nbar\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nanother\nline\n" - expected_diff="\n\n@@ -1,6 +1,6 @@\n foo\n-bar\n zap\n+bar\n this\n is\n soo\n@@ -9,5 +9,6 @@\n equal\n insert\n a\n+another\n line\n" - diff = @differ.diff_as_string(expected, actual) - diff.should eql(expected_diff) - end - - it "should output unified diff message of two arrays" do - expected = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'charlie', :width, 'quite wide' ] - actual = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'tango' , :width, 'very wide' ] - - expected_diff = <<'EOD' - - -@@ -5,7 +5,7 @@ - :metasyntactic, - "variable", - :delta, -- "charlie", -+ "tango", - :width, -- "quite wide"] -+ "very wide"] -EOD - - - diff = @differ.diff_as_object(expected,actual) - diff.should == expected_diff - end - - it "should output unified diff message of two objects" do - expected = Spec::Fixtures::Animal.new "bob", "giraffe" - actual = Spec::Fixtures::Animal.new "bob", "tortoise" - - expected_diff = <<'EOD' - -@@ -1,5 +1,5 @@ - -EOD - - diff = @differ.diff_as_object(expected,actual) - diff.should == expected_diff - end - -end - - -describe "Diff in context format" do - before(:each) do - @options = Spec::Runner::Options.new(StringIO.new, StringIO.new) - @options.diff_format = :context - @differ = Spec::Expectations::Differs::Default.new(@options) - end - - it "should output unified diff message of two objects" do - expected = Spec::Fixtures::Animal.new "bob", "giraffe" - actual = Spec::Fixtures::Animal.new "bob", "tortoise" - - expected_diff = <<'EOD' - -*************** -*** 1,5 **** - ---- 1,5 ---- - -EOD - - diff = @differ.diff_as_object(expected,actual) - diff.should == expected_diff - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/expectations/extensions/object_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/expectations/extensions/object_spec.rb deleted file mode 100644 index 0d9335bdb..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/expectations/extensions/object_spec.rb +++ /dev/null @@ -1,107 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' - -describe Object, "#should" do - before(:each) do - @target = "target" - @matcher = mock("matcher") - @matcher.stub!(:matches?).and_return(true) - @matcher.stub!(:failure_message) - end - - it "should accept and interact with a matcher" do - @matcher.should_receive(:matches?).with(@target).and_return(true) - @target.should @matcher - end - - it "should ask for a failure_message when matches? returns false" do - @matcher.should_receive(:matches?).with(@target).and_return(false) - @matcher.should_receive(:failure_message).and_return("the failure message") - lambda { - @target.should @matcher - }.should fail_with("the failure message") - end - - it "should raise error if it receives false directly" do - lambda { - @target.should false - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives false (evaluated)" do - lambda { - @target.should eql?("foo") - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives true" do - lambda { - @target.should true - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives nil" do - lambda { - @target.should nil - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives no argument and it is not used as a left side of an operator" do - pending "Is it even possible to catch this?" - lambda { - @target.should - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end -end - -describe Object, "#should_not" do - before(:each) do - @target = "target" - @matcher = mock("matcher") - end - - it "should accept and interact with a matcher" do - @matcher.should_receive(:matches?).with(@target).and_return(false) - @matcher.stub!(:negative_failure_message) - - @target.should_not @matcher - end - - it "should ask for a negative_failure_message when matches? returns true" do - @matcher.should_receive(:matches?).with(@target).and_return(true) - @matcher.should_receive(:negative_failure_message).and_return("the negative failure message") - lambda { - @target.should_not @matcher - }.should fail_with("the negative failure message") - end - - it "should raise error if it receives false directly" do - lambda { - @target.should_not false - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives false (evaluated)" do - lambda { - @target.should_not eql?("foo") - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives true" do - lambda { - @target.should_not true - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives nil" do - lambda { - @target.should_not nil - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end - - it "should raise error if it receives no argument and it is not used as a left side of an operator" do - pending "Is it even possible to catch this?" - lambda { - @target.should_not - }.should raise_error(Spec::Expectations::InvalidMatcherError) - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/expectations/fail_with_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/expectations/fail_with_spec.rb deleted file mode 100644 index 4c369ce3a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/expectations/fail_with_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe Spec::Expectations, "#fail_with with no diff" do - before(:each) do - @old_differ = Spec::Expectations.differ - Spec::Expectations.differ = nil - end - - it "should handle just a message" do - lambda { - Spec::Expectations.fail_with "the message" - }.should fail_with("the message") - end - - it "should handle an Array" do - lambda { - Spec::Expectations.fail_with ["the message","expected","actual"] - }.should fail_with("the message") - end - - after(:each) do - Spec::Expectations.differ = @old_differ - end -end - -describe Spec::Expectations, "#fail_with with diff" do - before(:each) do - @old_differ = Spec::Expectations.differ - @differ = mock("differ") - Spec::Expectations.differ = @differ - end - - it "should not call differ if no expected/actual" do - lambda { - Spec::Expectations.fail_with "the message" - }.should fail_with("the message") - end - - it "should call differ if expected/actual are presented separately" do - @differ.should_receive(:diff_as_string).and_return("diff") - lambda { - Spec::Expectations.fail_with "the message", "expected", "actual" - }.should fail_with("the message\nDiff:diff") - end - - it "should call differ if expected/actual are not strings" do - @differ.should_receive(:diff_as_object).and_return("diff") - lambda { - Spec::Expectations.fail_with "the message", :expected, :actual - }.should fail_with("the message\nDiff:diff") - end - - it "should not call differ if expected or actual are procs" do - @differ.should_not_receive(:diff_as_string) - @differ.should_not_receive(:diff_as_object) - lambda { - Spec::Expectations.fail_with "the message", lambda {}, lambda {} - }.should fail_with("the message") - end - - it "should call differ if expected/actual are presented in an Array with message" do - @differ.should_receive(:diff_as_string).with("actual","expected").and_return("diff") - lambda { - Spec::Expectations.fail_with(["the message", "expected", "actual"]) - }.should fail_with(/the message\nDiff:diff/) - end - - after(:each) do - Spec::Expectations.differ = @old_differ - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/extensions/main_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/extensions/main_spec.rb deleted file mode 100644 index aabb616e9..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/extensions/main_spec.rb +++ /dev/null @@ -1,76 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Extensions - describe Main do - it_should_behave_like "sandboxed rspec_options" - before(:each) do - @main = Class.new do; include Main; end - end - - after(:each) do - $rspec_story_steps = @original_rspec_story_steps - end - - it "should create an Options object" do - @main.send(:rspec_options).should be_instance_of(Spec::Runner::Options) - @main.send(:rspec_options).should === $rspec_options - end - - specify {@main.should respond_to(:describe)} - specify {@main.should respond_to(:context)} - - it "should raise when no block given to describe" do - lambda { @main.describe "foo" }.should raise_error(ArgumentError) - end - - it "should raise when no description given to describe" do - lambda { @main.describe do; end }.should raise_error(ArgumentError) - end - - it "should registered ExampleGroups by default" do - example_group = @main.describe("The ExampleGroup") do end - rspec_options.example_groups.should include(example_group) - end - - it "should not run unregistered ExampleGroups" do - example_group = @main.describe("The ExampleGroup") do - unregister - end - - rspec_options.example_groups.should_not include(example_group) - end - - it "should create a shared ExampleGroup with share_examples_for" do - group = @main.share_examples_for "all things" do end - group.should be_an_instance_of(Spec::Example::SharedExampleGroup) - end - - describe "#share_as" do - before(:each) do - $share_as_examples_example_module_number ||= 1 - $share_as_examples_example_module_number += 1 - t = Time.new.to_i - @group_name = "Group#{$share_as_examples_example_module_number}" - end - - it "should create a shared ExampleGroup" do - group = @main.share_as @group_name do end - group.should be_an_instance_of(Spec::Example::SharedExampleGroup) - end - - it "should create a constant that points to a Module" do - group = @main.share_as @group_name do end - Object.const_get(@group_name).should equal(group) - end - - it "should bark if you pass it something not-constantizable" do - lambda do - @group = @main.share_as "Non Constant" do end - end.should raise_error(NameError, /The first argument to share_as must be a legal name for a constant/) - end - - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/test_unit_spec_helper.rb deleted file mode 100644 index 04d5d2713..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/test_unit_spec_helper.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../../../../spec_helper' -require File.dirname(__FILE__) + '/../../../../ruby_forker' - -module TestUnitSpecHelper - include RubyForker - - def run_script(file_name) - output = ruby(file_name) - if !$?.success? || output.include?("FAILED") || output.include?("Error") - raise output - end - output - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec.rb deleted file mode 100644 index 3e10ba7b5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require File.dirname(__FILE__) + '/test_unit_spec_helper' - -describe "Test::Unit::TestCase" do - include TestUnitSpecHelper - it "should pass" do - dir = File.dirname(__FILE__) - output = run_script("#{dir}/testcase_spec_with_test_unit.rb") - output.should include("3 examples, 0 failures") - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb b/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb deleted file mode 100644 index 52afd8e4c..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "test/unit" -require File.dirname(__FILE__) + '/../../../../spec_helper.rb' - -describe "TestCase#method_name" do - it "should equal the description of the example" do - @method_name.should == "should equal the description of the example" - end - - def test_this - true.should be_true - end - - def testThis - true.should be_true - end - - def testament - raise "testament is not a test" - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec.rb deleted file mode 100644 index bcb25b36c..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require File.dirname(__FILE__) + '/test_unit_spec_helper' - -describe "TestSuiteAdapter" do - include TestUnitSpecHelper - it "should pass" do - dir = File.dirname(__FILE__) - run_script "#{dir}/testsuite_adapter_spec_with_test_unit.rb" - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb b/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb deleted file mode 100644 index 8088ef50e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +++ /dev/null @@ -1,34 +0,0 @@ -require "test/unit" -require File.dirname(__FILE__) + '/../../../../spec_helper.rb' - -module TestSuiteAdapterSpecHelper - def create_adapter(group) - Test::Unit::TestSuiteAdapter.new(group) - end -end - -describe "TestSuiteAdapter#size" do - include TestSuiteAdapterSpecHelper - it "should return the number of examples in the example group" do - group = Class.new(Spec::ExampleGroup) do - describe("some examples") - it("bar") {} - it("baz") {} - end - adapter = create_adapter(group) - adapter.size.should == 2 - end -end - -describe "TestSuiteAdapter#delete" do - include TestSuiteAdapterSpecHelper - it "should do nothing" do - group = Class.new(Spec::ExampleGroup) do - describe("Some Examples") - it("does something") {} - end - adapter = create_adapter(group) - adapter.delete(adapter.examples.first) - adapter.should be_empty - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_close_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_close_spec.rb deleted file mode 100644 index d8452d408..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_close_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' -module Spec - module Matchers - describe BeClose do - it "should match when value == target" do - BeClose.new(5.0, 0.5).matches?(5.0).should be_true - end - it "should match when value < (target + delta)" do - BeClose.new(5.0, 0.5).matches?(5.49).should be_true - end - it "should match when value > (target - delta)" do - BeClose.new(5.0, 0.5).matches?(4.51).should be_true - end - it "should not match when value == (target - delta)" do - BeClose.new(5.0, 0.5).matches?(4.5).should be_false - end - it "should not match when value < (target - delta)" do - BeClose.new(5.0, 0.5).matches?(4.49).should be_false - end - it "should not match when value == (target + delta)" do - BeClose.new(5.0, 0.5).matches?(5.5).should be_false - end - it "should not match when value > (target + delta)" do - BeClose.new(5.0, 0.5).matches?(5.51).should be_false - end - it "should provide a useful failure message" do - #given - matcher = BeClose.new(5.0, 0.5) - #when - matcher.matches?(5.51) - #then - matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51" - end - it "should describe itself" do - BeClose.new(5.0, 0.5).description.should == "be close to 5.0 (within +- 0.5)" - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_spec.rb deleted file mode 100644 index d40036c79..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/be_spec.rb +++ /dev/null @@ -1,224 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "should be_predicate" do - it "should pass when actual returns true for :predicate?" do - actual = stub("actual", :happy? => true) - actual.should be_happy - end - - it "should pass when actual returns true for :predicates? (present tense)" do - actual = stub("actual", :exists? => true) - actual.should be_exist - end - - it "should fail when actual returns false for :predicate?" do - actual = stub("actual", :happy? => false) - lambda { - actual.should be_happy - }.should fail_with("expected happy? to return true, got false") - end - - it "should fail when actual does not respond to :predicate?" do - lambda { - Object.new.should be_happy - }.should raise_error(NameError) - end -end - -describe "should_not be_predicate" do - it "should pass when actual returns false for :sym?" do - actual = stub("actual", :happy? => false) - actual.should_not be_happy - end - - it "should fail when actual returns true for :sym?" do - actual = stub("actual", :happy? => true) - lambda { - actual.should_not be_happy - }.should fail_with("expected happy? to return false, got true") - end - - it "should fail when actual does not respond to :sym?" do - lambda { - Object.new.should_not be_happy - }.should raise_error(NameError) - end -end - -describe "should be_predicate(*args)" do - it "should pass when actual returns true for :predicate?(*args)" do - actual = mock("actual") - actual.should_receive(:older_than?).with(3).and_return(true) - actual.should be_older_than(3) - end - - it "should fail when actual returns false for :predicate?(*args)" do - actual = mock("actual") - actual.should_receive(:older_than?).with(3).and_return(false) - lambda { - actual.should be_older_than(3) - }.should fail_with("expected older_than?(3) to return true, got false") - end - - it "should fail when actual does not respond to :predicate?" do - lambda { - Object.new.should be_older_than(3) - }.should raise_error(NameError) - end -end - -describe "should_not be_predicate(*args)" do - it "should pass when actual returns false for :predicate?(*args)" do - actual = mock("actual") - actual.should_receive(:older_than?).with(3).and_return(false) - actual.should_not be_older_than(3) - end - - it "should fail when actual returns true for :predicate?(*args)" do - actual = mock("actual") - actual.should_receive(:older_than?).with(3).and_return(true) - lambda { - actual.should_not be_older_than(3) - }.should fail_with("expected older_than?(3) to return false, got true") - end - - it "should fail when actual does not respond to :predicate?" do - lambda { - Object.new.should_not be_older_than(3) - }.should raise_error(NameError) - end -end - -describe "should be_true" do - it "should pass when actual equal(true)" do - true.should be_true - end - - it "should fail when actual equal(false)" do - lambda { - false.should be_true - }.should fail_with("expected true, got false") - end -end - -describe "should be_false" do - it "should pass when actual equal(false)" do - false.should be_false - end - - it "should fail when actual equal(true)" do - lambda { - true.should be_false - }.should fail_with("expected false, got true") - end -end - -describe "should be_nil" do - it "should pass when actual is nil" do - nil.should be_nil - end - - it "should fail when actual is not nil" do - lambda { - :not_nil.should be_nil - }.should fail_with("expected nil, got :not_nil") - end -end - -describe "should_not be_nil" do - it "should pass when actual is not nil" do - :not_nil.should_not be_nil - end - - it "should fail when actual is nil" do - lambda { - nil.should_not be_nil - }.should fail_with("expected not nil, got nil") - end -end - -describe "should be <" do - it "should pass when < operator returns true" do - 3.should be < 4 - end - - it "should fail when < operator returns false" do - lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3") - end -end - -describe "should be <=" do - it "should pass when <= operator returns true" do - 3.should be <= 4 - 4.should be <= 4 - end - - it "should fail when <= operator returns false" do - lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3") - end -end - -describe "should be >=" do - it "should pass when >= operator returns true" do - 4.should be >= 4 - 5.should be >= 4 - end - - it "should fail when >= operator returns false" do - lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3") - end -end - -describe "should be >" do - it "should pass when > operator returns true" do - 5.should be > 4 - end - - it "should fail when > operator returns false" do - lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3") - end -end - -describe "should be ==" do - it "should pass when == operator returns true" do - 5.should be == 5 - end - - it "should fail when == operator returns false" do - lambda { 3.should be == 4 }.should fail_with("expected == 4, got 3") - end -end - -describe "should be ===" do - it "should pass when === operator returns true" do - Hash.should be === Hash.new - end - - it "should fail when === operator returns false" do - lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash]) - end -end - -describe "should be" do - it "should pass if actual is true or a set value" do - true.should be - 1.should be - end - - it "should fail if actual is false" do - lambda {false.should be}.should fail_with("expected if to be satisfied, got false") - end - - it "should fail if actual is nil" do - lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil") - end -end - -describe "should be(value)" do - it "should pass if actual.equal?(value)" do - 5.should be(5) - end - it "should fail if !actual.equal?(value)" do - lambda { 5.should be(6) }.should fail_with("expected 6, got 5") - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/change_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/change_spec.rb deleted file mode 100644 index d95aa6da4..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/change_spec.rb +++ /dev/null @@ -1,319 +0,0 @@ -#Based on patch from Wilson Bilkovich - -require File.dirname(__FILE__) + '/../../spec_helper.rb' -class SomethingExpected - attr_accessor :some_value -end - -describe "should change(actual, message)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when actual is modified by the block" do - lambda {@instance.some_value = 6}.should change(@instance, :some_value) - end - - it "should fail when actual is not modified by the block" do - lambda do - lambda {}.should change(@instance, :some_value) - end.should fail_with("some_value should have changed, but is still 5") - end -end - -describe "should_not change(actual, message)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when actual is not modified by the block" do - lambda { }.should_not change(@instance, :some_value) - end - - it "should fail when actual is not modified by the block" do - lambda do - lambda {@instance.some_value = 6}.should_not change(@instance, :some_value) - end.should fail_with("some_value should not have changed, but did change from 5 to 6") - end -end - -describe "should change { block }" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when actual is modified by the block" do - lambda {@instance.some_value = 6}.should change { @instance.some_value } - end - - it "should fail when actual is not modified by the block" do - lambda do - lambda {}.should change{ @instance.some_value } - end.should fail_with("result should have changed, but is still 5") - end - - it "should warn if passed a block using do/end" do - lambda do - lambda {}.should change do - end - end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/) - end -end - -describe "should_not change { block }" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when actual is modified by the block" do - lambda {}.should_not change{ @instance.some_value } - end - - it "should fail when actual is not modified by the block" do - lambda do - lambda {@instance.some_value = 6}.should_not change { @instance.some_value } - end.should fail_with("result should not have changed, but did change from 5 to 6") - end - - it "should warn if passed a block using do/end" do - lambda do - lambda {}.should_not change do - end - end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/) - end -end - -describe "should change(actual, message).by(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by expected amount" do - lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1) - end - - it "should fail when the attribute is changed by unexpected amount" do - lambda do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1) - end.should fail_with("some_value should have been changed by 1, but was changed by 2") - end - - it "should fail when the attribute is changed by unexpected amount in the opposite direction" do - lambda do - lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1) - end.should fail_with("some_value should have been changed by 1, but was changed by -1") - end -end - -describe "should change{ block }.by(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by expected amount" do - lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1) - end - - it "should fail when the attribute is changed by unexpected amount" do - lambda do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1) - end.should fail_with("result should have been changed by 1, but was changed by 2") - end - - it "should fail when the attribute is changed by unexpected amount in the opposite direction" do - lambda do - lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1) - end.should fail_with("result should have been changed by 1, but was changed by -1") - end -end - -describe "should change(actual, message).by_at_least(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by greater than the expected amount" do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1) - end - - it "should pass when attribute is changed by the expected amount" do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2) - end - - it "should fail when the attribute is changed by less than the expected amount" do - lambda do - lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2) - end.should fail_with("some_value should have been changed by at least 2, but was changed by 1") - end - -end - -describe "should change{ block }.by_at_least(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by greater than expected amount" do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1) - end - - it "should pass when attribute is changed by the expected amount" do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2) - end - - it "should fail when the attribute is changed by less than the unexpected amount" do - lambda do - lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2) - end.should fail_with("result should have been changed by at least 2, but was changed by 1") - end -end - - -describe "should change(actual, message).by_at_most(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by less than the expected amount" do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3) - end - - it "should pass when attribute is changed by the expected amount" do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2) - end - - it "should fail when the attribute is changed by greater than the expected amount" do - lambda do - lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1) - end.should fail_with("some_value should have been changed by at most 1, but was changed by 2") - end - -end - -describe "should change{ block }.by_at_most(expected)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 5 - end - - it "should pass when attribute is changed by less than expected amount" do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3) - end - - it "should pass when attribute is changed by the expected amount" do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2) - end - - it "should fail when the attribute is changed by greater than the unexpected amount" do - lambda do - lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1) - end.should fail_with("result should have been changed by at most 1, but was changed by 2") - end -end - -describe "should change(actual, message).from(old)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when attribute is == to expected value before executing block" do - lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string") - end - - it "should fail when attribute is not == to expected value before executing block" do - lambda do - lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat") - end.should fail_with("some_value should have initially been \"cat\", but was \"string\"") - end -end - -describe "should change{ block }.from(old)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when attribute is == to expected value before executing block" do - lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string") - end - - it "should fail when attribute is not == to expected value before executing block" do - lambda do - lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat") - end.should fail_with("result should have initially been \"cat\", but was \"string\"") - end -end - -describe "should change(actual, message).to(new)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when attribute is == to expected value after executing block" do - lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat") - end - - it "should fail when attribute is not == to expected value after executing block" do - lambda do - lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog") - end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"") - end -end - -describe "should change{ block }.to(new)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when attribute is == to expected value after executing block" do - lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat") - end - - it "should fail when attribute is not == to expected value after executing block" do - lambda do - lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog") - end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"") - end -end - -describe "should change(actual, message).from(old).to(new)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when #to comes before #from" do - lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string") - end - - it "should pass when #from comes before #to" do - lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat") - end -end - -describe "should change{ block }.from(old).to(new)" do - before(:each) do - @instance = SomethingExpected.new - @instance.some_value = 'string' - end - - it "should pass when #to comes before #from" do - lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string") - end - - it "should pass when #from comes before #to" do - lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat") - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/description_generation_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/description_generation_spec.rb deleted file mode 100644 index c494e2165..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/description_generation_spec.rb +++ /dev/null @@ -1,153 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "Matchers should be able to generate their own descriptions" do - after(:each) do - Spec::Matchers.clear_generated_description - end - - it "should == expected" do - "this".should == "this" - Spec::Matchers.generated_description.should == "should == \"this\"" - end - - it "should not == expected" do - "this".should_not == "that" - Spec::Matchers.generated_description.should == "should not == \"that\"" - end - - it "should be empty (arbitrary predicate)" do - [].should be_empty - Spec::Matchers.generated_description.should == "should be empty" - end - - it "should not be empty (arbitrary predicate)" do - [1].should_not be_empty - Spec::Matchers.generated_description.should == "should not be empty" - end - - it "should be true" do - true.should be_true - Spec::Matchers.generated_description.should == "should be true" - end - - it "should be false" do - false.should be_false - Spec::Matchers.generated_description.should == "should be false" - end - - it "should be nil" do - nil.should be_nil - Spec::Matchers.generated_description.should == "should be nil" - end - - it "should be > n" do - 5.should be > 3 - Spec::Matchers.generated_description.should == "should be > 3" - end - - it "should be predicate arg1, arg2 and arg3" do - 5.0.should be_between(0,10) - Spec::Matchers.generated_description.should == "should be between 0 and 10" - end - - it "should be_few_words predicate should be transformed to 'be few words'" do - 5.should be_kind_of(Fixnum) - Spec::Matchers.generated_description.should == "should be kind of Fixnum" - end - - it "should preserve a proper prefix for be predicate" do - 5.should be_a_kind_of(Fixnum) - Spec::Matchers.generated_description.should == "should be a kind of Fixnum" - 5.should be_an_instance_of(Fixnum) - Spec::Matchers.generated_description.should == "should be an instance of Fixnum" - end - - it "should equal" do - expected = "expected" - expected.should equal(expected) - Spec::Matchers.generated_description.should == "should equal \"expected\"" - end - - it "should_not equal" do - 5.should_not equal(37) - Spec::Matchers.generated_description.should == "should not equal 37" - end - - it "should eql" do - "string".should eql("string") - Spec::Matchers.generated_description.should == "should eql \"string\"" - end - - it "should not eql" do - "a".should_not eql(:a) - Spec::Matchers.generated_description.should == "should not eql :a" - end - - it "should have_key" do - {:a => "a"}.should have_key(:a) - Spec::Matchers.generated_description.should == "should have key :a" - end - - it "should have n items" do - team.should have(3).players - Spec::Matchers.generated_description.should == "should have 3 players" - end - - it "should have at least n items" do - team.should have_at_least(2).players - Spec::Matchers.generated_description.should == "should have at least 2 players" - end - - it "should have at most n items" do - team.should have_at_most(4).players - Spec::Matchers.generated_description.should == "should have at most 4 players" - end - - it "should include" do - [1,2,3].should include(3) - Spec::Matchers.generated_description.should == "should include 3" - end - - it "should match" do - "this string".should match(/this string/) - Spec::Matchers.generated_description.should == "should match /this string/" - end - - it "should raise_error" do - lambda { raise }.should raise_error - Spec::Matchers.generated_description.should == "should raise Exception" - end - - it "should raise_error with type" do - lambda { raise }.should raise_error(RuntimeError) - Spec::Matchers.generated_description.should == "should raise RuntimeError" - end - - it "should raise_error with type and message" do - lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error") - Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\"" - end - - it "should respond_to" do - [].should respond_to(:insert) - Spec::Matchers.generated_description.should == "should respond to #insert" - end - - it "should throw symbol" do - lambda { throw :what_a_mess }.should throw_symbol - Spec::Matchers.generated_description.should == "should throw a Symbol" - end - - it "should throw symbol (with named symbol)" do - lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess) - Spec::Matchers.generated_description.should == "should throw :what_a_mess" - end - - def team - Class.new do - def players - [1,2,3] - end - end.new - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/eql_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/eql_spec.rb deleted file mode 100644 index 3f265d700..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/eql_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Matchers - describe Eql do - it "should match when actual.eql?(expected)" do - Eql.new(1).matches?(1).should be_true - end - it "should not match when !actual.eql?(expected)" do - Eql.new(1).matches?(2).should be_false - end - it "should describe itself" do - matcher = Eql.new(1) - matcher.description.should == "eql 1" - end - it "should provide message, expected and actual on #failure_message" do - matcher = Eql.new("1") - matcher.matches?(1) - matcher.failure_message.should == ["expected \"1\", got 1 (using .eql?)", "1", 1] - end - it "should provide message, expected and actual on #negative_failure_message" do - matcher = Eql.new(1) - matcher.matches?(1) - matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .eql?)", 1, 1] - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/equal_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/equal_spec.rb deleted file mode 100644 index 7667bdc38..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/equal_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Matchers - describe Equal do - it "should match when actual.equal?(expected)" do - Equal.new(1).matches?(1).should be_true - end - it "should not match when !actual.equal?(expected)" do - Equal.new("1").matches?("1").should be_false - end - it "should describe itself" do - matcher = Equal.new(1) - matcher.description.should == "equal 1" - end - it "should provide message, expected and actual on #failure_message" do - matcher = Equal.new("1") - matcher.matches?(1) - matcher.failure_message.should == ["expected \"1\", got 1 (using .equal?)", "1", 1] - end - it "should provide message, expected and actual on #negative_failure_message" do - matcher = Equal.new(1) - matcher.matches?(1) - matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .equal?)", 1, 1] - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/exist_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/exist_spec.rb deleted file mode 100644 index 0a509726e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/exist_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -class Substance - def initialize exists, description - @exists = exists - @description = description - end - def exist? - @exists - end - def inspect - @description - end -end - -class SubstanceTester - include Spec::Matchers - def initialize substance - @substance = substance - end - def should_exist - @substance.should exist - end -end - -describe "should exist," do - - before(:each) do - @real = Substance.new true, 'something real' - @imaginary = Substance.new false, 'something imaginary' - end - - describe "within an example group" do - - it "should pass if target exists" do - @real.should exist - end - - it "should fail if target does not exist" do - lambda { @imaginary.should exist }.should fail - end - - it "should pass if target doesn't exist" do - lambda { @real.should_not exist }.should fail - end - end - - describe "outside of an example group" do - - it "should pass if target exists" do - real_tester = SubstanceTester.new @real - real_tester.should_exist - end - - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/handler_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/handler_spec.rb deleted file mode 100644 index ad4fe6f85..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/handler_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module ExampleExpectations - - class ArbitraryMatcher - def initialize(*args, &block) - if args.last.is_a? Hash - @expected = args.last[:expected] - end - if block_given? - @expected = block.call - end - @block = block - end - - def matches?(target) - @target = target - return @expected == target - end - - def with(new_value) - @expected = new_value - self - end - - def failure_message - "expected #{@expected}, got #{@target}" - end - - def negative_failure_message - "expected not #{@expected}, got #{@target}" - end - end - - class PositiveOnlyMatcher < ArbitraryMatcher - undef negative_failure_message rescue nil - end - - def arbitrary_matcher(*args, &block) - ArbitraryMatcher.new(*args, &block) - end - - def positive_only_matcher(*args, &block) - PositiveOnlyMatcher.new(*args, &block) - end - -end - -module Spec - module Expectations - describe ExpectationMatcherHandler, ".handle_matcher" do - it "should ask the matcher if it matches" do - matcher = mock("matcher") - actual = Object.new - matcher.should_receive(:matches?).with(actual).and_return(true) - ExpectationMatcherHandler.handle_matcher(actual, matcher) - end - - it "should explain when the matcher parameter is not a matcher" do - begin - nonmatcher = mock("nonmatcher") - actual = Object.new - ExpectationMatcherHandler.handle_matcher(actual, nonmatcher) - rescue Spec::Expectations::InvalidMatcherError => e - end - - e.message.should =~ /^Expected a matcher, got / - end - end - - describe NegativeExpectationMatcherHandler, ".handle_matcher" do - it "should explain when matcher does not support should_not" do - matcher = mock("matcher") - matcher.stub!(:matches?) - actual = Object.new - lambda { - NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) - }.should fail_with(/Matcher does not support should_not.\n/) - end - - it "should ask the matcher if it matches" do - matcher = mock("matcher") - actual = Object.new - matcher.stub!(:negative_failure_message) - matcher.should_receive(:matches?).with(actual).and_return(false) - NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) - end - - it "should explain when the matcher parameter is not a matcher" do - begin - nonmatcher = mock("nonmatcher") - actual = Object.new - NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher) - rescue Spec::Expectations::InvalidMatcherError => e - end - - e.message.should =~ /^Expected a matcher, got / - end - end - - describe ExpectationMatcherHandler do - include ExampleExpectations - - it "should handle submitted args" do - 5.should arbitrary_matcher(:expected => 5) - 5.should arbitrary_matcher(:expected => "wrong").with(5) - lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5") - lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5") - 5.should_not arbitrary_matcher(:expected => 4) - 5.should_not arbitrary_matcher(:expected => 5).with(4) - lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5") - lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5") - end - - it "should handle the submitted block" do - 5.should arbitrary_matcher { 5 } - 5.should arbitrary_matcher(:expected => 4) { 5 } - 5.should arbitrary_matcher(:expected => 4).with(5) { 3 } - end - - it "should explain when matcher does not support should_not" do - lambda { - 5.should_not positive_only_matcher(:expected => 5) - }.should fail_with(/Matcher does not support should_not.\n/) - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/has_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/has_spec.rb deleted file mode 100644 index 47f048ebf..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/has_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "should have_sym(*args)" do - it "should pass if #has_sym?(*args) returns true" do - {:a => "A"}.should have_key(:a) - end - - it "should fail if #has_sym?(*args) returns false" do - lambda { - {:b => "B"}.should have_key(:a) - }.should fail_with("expected #has_key?(:a) to return true, got false") - end - - it "should fail if target does not respond to #has_sym?" do - lambda { - Object.new.should have_key(:a) - }.should raise_error(NoMethodError) - end -end - -describe "should_not have_sym(*args)" do - it "should pass if #has_sym?(*args) returns false" do - {:a => "A"}.should_not have_key(:b) - end - - it "should fail if #has_sym?(*args) returns true" do - lambda { - {:a => "A"}.should_not have_key(:a) - }.should fail_with("expected #has_key?(:a) to return false, got true") - end - - it "should fail if target does not respond to #has_sym?" do - lambda { - Object.new.should have_key(:a) - }.should raise_error(NoMethodError) - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/have_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/have_spec.rb deleted file mode 100644 index 27083c294..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/have_spec.rb +++ /dev/null @@ -1,291 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module HaveSpecHelper - def create_collection_owner_with(n) - owner = Spec::Expectations::Helper::CollectionOwner.new - (1..n).each do |n| - owner.add_to_collection_with_length_method(n) - owner.add_to_collection_with_size_method(n) - end - owner - end -end - -describe "should have(n).items" do - include HaveSpecHelper - - it "should pass if target has a collection of items with n members" do - owner = create_collection_owner_with(3) - owner.should have(3).items_in_collection_with_length_method - owner.should have(3).items_in_collection_with_size_method - end - - it "should convert :no to 0" do - owner = create_collection_owner_with(0) - owner.should have(:no).items_in_collection_with_length_method - owner.should have(:no).items_in_collection_with_size_method - end - - it "should fail if target has a collection of items with < n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have(4).items_in_collection_with_length_method - }.should fail_with("expected 4 items_in_collection_with_length_method, got 3") - lambda { - owner.should have(4).items_in_collection_with_size_method - }.should fail_with("expected 4 items_in_collection_with_size_method, got 3") - end - - it "should fail if target has a collection of items with > n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have(2).items_in_collection_with_length_method - }.should fail_with("expected 2 items_in_collection_with_length_method, got 3") - lambda { - owner.should have(2).items_in_collection_with_size_method - }.should fail_with("expected 2 items_in_collection_with_size_method, got 3") - end -end - -describe 'should have(1).item when Inflector is defined' do - include HaveSpecHelper - - before do - unless Object.const_defined?(:Inflector) - class Inflector - def self.pluralize(string) - string.to_s + 's' - end - end - end - end - - it 'should pluralize the collection name' do - owner = create_collection_owner_with(1) - owner.should have(1).item - end -end - -describe "should have(n).items where result responds to items but returns something other than a collection" do - it "should provide a meaningful error" do - owner = Class.new do - def items - Object.new - end - end.new - lambda do - owner.should have(3).items - end.should raise_error("expected items to be a collection but it does not respond to #length or #size") - end -end - -describe "should_not have(n).items" do - include HaveSpecHelper - - it "should pass if target has a collection of items with < n members" do - owner = create_collection_owner_with(3) - owner.should_not have(4).items_in_collection_with_length_method - owner.should_not have(4).items_in_collection_with_size_method - end - - it "should pass if target has a collection of items with > n members" do - owner = create_collection_owner_with(3) - owner.should_not have(2).items_in_collection_with_length_method - owner.should_not have(2).items_in_collection_with_size_method - end - - it "should fail if target has a collection of items with n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should_not have(3).items_in_collection_with_length_method - }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3") - lambda { - owner.should_not have(3).items_in_collection_with_size_method - }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3") - end -end - -describe "should have_exactly(n).items" do - include HaveSpecHelper - - it "should pass if target has a collection of items with n members" do - owner = create_collection_owner_with(3) - owner.should have_exactly(3).items_in_collection_with_length_method - owner.should have_exactly(3).items_in_collection_with_size_method - end - - it "should convert :no to 0" do - owner = create_collection_owner_with(0) - owner.should have_exactly(:no).items_in_collection_with_length_method - owner.should have_exactly(:no).items_in_collection_with_size_method - end - - it "should fail if target has a collection of items with < n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have_exactly(4).items_in_collection_with_length_method - }.should fail_with("expected 4 items_in_collection_with_length_method, got 3") - lambda { - owner.should have_exactly(4).items_in_collection_with_size_method - }.should fail_with("expected 4 items_in_collection_with_size_method, got 3") - end - - it "should fail if target has a collection of items with > n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have_exactly(2).items_in_collection_with_length_method - }.should fail_with("expected 2 items_in_collection_with_length_method, got 3") - lambda { - owner.should have_exactly(2).items_in_collection_with_size_method - }.should fail_with("expected 2 items_in_collection_with_size_method, got 3") - end -end - -describe "should have_at_least(n).items" do - include HaveSpecHelper - - it "should pass if target has a collection of items with n members" do - owner = create_collection_owner_with(3) - owner.should have_at_least(3).items_in_collection_with_length_method - owner.should have_at_least(3).items_in_collection_with_size_method - end - - it "should pass if target has a collection of items with > n members" do - owner = create_collection_owner_with(3) - owner.should have_at_least(2).items_in_collection_with_length_method - owner.should have_at_least(2).items_in_collection_with_size_method - end - - it "should fail if target has a collection of items with < n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have_at_least(4).items_in_collection_with_length_method - }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3") - lambda { - owner.should have_at_least(4).items_in_collection_with_size_method - }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3") - end - - it "should provide educational negative failure messages" do - #given - owner = create_collection_owner_with(3) - length_matcher = have_at_least(3).items_in_collection_with_length_method - size_matcher = have_at_least(3).items_in_collection_with_size_method - - #when - length_matcher.matches?(owner) - size_matcher.matches?(owner) - - #then - length_matcher.negative_failure_message.should == <<-EOF -Isn't life confusing enough? -Instead of having to figure out the meaning of this: - should_not have_at_least(3).items_in_collection_with_length_method -We recommend that you use this instead: - should have_at_most(2).items_in_collection_with_length_method -EOF - - size_matcher.negative_failure_message.should == <<-EOF -Isn't life confusing enough? -Instead of having to figure out the meaning of this: - should_not have_at_least(3).items_in_collection_with_size_method -We recommend that you use this instead: - should have_at_most(2).items_in_collection_with_size_method -EOF - end -end - -describe "should have_at_most(n).items" do - include HaveSpecHelper - - it "should pass if target has a collection of items with n members" do - owner = create_collection_owner_with(3) - owner.should have_at_most(3).items_in_collection_with_length_method - owner.should have_at_most(3).items_in_collection_with_size_method - end - - it "should fail if target has a collection of items with > n members" do - owner = create_collection_owner_with(3) - lambda { - owner.should have_at_most(2).items_in_collection_with_length_method - }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3") - lambda { - owner.should have_at_most(2).items_in_collection_with_size_method - }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3") - end - - it "should pass if target has a collection of items with < n members" do - owner = create_collection_owner_with(3) - owner.should have_at_most(4).items_in_collection_with_length_method - owner.should have_at_most(4).items_in_collection_with_size_method - end - - it "should provide educational negative failure messages" do - #given - owner = create_collection_owner_with(3) - length_matcher = have_at_most(3).items_in_collection_with_length_method - size_matcher = have_at_most(3).items_in_collection_with_size_method - - #when - length_matcher.matches?(owner) - size_matcher.matches?(owner) - - #then - length_matcher.negative_failure_message.should == <<-EOF -Isn't life confusing enough? -Instead of having to figure out the meaning of this: - should_not have_at_most(3).items_in_collection_with_length_method -We recommend that you use this instead: - should have_at_least(4).items_in_collection_with_length_method -EOF - - size_matcher.negative_failure_message.should == <<-EOF -Isn't life confusing enough? -Instead of having to figure out the meaning of this: - should_not have_at_most(3).items_in_collection_with_size_method -We recommend that you use this instead: - should have_at_least(4).items_in_collection_with_size_method -EOF - end -end - -describe "have(n).items(args, block)" do - it "should pass args to target" do - target = mock("target") - target.should_receive(:items).with("arg1","arg2").and_return([1,2,3]) - target.should have(3).items("arg1","arg2") - end - - it "should pass block to target" do - target = mock("target") - block = lambda { 5 } - target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3]) - target.should have(3).items("arg1","arg2", block) - end -end - -describe "have(n).items where target IS a collection" do - it "should reference the number of items IN the collection" do - [1,2,3].should have(3).items - end - - it "should fail when the number of items IN the collection is not as expected" do - lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3") - end -end - -describe "have(n).characters where target IS a String" do - it "should pass if the length is correct" do - "this string".should have(11).characters - end - - it "should fail if the length is incorrect" do - lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11") - end -end - -describe "have(n).things on an object which is not a collection nor contains one" do - it "should fail" do - lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #" do - - it "should pass if > passes" do - 4.should > 3 - end - - it "should fail if > fails" do - Spec::Expectations.should_receive(:fail_with).with(%[expected: > 5,\n got: 4], 5, 4) - 4.should > 5 - end - -end - -describe "should >=" do - - it "should pass if >= passes" do - 4.should > 3 - 4.should >= 4 - end - - it "should fail if > fails" do - Spec::Expectations.should_receive(:fail_with).with(%[expected: >= 5,\n got: 4], 5, 4) - 4.should >= 5 - end - -end - -describe "should <" do - - it "should pass if < passes" do - 4.should < 5 - end - - it "should fail if > fails" do - Spec::Expectations.should_receive(:fail_with).with(%[expected: < 3,\n got: 4], 3, 4) - 4.should < 3 - end - -end - -describe "should <=" do - - it "should pass if <= passes" do - 4.should <= 5 - 4.should <= 4 - end - - it "should fail if > fails" do - Spec::Expectations.should_receive(:fail_with).with(%[expected: <= 3,\n got: 4], 3, 4) - 4.should <= 3 - end - -end - diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/raise_error_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/raise_error_spec.rb deleted file mode 100644 index f33fba903..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/raise_error_spec.rb +++ /dev/null @@ -1,185 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "should raise_error" do - it "should pass if anything is raised" do - lambda {raise}.should raise_error - end - - it "should fail if nothing is raised" do - lambda { - lambda {}.should raise_error - }.should fail_with("expected Exception but nothing was raised") - end -end - -describe "should_not raise_error" do - it "should pass if nothing is raised" do - lambda {}.should_not raise_error - end - - it "should fail if anything is raised" do - lambda { - lambda {raise}.should_not raise_error - }.should fail_with("expected no Exception, got RuntimeError") - end -end - -describe "should raise_error(message)" do - it "should pass if RuntimeError is raised with the right message" do - lambda {raise 'blah'}.should raise_error('blah') - end - it "should pass if any other error is raised with the right message" do - lambda {raise NameError.new('blah')}.should raise_error('blah') - end - it "should fail if RuntimeError error is raised with the wrong message" do - lambda do - lambda {raise 'blarg'}.should raise_error('blah') - end.should fail_with("expected Exception with \"blah\", got #") - end - it "should fail if any other error is raised with the wrong message" do - lambda do - lambda {raise NameError.new('blarg')}.should raise_error('blah') - end.should fail_with("expected Exception with \"blah\", got #") - end -end - -describe "should_not raise_error(message)" do - it "should pass if RuntimeError error is raised with the different message" do - lambda {raise 'blarg'}.should_not raise_error('blah') - end - it "should pass if any other error is raised with the wrong message" do - lambda {raise NameError.new('blarg')}.should_not raise_error('blah') - end - it "should fail if RuntimeError is raised with message" do - lambda do - lambda {raise 'blah'}.should_not raise_error('blah') - end.should fail_with(%Q|expected no Exception with "blah", got #|) - end - it "should fail if any other error is raised with message" do - lambda do - lambda {raise NameError.new('blah')}.should_not raise_error('blah') - end.should fail_with(%Q|expected no Exception with "blah", got #|) - end -end - -describe "should raise_error(NamedError)" do - it "should pass if named error is raised" do - lambda { non_existent_method }.should raise_error(NameError) - end - - it "should fail if nothing is raised" do - lambda { - lambda { }.should raise_error(NameError) - }.should fail_with("expected NameError but nothing was raised") - end - - it "should fail if another error is raised" do - lambda { - lambda { raise }.should raise_error(NameError) - }.should fail_with("expected NameError, got RuntimeError") - end -end - -describe "should_not raise_error(NamedError)" do - it "should pass if nothing is raised" do - lambda { }.should_not raise_error(NameError) - end - - it "should pass if another error is raised" do - lambda { raise }.should_not raise_error(NameError) - end - - it "should fail if named error is raised" do - lambda { - lambda { non_existent_method }.should_not raise_error(NameError) - }.should fail_with(/expected no NameError, got #") - end -end - -describe "should raise_error(NamedError, error_message) with Regexp" do - it "should pass if named error is raised with matching message" do - lambda { raise "example message" }.should raise_error(RuntimeError, /ample mess/) - end - - it "should fail if nothing is raised" do - lambda { - lambda {}.should raise_error(RuntimeError, /ample mess/) - }.should fail_with("expected RuntimeError with message matching /ample mess/ but nothing was raised") - end - - it "should fail if incorrect error is raised" do - lambda { - lambda { raise }.should raise_error(NameError, /ample mess/) - }.should fail_with("expected NameError with message matching /ample mess/, got RuntimeError") - end - - it "should fail if correct error is raised with incorrect message" do - lambda { - lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, /less than ample mess/) - }.should fail_with("expected RuntimeError with message matching /less than ample mess/, got #") - end -end - -describe "should_not raise_error(NamedError, error_message) with Regexp" do - it "should pass if nothing is raised" do - lambda {}.should_not raise_error(RuntimeError, /ample mess/) - end - - it "should pass if a different error is raised" do - lambda { raise }.should_not raise_error(NameError, /ample mess/) - end - - it "should pass if same error is raised with non-matching message" do - lambda { raise RuntimeError.new("non matching message") }.should_not raise_error(RuntimeError, /ample mess/) - end - - it "should fail if named error is raised with matching message" do - lambda { - lambda { raise "example message" }.should_not raise_error(RuntimeError, /ample mess/) - }.should fail_with("expected no RuntimeError with message matching /ample mess/, got #") - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/respond_to_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/respond_to_spec.rb deleted file mode 100644 index 2cdbbcd63..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/respond_to_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "should respond_to(:sym)" do - - it "should pass if target responds to :sym" do - Object.new.should respond_to(:methods) - end - - it "should fail target does not respond to :sym" do - lambda { - Object.new.should respond_to(:some_method) - }.should fail_with("expected target to respond to :some_method") - end - -end - -describe "should respond_to(message1, message2)" do - - it "should pass if target responds to both messages" do - Object.new.should respond_to('methods', 'inspect') - end - - it "should fail target does not respond to first message" do - lambda { - Object.new.should respond_to('method_one', 'inspect') - }.should fail_with('expected target to respond to "method_one"') - end - - it "should fail target does not respond to second message" do - lambda { - Object.new.should respond_to('inspect', 'method_one') - }.should fail_with('expected target to respond to "method_one"') - end - - it "should fail target does not respond to either message" do - lambda { - Object.new.should respond_to('method_one', 'method_two') - }.should fail_with('expected target to respond to "method_one", "method_two"') - end -end - -describe "should_not respond_to(:sym)" do - - it "should pass if target does not respond to :sym" do - Object.new.should_not respond_to(:some_method) - end - - it "should fail target responds to :sym" do - lambda { - Object.new.should_not respond_to(:methods) - }.should fail_with("expected target not to respond to :methods") - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/satisfy_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/satisfy_spec.rb deleted file mode 100644 index 7e8d6f972..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/satisfy_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "should satisfy { block }" do - it "should pass if block returns true" do - true.should satisfy { |val| val } - true.should satisfy do |val| - val - end - end - - it "should fail if block returns false" do - lambda { - false.should satisfy { |val| val } - }.should fail_with("expected false to satisfy block") - lambda do - false.should satisfy do |val| - val - end - end.should fail_with("expected false to satisfy block") - end -end - -describe "should_not satisfy { block }" do - it "should pass if block returns false" do - false.should_not satisfy { |val| val } - false.should_not satisfy do |val| - val - end - end - - it "should fail if block returns true" do - lambda { - true.should_not satisfy { |val| val } - }.should fail_with("expected true not to satisfy block") - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/simple_matcher_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/simple_matcher_spec.rb deleted file mode 100644 index b731af92d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/simple_matcher_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Matchers - describe SimpleMatcher do - it "should match pass match arg to block" do - actual = nil - matcher = simple_matcher("message") do |given| actual = given end - matcher.matches?("foo") - actual.should == "foo" - end - - it "should provide a stock failure message" do - matcher = simple_matcher("thing") do end - matcher.matches?("other") - matcher.failure_message.should =~ /expected \"thing\" but got \"other\"/ - end - - it "should provide a stock negative failure message" do - matcher = simple_matcher("thing") do end - matcher.matches?("other") - matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/ - end - - it "should provide a description" do - matcher = simple_matcher("thing") do end - matcher.description.should =="thing" - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/matchers/throw_symbol_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/matchers/throw_symbol_spec.rb deleted file mode 100644 index 74595659a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/matchers/throw_symbol_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Matchers - describe ThrowSymbol, "(constructed with no Symbol)" do - before(:each) { @matcher = ThrowSymbol.new } - - it "should match if any Symbol is thrown" do - @matcher.matches?(lambda{ throw :sym }).should be_true - end - it "should not match if no Symbol is thrown" do - @matcher.matches?(lambda{ }).should be_false - end - it "should provide a failure message" do - @matcher.matches?(lambda{}) - @matcher.failure_message.should == "expected a Symbol but nothing was thrown" - end - it "should provide a negative failure message" do - @matcher.matches?(lambda{ throw :sym}) - @matcher.negative_failure_message.should == "expected no Symbol, got :sym" - end - end - - describe ThrowSymbol, "(constructed with a Symbol)" do - before(:each) { @matcher = ThrowSymbol.new(:sym) } - - it "should match if correct Symbol is thrown" do - @matcher.matches?(lambda{ throw :sym }).should be_true - end - it "should not match if no Symbol is thrown" do - @matcher.matches?(lambda{ }).should be_false - end - it "should not match if correct Symbol is thrown" do - @matcher.matches?(lambda{ throw :other_sym }).should be_false - @matcher.failure_message.should == "expected :sym, got :other_sym" - end - it "should provide a failure message when no Symbol is thrown" do - @matcher.matches?(lambda{}) - @matcher.failure_message.should == "expected :sym but nothing was thrown" - end - it "should provide a failure message when wrong Symbol is thrown" do - @matcher.matches?(lambda{ throw :other_sym }) - @matcher.failure_message.should == "expected :sym, got :other_sym" - end - it "should provide a negative failure message" do - @matcher.matches?(lambda{ throw :sym }) - @matcher.negative_failure_message.should == "expected :sym not to be thrown" - end - it "should only match NameErrors raised by uncaught throws" do - @matcher.matches?(lambda{ sym }).should be_false - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/any_number_of_times_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/any_number_of_times_spec.rb deleted file mode 100644 index 3f50dcfc5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/any_number_of_times_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - - describe "AnyNumberOfTimes" do - before(:each) do - @mock = Mock.new("test mock") - end - - it "should pass if any number of times method is called many times" do - @mock.should_receive(:random_call).any_number_of_times - (1..10).each do - @mock.random_call - end - end - - it "should pass if any number of times method is called once" do - @mock.should_receive(:random_call).any_number_of_times - @mock.random_call - end - - it "should pass if any number of times method is not called" do - @mock.should_receive(:random_call).any_number_of_times - end - end - - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/argument_expectation_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/argument_expectation_spec.rb deleted file mode 100644 index 2bebbdd4f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/argument_expectation_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe ArgumentExpectation do - it "should consider an object that responds to #matches? and #description to be a matcher" do - argument_expecatation = Spec::Mocks::ArgumentExpectation.new([]) - obj = mock("matcher") - obj.should_receive(:respond_to?).with(:matches?).and_return(true) - obj.should_receive(:respond_to?).with(:description).and_return(true) - argument_expecatation.is_matcher?(obj).should be_true - end - - it "should NOT consider an object that only responds to #matches? to be a matcher" do - argument_expecatation = Spec::Mocks::ArgumentExpectation.new([]) - obj = mock("matcher") - obj.should_receive(:respond_to?).with(:matches?).and_return(true) - obj.should_receive(:respond_to?).with(:description).and_return(false) - argument_expecatation.is_matcher?(obj).should be_false - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_least_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_least_spec.rb deleted file mode 100644 index 01b133dc3..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_least_spec.rb +++ /dev/null @@ -1,97 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "at_least" do - before(:each) do - @mock = Mock.new("test mock") - end - - it "should fail if method is never called" do - @mock.should_receive(:random_call).at_least(4).times - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when called less than n times" do - @mock.should_receive(:random_call).at_least(4).times - @mock.random_call - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when at least once method is never called" do - @mock.should_receive(:random_call).at_least(:once) - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when at least twice method is called once" do - @mock.should_receive(:random_call).at_least(:twice) - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when at least twice method is never called" do - @mock.should_receive(:random_call).at_least(:twice) - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should pass when at least n times method is called exactly n times" do - @mock.should_receive(:random_call).at_least(4).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at least n times method is called n plus 1 times" do - @mock.should_receive(:random_call).at_least(4).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at least once method is called once" do - @mock.should_receive(:random_call).at_least(:once) - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at least once method is called twice" do - @mock.should_receive(:random_call).at_least(:once) - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at least twice method is called three times" do - @mock.should_receive(:random_call).at_least(:twice) - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at least twice method is called twice" do - @mock.should_receive(:random_call).at_least(:twice) - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_most_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_most_spec.rb deleted file mode 100644 index f3c5e2150..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/at_most_spec.rb +++ /dev/null @@ -1,93 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "at_most" do - before(:each) do - @mock = Mock.new("test mock") - end - - it "should fail when at most n times method is called n plus 1 times" do - @mock.should_receive(:random_call).at_most(4).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when at most once method is called twice" do - @mock.should_receive(:random_call).at_most(:once) - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when at most twice method is called three times" do - @mock.should_receive(:random_call).at_most(:twice) - @mock.random_call - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should pass when at most n times method is called exactly n times" do - @mock.should_receive(:random_call).at_most(4).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at most n times method is called less than n times" do - @mock.should_receive(:random_call).at_most(4).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at most n times method is never called" do - @mock.should_receive(:random_call).at_most(4).times - @mock.rspec_verify - end - - it "should pass when at most once method is called once" do - @mock.should_receive(:random_call).at_most(:once) - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at most once method is never called" do - @mock.should_receive(:random_call).at_most(:once) - @mock.rspec_verify - end - - it "should pass when at most twice method is called once" do - @mock.should_receive(:random_call).at_most(:twice) - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at most twice method is called twice" do - @mock.should_receive(:random_call).at_most(:twice) - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass when at most twice method is never called" do - @mock.should_receive(:random_call).at_most(:twice) - @mock.rspec_verify - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10260_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10260_spec.rb deleted file mode 100644 index 2f7b5803d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10260_spec.rb +++ /dev/null @@ -1,8 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "An RSpec Mock" do - it "should hide internals in its inspect representation" do - m = mock('cup') - m.inspect.should =~ /#/ - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10263.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10263.rb deleted file mode 100644 index f82180c09..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_10263.rb +++ /dev/null @@ -1,24 +0,0 @@ -describe "Mock" do - before do - @mock = mock("test mock") - end - - specify "when one example has an expectation (non-mock) inside the block passed to the mock" do - @mock.should_receive(:msg) do |b| - b.should be_true #this call exposes the problem - end - @mock.msg(false) rescue nil - end - - specify "then the next example should behave as expected instead of saying" do - @mock.should_receive(:foobar) - @mock.foobar - @mock.rspec_verify - begin - @mock.foobar - rescue => e - e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)" - end - end -end - diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_11545_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_11545_spec.rb deleted file mode 100644 index 8a334afa5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_11545_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -class LiarLiarPantsOnFire - def respond_to?(sym) - true - end - - def self.respond_to?(sym) - true - end -end - -describe 'should_receive' do - before(:each) do - @liar = LiarLiarPantsOnFire.new - end - - it "should work when object lies about responding to a method" do - @liar.should_receive(:something) - @liar.something - end - - it 'should work when class lies about responding to a method' do - LiarLiarPantsOnFire.should_receive(:something) - LiarLiarPantsOnFire.something - end - - it 'should cleanup after itself' do - LiarLiarPantsOnFire.metaclass.instance_methods.should_not include("something") - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_15719_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_15719_spec.rb deleted file mode 100644 index 82d49ea97..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_15719_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "mock failure" do - - it "should tell you when it receives the right message with the wrong args" do - m = mock("foo") - m.should_receive(:bar).with("message") - lambda { - m.bar("different message") - }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")}) - m.bar("message") # allows the spec to pass - end - - it "should tell you when it receives the right message with the wrong args if you stub the method" do - pending("fix bug 15719") - # NOTE - for whatever reason, if you use a the block style of pending here, - # rcov gets unhappy. Don't know why yet. - m = mock("foo") - m.stub!(:bar) - m.should_receive(:bar).with("message") - lambda { - m.bar("different message") - }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")}) - m.bar("message") # allows the spec to pass - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7611_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7611_spec.rb deleted file mode 100644 index 6c9705bcc..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7611_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Bug7611 - class Foo - end - - class Bar < Foo - end - - describe "A Partial Mock" do - it "should respect subclasses" do - Foo.stub!(:new).and_return(Object.new) - end - - it "should" do - Bar.new.class.should == Bar - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7805_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7805_spec.rb deleted file mode 100644 index f7edfac17..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_7805_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Bug7805 - #This is really a duplicate of 8302 - - describe "Stubs should correctly restore module methods" do - it "1 - stub the open method" do - File.stub!(:open).and_return("something") - File.open.should == "something" - end - it "2 - use File.open to create example.txt" do - filename = "#{File.dirname(__FILE__)}/example-#{Time.new.to_i}.txt" - File.exist?(filename).should be_false - file = File.open(filename,'w') - file.close - File.exist?(filename).should be_true - File.delete(filename) - File.exist?(filename).should be_false - end - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8165_spec.rb deleted file mode 100644 index 7edc3c076..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8165_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "An object where respond_to? is true and does not have method" do - # When should_receive(:sym) is sent to any object, the Proxy sends - # respond_to?(:sym) to that object to see if the method should be proxied. - # - # If respond_to? itself is proxied, then when the Proxy sends respond_to? - # to the object, the proxy is invoked and responds yes (if so set in the spec). - # When the object does NOT actually respond to :sym, an exception is thrown - # when trying to proxy it. - # - # The fix was to keep track of whether :respond_to? had been proxied and, if - # so, call the munged copy of :respond_to? on the object. - - it "should not raise an exception for Object" do - obj = Object.new - obj.should_receive(:respond_to?).with(:foobar).and_return(true) - obj.should_receive(:foobar).and_return(:baz) - obj.respond_to?(:foobar).should be_true - obj.foobar.should == :baz - end - - it "should not raise an exception for mock" do - obj = mock("obj") - obj.should_receive(:respond_to?).with(:foobar).and_return(true) - obj.should_receive(:foobar).and_return(:baz) - obj.respond_to?(:foobar).should be_true - obj.foobar.should == :baz - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8302_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8302_spec.rb deleted file mode 100644 index a41df43d8..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/bug_report_8302_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Bug8302 - class Foo - def Foo.class_method(arg) - end - - def instance_bar(arg) - end - end - - describe "Bug report 8302:" do - it "class method is not restored correctly when proxied" do - Foo.should_not_receive(:class_method).with(Array.new) - Foo.rspec_verify - Foo.class_method(Array.new) - end - - it "instance method is not restored correctly when proxied" do - foo = Foo.new - foo.should_not_receive(:instance_bar).with(Array.new) - foo.rspec_verify - foo.instance_bar(Array.new) - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/failing_mock_argument_constraints_spec.rb deleted file mode 100644 index db6dcea34..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +++ /dev/null @@ -1,115 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "failing MockArgumentConstraints" do - before(:each) do - @mock = mock("test mock") - @reporter = Mock.new("reporter", :null_object => true) - end - - after(:each) do - @mock.rspec_reset - end - - it "should reject non boolean" do - @mock.should_receive(:random_call).with(boolean()) - lambda do - @mock.random_call("false") - end.should raise_error(MockExpectationError) - end - - it "should reject non numeric" do - @mock.should_receive(:random_call).with(an_instance_of(Numeric)) - lambda do - @mock.random_call("1") - end.should raise_error(MockExpectationError) - end - - it "should reject non string" do - @mock.should_receive(:random_call).with(an_instance_of(String)) - lambda do - @mock.random_call(123) - end.should raise_error(MockExpectationError) - end - - it "should reject goose when expecting a duck" do - @mock.should_receive(:random_call).with(duck_type(:abs, :div)) - lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError) - end - - it "should fail if regexp does not match submitted string" do - @mock.should_receive(:random_call).with(/bcd/) - lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError) - end - - it "should fail if regexp does not match submitted regexp" do - @mock.should_receive(:random_call).with(/bcd/) - lambda { @mock.random_call(/bcde/) }.should raise_error(MockExpectationError) - end - - it "should fail for a hash w/ wrong values" do - @mock.should_receive(:random_call).with(:a => "b", :c => "d") - lambda do - @mock.random_call(:a => "b", :c => "e") - end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/) - end - - it "should fail for a hash w/ wrong keys" do - @mock.should_receive(:random_call).with(:a => "b", :c => "d") - lambda do - @mock.random_call("a" => "b", "c" => "d") - end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/) - end - - it "should match against a Matcher" do - lambda do - @mock.should_receive(:msg).with(equal(3)) - @mock.msg(37) - end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)") - end - - it "should fail no_args with one arg" do - lambda do - @mock.should_receive(:msg).with(no_args) - @mock.msg(37) - end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)") - end - end - - describe "failing deprecated MockArgumentConstraints" do - before(:each) do - @mock = mock("test mock") - @reporter = Mock.new("reporter", :null_object => true) - Kernel.stub!(:warn) - end - - after(:each) do - @mock.rspec_reset - end - - it "should reject non boolean" do - @mock.should_receive(:random_call).with(:boolean) - lambda do - @mock.random_call("false") - end.should raise_error(MockExpectationError) - end - - it "should reject non numeric" do - @mock.should_receive(:random_call).with(:numeric) - lambda do - @mock.random_call("1") - end.should raise_error(MockExpectationError) - end - - it "should reject non string" do - @mock.should_receive(:random_call).with(:string) - lambda do - @mock.random_call(123) - end.should raise_error(MockExpectationError) - end - - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_ordering_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_ordering_spec.rb deleted file mode 100644 index 919da2970..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_ordering_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Mocks - - describe "Mock ordering" do - - before do - @mock = mock("test mock") - end - - after do - @mock.rspec_reset - end - - it "should pass two calls in order" do - @mock.should_receive(:one).ordered - @mock.should_receive(:two).ordered - @mock.one - @mock.two - @mock.rspec_verify - end - - it "should pass three calls in order" do - @mock.should_receive(:one).ordered - @mock.should_receive(:two).ordered - @mock.should_receive(:three).ordered - @mock.one - @mock.two - @mock.three - @mock.rspec_verify - end - - it "should fail if second call comes first" do - @mock.should_receive(:one).ordered - @mock.should_receive(:two).ordered - lambda do - @mock.two - end.should raise_error(MockExpectationError, "Mock 'test mock' received :two out of order") - end - - it "should fail if third call comes first" do - @mock.should_receive(:one).ordered - @mock.should_receive(:two).ordered - @mock.should_receive(:three).ordered - @mock.one - lambda do - @mock.three - end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order") - end - - it "should fail if third call comes second" do - @mock.should_receive(:one).ordered - @mock.should_receive(:two).ordered - @mock.should_receive(:three).ordered - @mock.one - lambda do - @mock.three - end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order") - end - - it "should ignore order of non ordered calls" do - @mock.should_receive(:ignored_0) - @mock.should_receive(:ordered_1).ordered - @mock.should_receive(:ignored_1) - @mock.should_receive(:ordered_2).ordered - @mock.should_receive(:ignored_2) - @mock.should_receive(:ignored_3) - @mock.should_receive(:ordered_3).ordered - @mock.should_receive(:ignored_4) - @mock.ignored_3 - @mock.ordered_1 - @mock.ignored_0 - @mock.ordered_2 - @mock.ignored_4 - @mock.ignored_2 - @mock.ordered_3 - @mock.ignored_1 - @mock.rspec_verify - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_space_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_space_spec.rb deleted file mode 100644 index 23ffd01bc..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_space_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' -require 'spec/mocks' - -module Spec - module Mocks - describe Space do - before :each do - @space = Space.new - klazz = Class.new do - def rspec_verify - @verified = true - end - def verified? - @verified - end - def rspec_reset - @reset = true - end - def reset? - @reset - end - end - @m1 = klazz.new - @m2 = klazz.new - end - it "should verify all mocks within" do - @space.add(@m1) - @space.add(@m2) - @space.verify_all - @m1.should be_verified - @m2.should be_verified - end - it "should reset all mocks within" do - @space.add(m1 = mock("mock1")) - @space.add(m2 = mock("mock2")) - m1.should_receive(:rspec_reset) - m2.should_receive(:rspec_reset) - @space.reset_all - end - it "should clear internal mocks on reset_all" do - @space.add(m = mock("mock")) - @space.reset_all - @space.instance_eval { mocks.empty? }.should be_true - end - it "should only add an instance once" do - @space.add(m1 = mock("mock1")) - @space.add(m1) - m1.should_receive(:rspec_verify) - @space.verify_all - end - end - end -end - diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_spec.rb deleted file mode 100644 index 85a71e327..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/mock_spec.rb +++ /dev/null @@ -1,475 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Mocks - describe Mock do - - before(:each) do - @mock = mock("test mock") - end - - after(:each) do - @mock.rspec_reset - end - - it "should report line number of expectation of unreceived message" do - expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3) - begin - @mock.rspec_verify - violated - rescue MockExpectationError => e - # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line - e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/) - end - end - - it "should pass when not receiving message specified as not to be received" do - @mock.should_not_receive(:not_expected) - @mock.rspec_verify - end - - it "should pass when receiving message specified as not to be received with different args" do - @mock.should_not_receive(:message).with("unwanted text") - @mock.should_receive(:message).with("other text") - @mock.message "other text" - @mock.rspec_verify - end - - it "should fail when receiving message specified as not to be received" do - @mock.should_not_receive(:not_expected) - @mock.not_expected - lambda { - @mock.rspec_verify - violated - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") - end - - it "should fail when receiving message specified as not to be received with args" do - @mock.should_not_receive(:not_expected).with("unexpected text") - @mock.not_expected("unexpected text") - lambda { - @mock.rspec_verify - violated - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once") - end - - it "should pass when receiving message specified as not to be received with wrong args" do - @mock.should_not_receive(:not_expected).with("unexpected text") - @mock.not_expected "really unexpected text" - @mock.rspec_verify - end - - it "should allow block to calculate return values" do - @mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a } - @mock.something("a","b","c").should == "cba" - @mock.rspec_verify - end - - it "should allow parameter as return value" do - @mock.should_receive(:something).with("a","b","c").and_return("booh") - @mock.something("a","b","c").should == "booh" - @mock.rspec_verify - end - - it "should return nil if no return value set" do - @mock.should_receive(:something).with("a","b","c") - @mock.something("a","b","c").should be_nil - @mock.rspec_verify - end - - it "should raise exception if args dont match when method called" do - @mock.should_receive(:something).with("a","b","c").and_return("booh") - lambda { - @mock.something("a","d","c") - violated - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")") - end - - it "should fail if unexpected method called" do - lambda { - @mock.something("a","b","c") - violated - }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")") - end - - it "should use block for expectation if provided" do - @mock.should_receive(:something) do | a, b | - a.should == "a" - b.should == "b" - "booh" - end - @mock.something("a", "b").should == "booh" - @mock.rspec_verify - end - - it "should fail if expectation block fails" do - @mock.should_receive(:something) {| bool | bool.should be_true} - lambda { - @mock.something false - }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/) - end - - it "should fail right away when method defined as never is received" do - pending "Used to pass (false positive). Which one is wrong, the spec or the actual behavior?" - - @mock.should_receive(:not_expected).never - lambda { - @mock.not_expected - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected 0 times, but received it 1 times") - end - - it "should eventually fail when method defined as never is received" do - @mock.should_receive(:not_expected).never - @mock.not_expected - - lambda { - @mock.rspec_verify - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") - end - - it "should raise when told to" do - @mock.should_receive(:something).and_raise(RuntimeError) - lambda do - @mock.something - end.should raise_error(RuntimeError) - end - - it "should raise passed an Exception instance" do - error = RuntimeError.new("error message") - @mock.should_receive(:something).and_raise(error) - lambda { - @mock.something - }.should raise_error(RuntimeError, "error message") - end - - it "should raise RuntimeError with passed message" do - @mock.should_receive(:something).and_raise("error message") - lambda { - @mock.something - }.should raise_error(RuntimeError, "error message") - end - - it "should not raise when told to if args dont match" do - @mock.should_receive(:something).with(2).and_raise(RuntimeError) - lambda { - @mock.something 1 - }.should raise_error(MockExpectationError) - end - - it "should throw when told to" do - @mock.should_receive(:something).and_throw(:blech) - lambda { - @mock.something - }.should throw_symbol(:blech) - end - - it "should raise when explicit return and block constrained" do - lambda { - @mock.should_receive(:fruit) do |colour| - :strawberry - end.and_return :apple - }.should raise_error(AmbiguousReturnError) - end - - it "should ignore args on any args" do - @mock.should_receive(:something).at_least(:once).with(any_args) - @mock.something - @mock.something 1 - @mock.something "a", 2 - @mock.something [], {}, "joe", 7 - @mock.rspec_verify - end - - it "should fail on no args if any args received" do - @mock.should_receive(:something).with(no_args()) - lambda { - @mock.something 1 - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)") - end - - it "should fail when args are expected but none are received" do - @mock.should_receive(:something).with(1) - lambda { - @mock.something - }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)") - end - - it "should yield 0 args to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield - a = nil - @mock.yield_back {|*a|} - a.should == [] - @mock.rspec_verify - end - - it "should yield 0 args multiple times to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield. - and_yield - a = nil - b = [] - @mock.yield_back {|*a| b << a} - b.should == [ [], [] ] - @mock.rspec_verify - end - - it "should yield one arg to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) - a = nil - @mock.yield_back {|*a|} - a.should == [99] - @mock.rspec_verify - end - - it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). - and_yield(43). - and_yield("something fruity") - a = nil - b = [] - @mock.yield_back {|*a| b << a} - b.should == [[99], [43], ["something fruity"]] - @mock.rspec_verify - end - - it "should yield many args to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go") - a = nil - @mock.yield_back {|*a|} - a.should == [99, 27, "go"] - @mock.rspec_verify - end - - it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go"). - and_yield("wait", :amber). - and_yield("stop", 12, :red) - a = nil - b = [] - @mock.yield_back {|*a| b << a} - b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]] - @mock.rspec_verify - end - - it "should yield single value" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) - a = nil - @mock.yield_back {|a|} - a.should == 99 - @mock.rspec_verify - end - - it "should yield single value 3 times consecutively" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). - and_yield(43). - and_yield("something fruity") - a = nil - b = [] - @mock.yield_back {|a| b << a} - b.should == [99, 43, "something fruity"] - @mock.rspec_verify - end - - it "should yield two values" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') - a, b = nil - @mock.yield_back {|a,b|} - a.should == 'wha' - b.should == 'zup' - @mock.rspec_verify - end - - it "should yield two values 3 times consecutively" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). - and_yield('not', 'down'). - and_yield(14, 65) - a, b = nil - c = [] - @mock.yield_back {|a,b| c << [a, b]} - c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]] - @mock.rspec_verify - end - - it "should fail when calling yielding method with wrong arity" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') - lambda { - @mock.yield_back {|a|} - }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1") - end - - it "should fail when calling yielding method consecutively with wrong arity" do - @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). - and_yield('down'). - and_yield(14, 65) - lambda { - a, b = nil - c = [] - @mock.yield_back {|a,b| c << [a, b]} - }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2") - end - - it "should fail when calling yielding method without block" do - @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') - lambda { - @mock.yield_back - }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed") - end - - it "should be able to mock send" do - @mock.should_receive(:send).with(any_args) - @mock.send 'hi' - @mock.rspec_verify - end - - it "should be able to raise from method calling yielding mock" do - @mock.should_receive(:yield_me).and_yield 44 - - lambda { - @mock.yield_me do |x| - raise "Bang" - end - }.should raise_error(StandardError, "Bang") - - @mock.rspec_verify - end - - it "should clear expectations after verify" do - @mock.should_receive(:foobar) - @mock.foobar - @mock.rspec_verify - lambda { - @mock.foobar - }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)") - end - - it "should restore objects to their original state on rspec_reset" do - mock = mock("this is a mock") - mock.should_receive(:blah) - mock.rspec_reset - mock.rspec_verify #should throw if reset didn't work - end - - it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do - # Object#method_missing throws either NameErrors or NoMethodErrors. - # - # On a fresh ruby program Object#method_missing: - # * raises a NoMethodError when called directly - # * raises a NameError when called indirectly - # - # Once Object#method_missing has been called at least once (on any object) - # it starts behaving differently: - # * raises a NameError when called directly - # * raises a NameError when called indirectly - # - # There was a bug in Mock#method_missing that relied on the fact - # that calling Object#method_missing directly raises a NoMethodError. - # This example tests that the bug doesn't exist anymore. - - - # Ensures that method_missing always raises NameErrors. - a_method_that_doesnt_exist rescue - - - @mock.should_receive(:foobar) - @mock.foobar - @mock.rspec_verify - - lambda { @mock.foobar }.should_not raise_error(NameError) - lambda { @mock.foobar }.should raise_error(MockExpectationError) - end - - it "should temporarily replace a method stub on a mock" do - @mock.stub!(:msg).and_return(:stub_value) - @mock.should_receive(:msg).with(:arg).and_return(:mock_value) - @mock.msg(:arg).should equal(:mock_value) - @mock.msg.should equal(:stub_value) - @mock.msg.should equal(:stub_value) - @mock.rspec_verify - end - - it "should temporarily replace a method stub on a non-mock" do - non_mock = Object.new - non_mock.stub!(:msg).and_return(:stub_value) - non_mock.should_receive(:msg).with(:arg).and_return(:mock_value) - non_mock.msg(:arg).should equal(:mock_value) - non_mock.msg.should equal(:stub_value) - non_mock.msg.should equal(:stub_value) - non_mock.rspec_verify - end - - it "should assign stub return values" do - mock = Mock.new('name', :message => :response) - mock.message.should == :response - end - end - - describe "a mock message receiving a block" do - before(:each) do - @mock = mock("mock") - @calls = 0 - end - - def add_call - @calls = @calls + 1 - end - - it "should call the block after #should_receive" do - @mock.should_receive(:foo) { add_call } - - @mock.foo - - @calls.should == 1 - end - - it "should call the block after #once" do - @mock.should_receive(:foo).once { add_call } - - @mock.foo - - @calls.should == 1 - end - - it "should call the block after #twice" do - @mock.should_receive(:foo).twice { add_call } - - @mock.foo - @mock.foo - - @calls.should == 2 - end - - it "should call the block after #times" do - @mock.should_receive(:foo).exactly(10).times { add_call } - - (1..10).each { @mock.foo } - - @calls.should == 10 - end - - it "should call the block after #any_number_of_times" do - @mock.should_receive(:foo).any_number_of_times { add_call } - - (1..7).each { @mock.foo } - - @calls.should == 7 - end - - it "should call the block after #with" do - @mock.should_receive(:foo).with(:arg) { add_call } - - @mock.foo(:arg) - - @calls.should == 1 - end - - it "should call the block after #ordered" do - @mock.should_receive(:foo).ordered { add_call } - @mock.should_receive(:bar).ordered { add_call } - - @mock.foo - @mock.bar - - @calls.should == 2 - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/multiple_return_value_spec.rb deleted file mode 100644 index 3e26b73f4..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/multiple_return_value_spec.rb +++ /dev/null @@ -1,113 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Mocks - describe "a Mock expectation with multiple return values and no specified count" do - before(:each) do - @mock = Mock.new("mock") - @return_values = ["1",2,Object.new] - @mock.should_receive(:message).and_return(@return_values[0],@return_values[1],@return_values[2]) - end - - it "should return values in order to consecutive calls" do - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - @mock.message.should == @return_values[2] - @mock.rspec_verify - end - - it "should complain when there are too few calls" do - third = Object.new - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice") - end - - it "should complain when there are too many calls" do - third = Object.new - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - @mock.message.should == @return_values[2] - @mock.message.should == @return_values[2] - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") - end - end - - describe "a Mock expectation with multiple return values with a specified count equal to the number of values" do - before(:each) do - @mock = Mock.new("mock") - @return_values = ["1",2,Object.new] - @mock.should_receive(:message).exactly(3).times.and_return(@return_values[0],@return_values[1],@return_values[2]) - end - - it "should return values in order to consecutive calls" do - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - @mock.message.should == @return_values[2] - @mock.rspec_verify - end - - it "should complain when there are too few calls" do - third = Object.new - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice") - end - - it "should complain when there are too many calls" do - third = Object.new - @mock.message.should == @return_values[0] - @mock.message.should == @return_values[1] - @mock.message.should == @return_values[2] - @mock.message.should == @return_values[2] - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") - end - end - - describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do - before(:each) do - @mock = Mock.new("mock") - @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22) - end - - it "should use last return value for subsequent calls" do - @mock.message.should equal(11) - @mock.message.should equal(22) - @mock.message.should equal(22) - @mock.rspec_verify - end - - it "should fail when called less than the specified number" do - @mock.message.should equal(11) - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (no args) twice, but received it once") - end - end - describe "a Mock expectation with multiple return values with a specified count larger than the number of values" do - before(:each) do - @mock = Mock.new("mock") - @mock.should_receive(:message).exactly(3).times.and_return(11, 22) - end - - it "should use last return value for subsequent calls" do - @mock.message.should equal(11) - @mock.message.should equal(22) - @mock.message.should equal(22) - @mock.rspec_verify - end - - it "should fail when called less than the specified number" do - @mock.message.should equal(11) - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it once") - end - - it "should fail when called greater than the specified number" do - @mock.message.should equal(11) - @mock.message.should equal(22) - @mock.message.should equal(22) - @mock.message.should equal(22) - lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") - end - end - end -end - diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/null_object_mock_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/null_object_mock_spec.rb deleted file mode 100644 index 57e8ca31c..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/null_object_mock_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "a mock acting as a NullObject" do - before(:each) do - @mock = Mock.new("null_object", :null_object => true) - end - - it "should allow explicit expectation" do - @mock.should_receive(:something) - @mock.something - end - - it "should fail verification when explicit exception not met" do - lambda do - @mock.should_receive(:something) - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should ignore unexpected methods" do - @mock.random_call("a", "d", "c") - @mock.rspec_verify - end - - it "should expected message with different args first" do - @mock.should_receive(:message).with(:expected_arg) - @mock.message(:unexpected_arg) - @mock.message(:expected_arg) - end - - it "should expected message with different args second" do - @mock.should_receive(:message).with(:expected_arg) - @mock.message(:expected_arg) - @mock.message(:unexpected_arg) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/once_counts_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/once_counts_spec.rb deleted file mode 100644 index 2c15d5c2e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/once_counts_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "OnceCounts" do - before(:each) do - @mock = mock("test mock") - end - - it "once should fail when called once with wrong args" do - @mock.should_receive(:random_call).once.with("a", "b", "c") - lambda do - @mock.random_call("d", "e", "f") - end.should raise_error(MockExpectationError) - @mock.rspec_reset - end - - it "once should fail when called twice" do - @mock.should_receive(:random_call).once - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "once should fail when not called" do - @mock.should_receive(:random_call).once - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "once should pass when called once" do - @mock.should_receive(:random_call).once - @mock.random_call - @mock.rspec_verify - end - - it "once should pass when called once with specified args" do - @mock.should_receive(:random_call).once.with("a", "b", "c") - @mock.random_call("a", "b", "c") - @mock.rspec_verify - end - - it "once should pass when called once with unspecified args" do - @mock.should_receive(:random_call).once - @mock.random_call("a", "b", "c") - @mock.rspec_verify - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/options_hash_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/options_hash_spec.rb deleted file mode 100644 index 0bfab26d7..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/options_hash_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "calling :should_receive with an options hash" do - it_should_behave_like "sandboxed rspec_options" - attr_reader :reporter, :example_group - before do - @reporter = ::Spec::Runner::Reporter.new(options) - @example_group = Class.new(::Spec::Example::ExampleGroup) do - plugin_mock_framework - describe("Some Examples") - end - reporter.add_example_group example_group - end - - it "should report the file and line submitted with :expected_from" do - example_definition = example_group.it "spec" do - mock = Spec::Mocks::Mock.new("a mock") - mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37") - mock.rspec_verify - end - example = example_group.new(example_definition) - - reporter.should_receive(:example_finished) do |spec, error| - error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not be_nil - end - example.execute(options, {}) - end - - it "should use the message supplied with :message" do - example_definition = @example_group.it "spec" do - mock = Spec::Mocks::Mock.new("a mock") - mock.should_receive(:message, :message => "recebi nada") - mock.rspec_verify - end - example = @example_group.new(example_definition) - @reporter.should_receive(:example_finished) do |spec, error| - error.message.should == "recebi nada" - end - example.execute(@options, {}) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_spec.rb deleted file mode 100644 index d7e5944c4..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_spec.rb +++ /dev/null @@ -1,106 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "using a Partial Mock," do - before(:each) do - @object = Object.new - end - - it "should name the class in the failure message" do - @object.should_receive(:foo) - lambda do - @object.rspec_verify - end.should raise_error(Spec::Mocks::MockExpectationError, /Object/) - end - - it "should not conflict with @options in the object" do - @object.instance_eval { @options = Object.new } - @object.should_receive(:blah) - @object.blah - end - - it "should_not_receive should mock out the method" do - @object.should_not_receive(:fuhbar) - @object.fuhbar - lambda do - @object.rspec_verify - end.should raise_error(Spec::Mocks::MockExpectationError) - end - - it "should_not_receive should return a negative message expectation" do - @object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation) - end - - it "should_receive should mock out the method" do - @object.should_receive(:foobar).with(:test_param).and_return(1) - @object.foobar(:test_param).should equal(1) - end - - it "should_receive should handle a hash" do - @object.should_receive(:foobar).with(:key => "value").and_return(1) - @object.foobar(:key => "value").should equal(1) - end - - it "should_receive should handle an inner hash" do - hash = {:a => {:key => "value"}} - @object.should_receive(:foobar).with(:key => "value").and_return(1) - @object.foobar(hash[:a]).should equal(1) - end - - it "should_receive should return a message expectation" do - @object.should_receive(:foobar).should be_kind_of(MessageExpectation) - @object.foobar - end - - it "should_receive should verify method was called" do - @object.should_receive(:foobar).with(:test_param).and_return(1) - lambda do - @object.rspec_verify - end.should raise_error(Spec::Mocks::MockExpectationError) - end - - it "should_receive should also take a String argument" do - @object.should_receive('foobar') - @object.foobar - end - - it "should_not_receive should also take a String argument" do - @object.should_not_receive('foobar') - @object.foobar - lambda do - @object.rspec_verify - end.should raise_error(Spec::Mocks::MockExpectationError) - end - - it "should use report nil in the error message" do - @this_will_resolve_to_nil.should_receive(:foobar) - lambda do - @this_will_resolve_to_nil.rspec_verify - end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/) - end - end - - describe "Partially mocking an object that defines ==, after another mock has been defined" do - before(:each) do - stub("existing mock", :foo => :foo) - end - - class PartiallyMockedEquals - attr_reader :val - def initialize(val) - @val = val - end - - def ==(other) - @val == other.val - end - end - - it "should not raise an error when stubbing the object" do - o = PartiallyMockedEquals.new :foo - lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb deleted file mode 100644 index c857d8380..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +++ /dev/null @@ -1,66 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec -module Mocks -describe "PartialMockUsingMocksDirectly" do - before(:each) do - - klass=Class.new - klass.class_eval do - def existing_method - :original_value - end - end - @obj = klass.new - - end - - # See http://rubyforge.org/tracker/index.php?func=detail&aid=10263&group_id=797&atid=3149 - # specify "should clear expectations on verify" do - # @obj.should_receive(:msg) - # @obj.msg - # @obj.rspec_verify - # lambda do - # @obj.msg - # end.should raise_error(NoMethodError) - # - # end - it "should fail when expected message is not received" do - @obj.should_receive(:msg) - lambda do - @obj.rspec_verify - end.should raise_error(MockExpectationError) - - end - it "should fail when message is received with incorrect args" do - @obj.should_receive(:msg).with(:correct_arg) - lambda do - @obj.msg(:incorrect_arg) - end.should raise_error(MockExpectationError) - @obj.msg(:correct_arg) - - end - it "should pass when expected message is received" do - @obj.should_receive(:msg) - @obj.msg - @obj.rspec_verify - - end - it "should pass when message is received with correct args" do - @obj.should_receive(:msg).with(:correct_arg) - @obj.msg(:correct_arg) - @obj.rspec_verify - - end - it "should revert to original method if existed" do - @obj.existing_method.should equal(:original_value) - @obj.should_receive(:existing_method).and_return(:mock_value) - @obj.existing_method.should equal(:mock_value) - @obj.rspec_verify - @obj.existing_method.should equal(:original_value) - - end - -end -end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/passing_mock_argument_constraints_spec.rb deleted file mode 100644 index 6de0a58f4..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +++ /dev/null @@ -1,154 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "mock argument constraints", :shared => true do - before(:each) do - @mock = Mock.new("test mock") - Kernel.stub!(:warn) - end - - after(:each) do - @mock.rspec_verify - end - end - - describe Methods, "handling argument constraints with DEPRECATED symbols" do - it_should_behave_like "mock argument constraints" - - it "should accept true as boolean" do - @mock.should_receive(:random_call).with(:boolean) - @mock.random_call(true) - end - - it "should accept false as boolean" do - @mock.should_receive(:random_call).with(:boolean) - @mock.random_call(false) - end - - it "should accept fixnum as numeric" do - @mock.should_receive(:random_call).with(:numeric) - @mock.random_call(1) - end - - it "should accept float as numeric" do - @mock.should_receive(:random_call).with(:numeric) - @mock.random_call(1.5) - end - - it "should accept string as anything" do - @mock.should_receive(:random_call).with("a", :anything, "c") - @mock.random_call("a", "whatever", "c") - end - - it "should match string" do - @mock.should_receive(:random_call).with(:string) - @mock.random_call("a string") - end - - it "should match no args against any_args" do - @mock.should_receive(:random_call).with(:any_args) - @mock.random_call("a string") - end - - it "should match no args against no_args" do - @mock.should_receive(:random_call).with(:no_args) - @mock.random_call - end - end - - describe Methods, "handling argument constraints" do - it_should_behave_like "mock argument constraints" - - it "should accept true as boolean()" do - @mock.should_receive(:random_call).with(boolean()) - @mock.random_call(true) - end - - it "should accept false as boolean()" do - @mock.should_receive(:random_call).with(boolean()) - @mock.random_call(false) - end - - it "should accept fixnum as an_instance_of(Numeric)" do - @mock.should_receive(:random_call).with(an_instance_of(Numeric)) - @mock.random_call(1) - end - - it "should accept float as an_instance_of(Numeric)" do - @mock.should_receive(:random_call).with(an_instance_of(Numeric)) - @mock.random_call(1.5) - end - - it "should accept string as anything()" do - @mock.should_receive(:random_call).with("a", anything(), "c") - @mock.random_call("a", "whatever", "c") - end - - it "should match duck type with one method" do - @mock.should_receive(:random_call).with(duck_type(:length)) - @mock.random_call([]) - end - - it "should match duck type with two methods" do - @mock.should_receive(:random_call).with(duck_type(:abs, :div)) - @mock.random_call(1) - end - - it "should match no args against any_args()" do - @mock.should_receive(:random_call).with(any_args) - @mock.random_call() - end - - it "should match one arg against any_args()" do - @mock.should_receive(:random_call).with(any_args) - @mock.random_call("a string") - end - - it "should match no args against no_args()" do - @mock.should_receive(:random_call).with(no_args) - @mock.random_call() - end - end - - describe Methods, "handling non-constraint arguments" do - - it "should match non special symbol (can be removed when deprecated symbols are removed)" do - @mock.should_receive(:random_call).with(:some_symbol) - @mock.random_call(:some_symbol) - end - - it "should match string against regexp" do - @mock.should_receive(:random_call).with(/bcd/) - @mock.random_call("abcde") - end - - it "should match regexp against regexp" do - @mock.should_receive(:random_call).with(/bcd/) - @mock.random_call(/bcd/) - end - - it "should match against a hash submitted and received by value" do - @mock.should_receive(:random_call).with(:a => "a", :b => "b") - @mock.random_call(:a => "a", :b => "b") - end - - it "should match against a hash submitted by reference and received by value" do - opts = {:a => "a", :b => "b"} - @mock.should_receive(:random_call).with(opts) - @mock.random_call(:a => "a", :b => "b") - end - - it "should match against a hash submitted by value and received by reference" do - opts = {:a => "a", :b => "b"} - @mock.should_receive(:random_call).with(:a => "a", :b => "b") - @mock.random_call(opts) - end - - it "should match against a Matcher" do - @mock.should_receive(:msg).with(equal(37)) - @mock.msg(37) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/precise_counts_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/precise_counts_spec.rb deleted file mode 100644 index ba3898943..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/precise_counts_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "PreciseCounts" do - before(:each) do - @mock = mock("test mock") - end - - it "should fail when exactly n times method is called less than n times" do - @mock.should_receive(:random_call).exactly(3).times - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should fail when exactly n times method is never called" do - @mock.should_receive(:random_call).exactly(3).times - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "should pass if exactly n times method is called exactly n times" do - @mock.should_receive(:random_call).exactly(3).times - @mock.random_call - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "should pass multiple calls with different args and counts" do - @mock.should_receive(:random_call).twice.with(1) - @mock.should_receive(:random_call).once.with(2) - @mock.random_call(1) - @mock.random_call(2) - @mock.random_call(1) - @mock.rspec_verify - end - - it "should pass mutiple calls with different args" do - @mock.should_receive(:random_call).once.with(1) - @mock.should_receive(:random_call).once.with(2) - @mock.random_call(1) - @mock.random_call(2) - @mock.rspec_verify - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/record_messages_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/record_messages_spec.rb deleted file mode 100644 index ec247726d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/record_messages_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' - -module Spec - module Mocks - describe "a mock" do - before(:each) do - @mock = mock("mock", :null_object => true) - end - it "should answer false for received_message? when no messages received" do - @mock.received_message?(:message).should be_false - end - it "should answer true for received_message? when message received" do - @mock.message - @mock.received_message?(:message).should be_true - end - it "should answer true for received_message? when message received with correct args" do - @mock.message 1,2,3 - @mock.received_message?(:message, 1,2,3).should be_true - end - it "should answer false for received_message? when message received with incorrect args" do - @mock.message 1,2,3 - @mock.received_message?(:message, 1,2).should be_false - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/stub_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/stub_spec.rb deleted file mode 100644 index d6e23d71e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/stub_spec.rb +++ /dev/null @@ -1,181 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "A method stub" do - before(:each) do - @class = Class.new do - def self.existing_class_method - :original_value - end - - def existing_instance_method - :original_value - end - end - @instance = @class.new - end - - it "should return expected value when expected message is received" do - @instance.stub!(:msg).and_return(:return_value) - @instance.msg.should equal(:return_value) - @instance.rspec_verify - end - - it "should ignore when expected message is received" do - @instance.stub!(:msg) - @instance.msg - lambda do - @instance.rspec_verify - end.should_not raise_error - end - - it "should ignore when message is received with args" do - @instance.stub!(:msg) - @instance.msg(:an_arg) - lambda do - @instance.rspec_verify - end.should_not raise_error - end - - it "should ignore when expected message is not received" do - @instance.stub!(:msg) - lambda do - @instance.rspec_verify - end.should_not raise_error - end - - it "should clear itself when verified" do - @instance.stub!(:this_should_go).and_return(:blah) - @instance.this_should_go.should == :blah - @instance.rspec_verify - lambda do - @instance.this_should_go - end.should raise_error(NameError) - end - - it "should return values in order to consecutive calls" do - return_values = ["1",2,Object.new] - @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) - @instance.msg.should == return_values[0] - @instance.msg.should == return_values[1] - @instance.msg.should == return_values[2] - end - - it "should keep returning last value in consecutive calls" do - return_values = ["1",2,Object.new] - @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) - @instance.msg.should == return_values[0] - @instance.msg.should == return_values[1] - @instance.msg.should == return_values[2] - @instance.msg.should == return_values[2] - @instance.msg.should == return_values[2] - end - - it "should revert to original instance method if there is one" do - @instance.existing_instance_method.should equal(:original_value) - @instance.stub!(:existing_instance_method).and_return(:mock_value) - @instance.existing_instance_method.should equal(:mock_value) - @instance.rspec_verify - @instance.existing_instance_method.should equal(:original_value) - end - - it "should revert to original class method if there is one" do - @class.existing_class_method.should equal(:original_value) - @class.stub!(:existing_class_method).and_return(:mock_value) - @class.existing_class_method.should equal(:mock_value) - @class.rspec_verify - @class.existing_class_method.should equal(:original_value) - end - - it "should yield a specified object" do - @instance.stub!(:method_that_yields).and_yield(:yielded_obj) - current_value = :value_before - @instance.method_that_yields {|val| current_value = val} - current_value.should == :yielded_obj - @instance.rspec_verify - end - - it "should yield multiple times with multiple calls to and_yield" do - @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value). - and_yield(:another_value) - current_value = [] - @instance.method_that_yields_multiple_times {|val| current_value << val} - current_value.should == [:yielded_value, :another_value] - @instance.rspec_verify - end - - it "should yield a specified object and return another specified object" do - yielded_obj = mock("my mock") - yielded_obj.should_receive(:foo).with(:bar) - @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz) - @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz - end - - it "should throw when told to" do - @mock.stub!(:something).and_throw(:up) - lambda do - @mock.something - end.should throw_symbol(:up) - end - - it "should override a pre-existing stub" do - @stub.stub!(:existing_instance_method).and_return(:updated_stub_value) - @stub.existing_instance_method.should == :updated_stub_value - end - - it "should limit " do - @stub.stub!(:foo).with("bar") - @stub.should_receive(:foo).with("baz") - @stub.foo("bar") - @stub.foo("baz") - end - end - - describe "A method stub with args" do - before(:each) do - @stub = Object.new - @stub.stub!(:foo).with("bar") - end - - it "should not complain if not called" do - end - - it "should not complain if called with arg" do - @stub.foo("bar") - end - - it "should complain if called with no arg" do - lambda do - @stub.foo - end.should raise_error - end - - it "should complain if called with other arg" do - lambda do - @stub.foo("other") - end.should raise_error - end - - it "should not complain if also mocked w/ different args" do - @stub.should_receive(:foo).with("baz") - @stub.foo("bar") - @stub.foo("baz") - end - - it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do - @stub.should_receive(:foo).with("baz") - @stub.foo("bar") - @stub.foo("baz") - lambda do - @stub.foo("other") - end.should raise_error - end - - it "should support options" do - @stub.stub!(:foo, :expected_from => "bar") - end - end - - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/mocks/twice_counts_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/mocks/twice_counts_spec.rb deleted file mode 100644 index d07e45736..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/mocks/twice_counts_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Mocks - describe "TwiceCounts" do - before(:each) do - @mock = mock("test mock") - end - - it "twice should fail when call count is higher than expected" do - @mock.should_receive(:random_call).twice - @mock.random_call - @mock.random_call - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "twice should fail when call count is lower than expected" do - @mock.should_receive(:random_call).twice - @mock.random_call - lambda do - @mock.rspec_verify - end.should raise_error(MockExpectationError) - end - - it "twice should fail when called twice with wrong args on the first call" do - @mock.should_receive(:random_call).twice.with("1", 1) - lambda do - @mock.random_call(1, "1") - end.should raise_error(MockExpectationError) - @mock.rspec_reset - end - - it "twice should fail when called twice with wrong args on the second call" do - @mock.should_receive(:random_call).twice.with("1", 1) - @mock.random_call("1", 1) - lambda do - @mock.random_call(1, "1") - end.should raise_error(MockExpectationError) - @mock.rspec_reset - end - - it "twice should pass when called twice" do - @mock.should_receive(:random_call).twice - @mock.random_call - @mock.random_call - @mock.rspec_verify - end - - it "twice should pass when called twice with specified args" do - @mock.should_receive(:random_call).twice.with("1", 1) - @mock.random_call("1", 1) - @mock.random_call("1", 1) - @mock.rspec_verify - end - - it "twice should pass when called twice with unspecified args" do - @mock.should_receive(:random_call).twice - @mock.random_call("1") - @mock.random_call(1) - @mock.rspec_verify - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/package/bin_spec_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/package/bin_spec_spec.rb deleted file mode 100644 index 44bfd96a0..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/package/bin_spec_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' -require File.dirname(__FILE__) + '/../../ruby_forker' - -describe "The bin/spec script" do - include RubyForker - - it "should have no warnings" do - pending "Hangs on JRuby" if PLATFORM =~ /java/ - spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec" - - output = ruby "-w #{spec_path} --help 2>&1" - output.should_not =~ /warning/n - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/class_and_argument_parser_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/class_and_argument_parser_spec.rb deleted file mode 100644 index b4e9e7f53..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/class_and_argument_parser_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe ClassAndArgumentsParser, ".parse" do - - it "should use a single : to separate class names from arguments" do - ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil] - ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg'] - ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg'] - ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2'] - ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2'] - ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar'] - end - - it "should raise an error when passed an empty string" do - lambda do - ClassAndArgumentsParser.parse('') - end.should raise_error("Couldn't parse \"\"") - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/command_line_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/command_line_spec.rb deleted file mode 100644 index 8b9e912a7..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/command_line_spec.rb +++ /dev/null @@ -1,146 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe CommandLine, ".run" do - it_should_behave_like "sandboxed rspec_options" - attr_reader :options, :err, :out - before do - @err = options.error_stream - @out = options.output_stream - end - - it "should run directory" do - file = File.dirname(__FILE__) + '/../../../examples/pure' - Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) - - @out.rewind - @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n - end - - it "should run file" do - file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb' - Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) - - @out.rewind - @out.read.should =~ /2 examples, 1 failure/n - end - - it "should raise when file does not exist" do - file = File.dirname(__FILE__) + '/doesntexist' - - lambda { - Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) - }.should raise_error - end - - it "should return true when in --generate-options mode" do - Spec::Runner::CommandLine.run( - OptionParser.parse(['--generate-options', '/dev/null'], @err, @out) - ).should be_true - end - - it "should dump even if Interrupt exception is occurred" do - example_group = Class.new(::Spec::Example::ExampleGroup) do - describe("example_group") - it "no error" do - end - - it "should interrupt" do - raise Interrupt, "I'm interrupting" - end - end - - options = ::Spec::Runner::Options.new(@err, @out) - ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) - options.reporter.should_receive(:dump) - options.add_example_group(example_group) - - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - end - - it "should heckle when options have heckle_runner" do - example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do - it "no error" do - end - end - options = ::Spec::Runner::Options.new(@err, @out) - ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) - options.add_example_group example_group - - heckle_runner = mock("heckle_runner") - heckle_runner.should_receive(:heckle_with) - $rspec_mocks.__send__(:mocks).delete(heckle_runner) - - options.heckle_runner = heckle_runner - options.add_example_group(example_group) - - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - heckle_runner.rspec_verify - end - - it "should run examples backwards if options.reverse is true" do - options = ::Spec::Runner::Options.new(@err, @out) - ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) - options.reverse = true - - b1 = Class.new(Spec::Example::ExampleGroup) - b2 = Class.new(Spec::Example::ExampleGroup) - - b2.should_receive(:run).ordered - b1.should_receive(:run).ordered - - options.add_example_group(b1) - options.add_example_group(b2) - - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - end - - it "should pass its ExampleGroup to the reporter" do - example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do - it "should" do - end - end - options = ::Spec::Runner::Options.new(@err, @out) - options.add_example_group(example_group) - - ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) - options.reporter.should_receive(:add_example_group).with(example_group) - - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - end - - it "runs only selected Examples when options.examples is set" do - options = ::Spec::Runner::Options.new(@err, @out) - ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) - - options.examples << "example_group should" - should_has_run = false - should_not_has_run = false - example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do - it "should" do - should_has_run = true - end - it "should not" do - should_not_has_run = true - end - end - - options.reporter.should_receive(:add_example_group).with(example_group) - - options.add_example_group example_group - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - - should_has_run.should be_true - should_not_has_run.should be_false - end - - it "sets Spec.run to true" do - ::Spec.run = false - ::Spec.should_not be_run - Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) - ::Spec.should be_run - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/drb_command_line_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/drb_command_line_spec.rb deleted file mode 100644 index 760ec37a9..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/drb_command_line_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe DrbCommandLine, "without running local server" do - unless Config::CONFIG['ruby_install_name'] == 'jruby' - it "should print error when there is no running local server" do - err = StringIO.new - out = StringIO.new - DrbCommandLine.run(OptionParser.parse(['--version'], err, out)) - - err.rewind - err.read.should =~ /No server is running/ - end - end - end - - class DrbCommandLineSpec < ::Spec::Example::ExampleGroup - describe DrbCommandLine, "with local server" - - class CommandLineForSpec - def self.run(argv, stderr, stdout) - exit Spec::Runner::CommandLine.run(OptionParser.parse(argv, stderr, stdout)) - end - end - - unless Config::CONFIG['ruby_install_name'] == 'jruby' - before(:all) do - DRb.start_service("druby://localhost:8989", CommandLineForSpec) - @@drb_example_file_counter = 0 - end - - before(:each) do - create_dummy_spec_file - @@drb_example_file_counter = @@drb_example_file_counter + 1 - end - - after(:each) do - File.delete(@dummy_spec_filename) - end - - after(:all) do - DRb.stop_service - end - - it "should run against local server" do - out = run_spec_via_druby(['--version']) - out.should =~ /RSpec/n - end - - it "should output green colorized text when running with --colour option" do - out = run_spec_via_druby(["--colour", @dummy_spec_filename]) - out.should =~ /\e\[32m/n - end - - it "should output red colorized text when running with -c option" do - out = run_spec_via_druby(["-c", @dummy_spec_filename]) - out.should =~ /\e\[31m/n - end - - def create_dummy_spec_file - @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb" - File.open(@dummy_spec_filename, 'w') do |f| - f.write %{ - describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do - it "should be output with green bar" do - true.should be_true - end - - it "should be output with red bar" do - violated("I want to see a red bar!") - end - end - } - end - end - - def run_spec_via_druby(argv) - err, out = StringIO.new, StringIO.new - out.instance_eval do - def tty?; true end - end - options = ::Spec::Runner::Options.new(err, out) - options.argv = argv - Spec::Runner::DrbCommandLine.run(options) - out.rewind; out.read - end - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/execution_context_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/execution_context_spec.rb deleted file mode 100644 index 82e7447c1..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/execution_context_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "ExecutionContext" do - - it "should provide duck_type()" do - dt = duck_type(:length) - dt.should be_an_instance_of(Spec::Mocks::DuckTypeArgConstraint) - dt.matches?([]).should be_true - end - - it "should violate when violated()" do - lambda do - violated - end.should raise_error(Spec::Expectations::ExpectationNotMetError) - end - - it "should provide mock()" do - mock("thing").should be_an_instance_of(Spec::Mocks::Mock) - end - - it "should provide stub()" do - thing_stub = stub("thing").should be_an_instance_of(Spec::Mocks::Mock) - end - - it "should add method stubs to stub()" do - thing_stub = stub("thing", :a => "A", :b => "B") - thing_stub.a.should == "A" - thing_stub.b.should == "B" - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb deleted file mode 100644 index a08b6e86d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper' -require 'spec/runner/formatter/failing_example_groups_formatter' - -module Spec - module Runner - module Formatter - describe FailingExampleGroupsFormatter do - attr_reader :example_group, :formatter, :io - - before(:each) do - @io = StringIO.new - options = mock('options') - @formatter = FailingExampleGroupsFormatter.new(options, io) - @example_group = Class.new(::Spec::Example::ExampleGroup) - end - - it "should add example name for each failure" do - formatter.add_example_group(Class.new(ExampleGroup).describe("b 1")) - formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) - formatter.add_example_group(Class.new(ExampleGroup).describe("b 2")) - formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new)) - formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new)) - io.string.should == "b 1\nb 2\n" - end - - it "should delimit ExampleGroup superclass descriptions with :" do - parent_example_group = Class.new(example_group).describe("Parent") - child_example_group = Class.new(parent_example_group).describe("#child_method") - grand_child_example_group = Class.new(child_example_group).describe("GrandChild") - - formatter.add_example_group(grand_child_example_group) - formatter.example_failed("failure", nil, Reporter::Failure.new(nil, RuntimeError.new)) - io.string.should == "Parent#child_method GrandChild\n" - end - - it "should remove druby url, which is used by Spec::Distributed" do - @formatter.add_example_group(Class.new(ExampleGroup).describe("something something (druby://99.99.99.99:99)")) - @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) - io.string.should == "something something\n" - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_examples_formatter_spec.rb deleted file mode 100644 index fda64f95f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper' -require 'spec/runner/formatter/failing_examples_formatter' - -module Spec - module Runner - module Formatter - describe FailingExamplesFormatter do - before(:each) do - @io = StringIO.new - options = mock('options') - @formatter = FailingExamplesFormatter.new(options, @io) - end - - it "should add example name for each failure" do - example_group_1 = Class.new(ExampleGroup).describe("A") - example_group_2 = Class.new(example_group_1).describe("B") - - @formatter.add_example_group(example_group_1) - @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.add_example_group(example_group_2) - @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) - @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) - @io.string.should eql(<<-EOF -A a1 -A B b2 -A B b3 -EOF -) - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/html_formatter_spec.rb deleted file mode 100644 index 5ba39f0e9..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/html_formatter_spec.rb +++ /dev/null @@ -1,66 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper' -require 'hpricot' # Needed to compare generated with wanted HTML -require 'spec/runner/formatter/html_formatter' - -module Spec - module Runner - module Formatter - describe HtmlFormatter do - ['--diff', '--dry-run'].each do |opt| - def jruby? - PLATFORM == 'java' - end - - it "should produce HTML identical to the one we designed manually with #{opt}" do - root = File.expand_path(File.dirname(__FILE__) + '/../../../..') - suffix = jruby? ? '-jruby' : '' - expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html" - raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file) - expected_html = File.read(expected_file) - unless jruby? - raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n) - end - - Dir.chdir(root) do - args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt] - err = StringIO.new - out = StringIO.new - CommandLine.run( - OptionParser.parse(args, err, out) - ) - - seconds = /\d+\.\d+ seconds/ - html = out.string.gsub seconds, 'x seconds' - expected_html.gsub! seconds, 'x seconds' - - if opt == '--diff' - # Uncomment this line temporarily in order to overwrite the expected with actual. - # Use with care!!! - # File.open(expected_file, 'w') {|io| io.write(html)} - - doc = Hpricot(html) - backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} - doc.search("div.backtrace").remove - - expected_doc = Hpricot(expected_html) - expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} - expected_doc.search("div.backtrace").remove - - doc.inner_html.should == expected_doc.inner_html - - expected_backtraces.each_with_index do |expected_line, i| - expected_path, expected_line_number, expected_suffix = expected_line.split(':') - actual_path, actual_line_number, actual_suffix = backtraces[i].split(':') - File.expand_path(actual_path).should == File.expand_path(expected_path) - actual_line_number.should == expected_line_number - end - else - html.should =~ /This was a dry-run/m - end - end - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/profile_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/profile_formatter_spec.rb deleted file mode 100644 index 981805411..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/profile_formatter_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require 'spec/runner/formatter/profile_formatter' - -module Spec - module Runner - module Formatter - describe ProfileFormatter do - attr_reader :io, :formatter - before(:each) do - @io = StringIO.new - options = mock('options') - options.stub!(:colour).and_return(true) - @formatter = ProfileFormatter.new(options, io) - end - - it "should print a heading" do - formatter.start(0) - io.string.should eql("Profiling enabled.\n") - end - - it "should record the current time when starting a new example" do - now = Time.now - Time.stub!(:now).and_return(now) - formatter.example_started('should foo') - formatter.instance_variable_get("@time").should == now - end - - it "should correctly record a passed example" do - now = Time.now - Time.stub!(:now).and_return(now) - parent_example_group = Class.new(ExampleGroup).describe('Parent') - child_example_group = Class.new(parent_example_group).describe('Child') - - formatter.add_example_group(child_example_group) - - formatter.example_started('when foo') - Time.stub!(:now).and_return(now+1) - formatter.example_passed(stub('foo', :description => 'i like ice cream')) - - formatter.start_dump - io.string.should include('Parent Child') - end - - it "should sort the results in descending order" do - formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]]) - formatter.start_dump - formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]] - end - - it "should print the top 10 results" do - example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup") - formatter.add_example_group(example_group) - formatter.instance_variable_set("@time", Time.now) - - 15.times do - formatter.example_passed(stub('foo', :description => 'i like ice cream')) - end - - io.should_receive(:print).exactly(10) - formatter.start_dump - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/progress_bar_formatter_spec.rb deleted file mode 100644 index 127a617c1..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +++ /dev/null @@ -1,127 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require 'spec/runner/formatter/progress_bar_formatter' - -module Spec - module Runner - module Formatter - describe ProgressBarFormatter do - before(:each) do - @io = StringIO.new - @options = mock('options') - @options.stub!(:dry_run).and_return(false) - @options.stub!(:colour).and_return(false) - @formatter = ProgressBarFormatter.new(@options, @io) - end - - it "should produce line break on start dump" do - @formatter.start_dump - @io.string.should eql("\n") - end - - it "should produce standard summary without pending when pending has a 0 count" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") - end - - it "should produce standard summary" do - @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") - @io.rewind - @formatter.dump_summary(3, 2, 1, 1) - @io.string.should eql(%Q| -Finished in 3 seconds - -2 examples, 1 failure, 1 pending -|) - end - - it "should push green dot for passing spec" do - @io.should_receive(:tty?).and_return(true) - @options.should_receive(:colour).and_return(true) - @formatter.example_passed("spec") - @io.string.should == "\e[32m.\e[0m" - end - - it "should push red F for failure spec" do - @io.should_receive(:tty?).and_return(true) - @options.should_receive(:colour).and_return(true) - @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)) - @io.string.should eql("\e[31mF\e[0m") - end - - it "should push magenta F for error spec" do - @io.should_receive(:tty?).and_return(true) - @options.should_receive(:colour).and_return(true) - @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new)) - @io.string.should eql("\e[35mF\e[0m") - end - - it "should push blue F for fixed pending spec" do - @io.should_receive(:tty?).and_return(true) - @options.should_receive(:colour).and_return(true) - @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new)) - @io.string.should eql("\e[34mF\e[0m") - end - - it "should push nothing on start" do - @formatter.start(4) - @io.string.should eql("") - end - - it "should ensure two ':' in the first backtrace" do - backtrace = ["/tmp/x.rb:1", "/tmp/x.rb:2", "/tmp/x.rb:3"] - @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip) -/tmp/x.rb:1: -/tmp/x.rb:2: -/tmp/x.rb:3: -EOE - - backtrace = ["/tmp/x.rb:1: message", "/tmp/x.rb:2", "/tmp/x.rb:3"] - @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip) -/tmp/x.rb:1: message -/tmp/x.rb:2: -/tmp/x.rb:3: -EOE - end - - it "should dump pending" do - @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") - @formatter.dump_pending - @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/ - end - end - - describe "ProgressBarFormatter outputting to custom out" do - before(:each) do - @out = mock("out") - @options = mock('options') - @out.stub!(:puts) - @formatter = ProgressBarFormatter.new(@options, @out) - @formatter.class.send :public, :output_to_tty? - end - - after(:each) do - @formatter.class.send :protected, :output_to_tty? - end - - it "should not throw NoMethodError on output_to_tty?" do - @out.should_receive(:tty?).and_raise(NoMethodError) - @formatter.output_to_tty?.should be_false - end - end - - describe ProgressBarFormatter, "dry run" do - before(:each) do - @io = StringIO.new - options = mock('options') - options.stub!(:dry_run).and_return(true) - @formatter = ProgressBarFormatter.new(options, @io) - end - - it "should not produce summary on dry run" do - @formatter.dump_summary(3, 2, 1, 0) - @io.string.should eql("") - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/snippet_extractor_spec.rb deleted file mode 100644 index 4bb2f1585..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/snippet_extractor_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require 'spec/runner/formatter/snippet_extractor' - -module Spec - module Runner - module Formatter - describe SnippetExtractor do - it "should fall back on a default message when it doesn't understand a line" do - SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1] - end - - it "should fall back on a default message when it doesn't find the file" do - SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech" - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/spec_mate_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/spec_mate_formatter_spec.rb deleted file mode 100644 index e782254e2..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +++ /dev/null @@ -1,103 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper' -require 'hpricot' # Needed to compare generated with wanted HTML -require 'spec/runner/formatter/text_mate_formatter' - -module Spec - module Runner - module Formatter - describe TextMateFormatter do - attr_reader :root, :suffix, :expected_file - before do - @root = File.expand_path(File.dirname(__FILE__) + '/../../../..') - @suffix = jruby? ? '-jruby' : '' - @expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html" - end - - def jruby? - PLATFORM == 'java' - end - - def produces_html_identical_to_manually_designed_document(opt) - root = File.expand_path(File.dirname(__FILE__) + '/../../../..') - - Dir.chdir(root) do - args = [ - 'failing_examples/mocking_example.rb', - 'failing_examples/diffing_spec.rb', - 'examples/pure/stubbing_example.rb', - 'examples/pure/pending_example.rb', - '--format', - 'textmate', - opt - ] - err = StringIO.new - out = StringIO.new - options = ::Spec::Runner::OptionParser.parse(args, err, out) - Spec::Runner::CommandLine.run(options) - - yield(out.string) - end - end - - # # Uncomment this spec temporarily in order to overwrite the expected with actual. - # # Use with care!!! - # describe TextMateFormatter, "functional spec file generator" do - # it "generates a new comparison file" do - # Dir.chdir(root) do - # args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'textmate', '--diff'] - # err = StringIO.new - # out = StringIO.new - # Spec::Runner::CommandLine.run( - # ::Spec::Runner::OptionParser.parse(args, err, out) - # ) - # - # seconds = /\d+\.\d+ seconds/ - # html = out.string.gsub seconds, 'x seconds' - # - # File.open(expected_file, 'w') {|io| io.write(html)} - # end - # end - # end - - describe "functional spec using --diff" do - it "should produce HTML identical to the one we designed manually with --diff" do - produces_html_identical_to_manually_designed_document("--diff") do |html| - suffix = jruby? ? '-jruby' : '' - expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html" - unless File.file?(expected_file) - raise "There is no HTML file with expected content for this platform: #{expected_file}" - end - expected_html = File.read(expected_file) - - seconds = /\d+\.\d+ seconds/ - html.gsub! seconds, 'x seconds' - expected_html.gsub! seconds, 'x seconds' - - doc = Hpricot(html) - backtraces = doc.search("div.backtrace/a") - doc.search("div.backtrace").remove - - expected_doc = Hpricot(expected_html) - expected_doc.search("div.backtrace").remove - - doc.inner_html.should == expected_doc.inner_html - - backtraces.each do |backtrace_link| - backtrace_link[:href].should include("txmt://open?url=") - end - end - end - - end - - describe "functional spec using --dry-run" do - it "should produce HTML identical to the one we designed manually with --dry-run" do - produces_html_identical_to_manually_designed_document("--dry-run") do |html, expected_html| - html.should =~ /This was a dry-run/m - end - end - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/specdoc_formatter_spec.rb deleted file mode 100644 index 79995309d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/specdoc_formatter_spec.rb +++ /dev/null @@ -1,126 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper.rb' -require 'spec/runner/formatter/specdoc_formatter' - -module Spec - module Runner - module Formatter - describe SpecdocFormatter do - it_should_behave_like "sandboxed rspec_options" - attr_reader :io, :options, :formatter, :example_group - before(:each) do - @io = StringIO.new - options.stub!(:dry_run).and_return(false) - options.stub!(:colour).and_return(false) - @formatter = SpecdocFormatter.new(options, io) - @example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup") - end - - describe "where ExampleGroup has no superclasss with a description" do - before do - formatter.add_example_group(example_group) - end - - it "should produce standard summary without pending when pending has a 0 count" do - formatter.dump_summary(3, 2, 1, 0) - io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") - end - - it "should produce standard summary" do - formatter.dump_summary(3, 2, 1, 4) - io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n") - end - - it "should push ExampleGroup name" do - io.string.should eql("\nExampleGroup\n") - end - - it "when having an error, should push failing spec name and failure number" do - formatter.example_failed( - example_group.it("spec"), - 98, - Reporter::Failure.new("c s", RuntimeError.new) - ) - io.string.should have_example_group_output("- spec (ERROR - 98)\n") - end - - it "when having an expectation failure, should push failing spec name and failure number" do - formatter.example_failed( - example_group.it("spec"), - 98, - Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) - ) - io.string.should have_example_group_output("- spec (FAILED - 98)\n") - end - - it "should push nothing on start" do - formatter.start(5) - io.string.should have_example_group_output("") - end - - it "should push nothing on start dump" do - formatter.start_dump - io.string.should have_example_group_output("") - end - - it "should push passing spec name" do - formatter.example_passed(example_group.it("spec")) - io.string.should have_example_group_output("- spec\n") - end - - it "should push pending example name and message" do - formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') - io.string.should have_example_group_output("- example (PENDING: reason)\n") - end - - it "should dump pending" do - formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') - io.rewind - formatter.dump_pending - io.string.should =~ /Pending\:\nexample_group example \(reason\)\n/ - end - - def have_example_group_output(expected_output) - expected = "\nExampleGroup\n#{expected_output}" - ::Spec::Matchers::SimpleMatcher.new(expected) do |actual| - actual == expected - end - end - end - - describe "where ExampleGroup has two superclasses with a description" do - attr_reader :child_example_group, :grand_child_example_group - before do - @child_example_group = Class.new(example_group).describe("Child ExampleGroup") - @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup") - formatter.add_example_group(grand_child_example_group) - end - - specify "when having an error, should push failing spec name and failure number" do - formatter.example_failed( - example_group.it("spec"), - 98, - Reporter::Failure.new("c s", RuntimeError.new) - ) - io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n") - end - - specify "when having an expectation failure, should push failing spec name and failure number" do - formatter.example_failed( - example_group.it("spec"), - 98, - Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) - ) - io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n") - end - - def have_nested_example_group_output(expected_output) - expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}" - ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual| - actual == expected_full_output - end - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/html_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/html_formatter_spec.rb deleted file mode 100644 index 37fb7c670..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/html_formatter_spec.rb +++ /dev/null @@ -1,61 +0,0 @@ -require File.dirname(__FILE__) + '/../../../../spec_helper.rb' -require 'spec/runner/formatter/story/html_formatter' - -module Spec - module Runner - module Formatter - module Story - describe HtmlFormatter do - before :each do - @out = StringIO.new - @options = mock('options') - @reporter = HtmlFormatter.new(@options, @out) - end - - it "should just be poked at" do - @reporter.run_started(1) - @reporter.story_started('story_title', 'narrative') - - @reporter.scenario_started('story_title', 'succeeded_scenario_name') - @reporter.step_succeeded('given', 'succeded_step', 'one', 'two') - @reporter.scenario_succeeded('story_title', 'succeeded_scenario_name') - - @reporter.scenario_started('story_title', 'pending_scenario_name') - @reporter.step_pending('when', 'pending_step', 'un', 'deux') - @reporter.scenario_pending('story_title', 'pending_scenario_name', 'not done') - - @reporter.scenario_started('story_title', 'failed_scenario_name') - @reporter.step_failed('then', 'failed_step', 'en', 'to') - @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup')) - - @reporter.scenario_started('story_title', 'scenario_with_given_scenario_name') - @reporter.found_scenario('given scenario', 'succeeded_scenario_name') - - @reporter.story_ended('story_title', 'narrative') - @reporter.run_ended - end - - it "should create spans for params" do - @reporter.step_succeeded('given', 'a $coloured $animal', 'brown', 'dog') - @out.string.should == "
  • Given a brown dog
  • \n" - end - - it 'should create spanes for params in regexp steps' do - @reporter.step_succeeded :given, /a (pink|blue) (.*)/, 'brown', 'dog' - @out.string.should == "
  • Given a brown dog
  • \n" - end - - it "should create a ul for collected_steps" do - @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel']) - @out.string.should == (<<-EOF) - -EOF - end - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb deleted file mode 100644 index 27e184b0f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +++ /dev/null @@ -1,335 +0,0 @@ -require File.dirname(__FILE__) + '/../../../../spec_helper.rb' -require 'spec/runner/formatter/story/plain_text_formatter' - -module Spec - module Runner - module Formatter - module Story - describe PlainTextFormatter do - before :each do - # given - @out = StringIO.new - @tweaker = mock('tweaker') - @tweaker.stub!(:tweak_backtrace) - @options = mock('options') - @options.stub!(:colour).and_return(false) - @options.stub!(:backtrace_tweaker).and_return(@tweaker) - @formatter = PlainTextFormatter.new(@options, @out) - end - - it 'should summarize the number of scenarios when the run ends' do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario2') - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario3') - @formatter.run_ended - - # then - @out.string.should include('3 scenarios') - end - - it 'should summarize the number of successful scenarios when the run ends' do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario2') - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario3') - @formatter.run_ended - - # then - @out.string.should include('3 scenarios: 3 succeeded') - end - - it 'should summarize the number of failed scenarios when the run ends' do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) - @formatter.run_ended - - # then - @out.string.should include("3 scenarios: 1 succeeded, 2 failed") - end - - it 'should end cleanly (no characters on the last line) with successes' do - # when - @formatter.run_started(1) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario') - @formatter.run_ended - - # then - @out.string.should =~ /\n\z/ - end - - it 'should end cleanly (no characters on the last line) with failures' do - # when - @formatter.run_started(1) - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' }) - @formatter.run_ended - - # then - @out.string.should =~ /\n\z/ - end - - it 'should end cleanly (no characters on the last line) with pending steps' do - # when - @formatter.run_started(1) - @formatter.scenario_started(nil, nil) - @formatter.step_pending(:then, 'do pend') - @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' }) - @formatter.run_ended - - # then - @out.string.should =~ /\n\z/ - end - - it 'should summarize the number of pending scenarios when the run ends' do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_pending('story', 'scenario2', 'message') - @formatter.scenario_started(nil, nil) - @formatter.scenario_pending('story', 'scenario3', 'message') - @formatter.run_ended - - # then - @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending") - end - - it "should only count the first failure in one scenario" do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' }) - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) - @formatter.run_ended - - # then - @out.string.should include("3 scenarios: 1 succeeded, 2 failed") - end - - it "should only count the first pending in one scenario" do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_pending('story', 'scenario2', 'because ...') - @formatter.scenario_pending('story', 'scenario2', 'because ...') - @formatter.scenario_started(nil, nil) - @formatter.scenario_pending('story', 'scenario3', 'because ...') - @formatter.run_ended - - # then - @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending") - end - - it "should only count a failure before the first pending in one scenario" do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' }) - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) - @formatter.run_ended - - # then - @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending") - end - - it 'should produce details of the first failure each failed scenario when the run ends' do - # when - @formatter.run_started(3) - @formatter.scenario_started(nil, nil) - @formatter.scenario_succeeded('story', 'scenario1') - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' }) - @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' }) - @formatter.scenario_started(nil, nil) - @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' }) - @formatter.run_ended - - # then - @out.string.should include("FAILURES:\n") - @out.string.should include("1) story (scenario2) FAILED") - @out.string.should include("RuntimeError: oops2") - @out.string.should_not include("RuntimeError: oops2 - this one should not appear") - @out.string.should include("2) story (scenario3) FAILED") - @out.string.should include("RuntimeError: oops3") - end - - it 'should produce details of each pending step when the run ends' do - # when - @formatter.run_started(2) - @formatter.story_started('story 1', 'narrative') - @formatter.scenario_started('story 1', 'scenario 1') - @formatter.step_pending(:given, 'todo 1', []) - @formatter.story_started('story 2', 'narrative') - @formatter.scenario_started('story 2', 'scenario 2') - @formatter.step_pending(:given, 'todo 2', []) - @formatter.run_ended - - # then - @out.string.should include("Pending Steps:\n") - @out.string.should include("1) story 1 (scenario 1): todo 1") - @out.string.should include("2) story 2 (scenario 2): todo 2") - end - - it 'should document a story title and narrative' do - # when - @formatter.story_started 'story', 'narrative' - - # then - @out.string.should include("Story: story\n\n narrative") - end - - it 'should document a scenario name' do - # when - @formatter.scenario_started 'story', 'scenario' - - # then - @out.string.should include("\n\n Scenario: scenario") - end - - it 'should document a step by sentence-casing its name' do - # when - @formatter.step_succeeded :given, 'a context' - @formatter.step_succeeded :when, 'an event' - @formatter.step_succeeded :then, 'an outcome' - - # then - @out.string.should include("\n\n Given a context\n\n When an event\n\n Then an outcome") - end - - it 'should document additional givens using And' do - # when - @formatter.step_succeeded :given, 'step 1' - @formatter.step_succeeded :given, 'step 2' - @formatter.step_succeeded :given, 'step 3' - - # then - @out.string.should include(" Given step 1\n And step 2\n And step 3") - end - - it 'should document additional events using And' do - # when - @formatter.step_succeeded :when, 'step 1' - @formatter.step_succeeded :when, 'step 2' - @formatter.step_succeeded :when, 'step 3' - - # then - @out.string.should include(" When step 1\n And step 2\n And step 3") - end - - it 'should document additional outcomes using And' do - # when - @formatter.step_succeeded :then, 'step 1' - @formatter.step_succeeded :then, 'step 2' - @formatter.step_succeeded :then, 'step 3' - - # then - @out.string.should include(" Then step 1\n And step 2\n And step 3") - end - - it 'should document a GivenScenario followed by a Given using And' do - # when - @formatter.step_succeeded :'given scenario', 'a scenario' - @formatter.step_succeeded :given, 'a context' - - # then - @out.string.should include(" Given scenario a scenario\n And a context") - end - - it 'should document steps with replaced params' do - @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21 - @out.string.should include(" Given a pink dog with 21 legs") - end - - it 'should document regexp steps with replaced params' do - @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21 - @out.string.should include(" Given a pink dog with 21 legs") - end - - it "should append PENDING for the first pending step" do - @formatter.scenario_started('','') - @formatter.step_pending(:given, 'a context') - - @out.string.should include('Given a context (PENDING)') - end - - it "should append PENDING for pending after already pending" do - @formatter.scenario_started('','') - @formatter.step_pending(:given, 'a context') - @formatter.step_pending(:when, 'I say hey') - - @out.string.should include('When I say hey (PENDING)') - end - - it "should append FAILED for the first failiure" do - @formatter.scenario_started('','') - @formatter.step_failed(:given, 'a context') - - @out.string.should include('Given a context (FAILED)') - end - - it "should append SKIPPED for the second failiure" do - @formatter.scenario_started('','') - @formatter.step_failed(:given, 'a context') - @formatter.step_failed(:when, 'I say hey') - - @out.string.should include('When I say hey (SKIPPED)') - end - - it "should append SKIPPED for the a failiure after PENDING" do - @formatter.scenario_started('','') - @formatter.step_pending(:given, 'a context') - @formatter.step_failed(:when, 'I say hey') - - @out.string.should include('When I say hey (SKIPPED)') - end - - it 'should print some white space after each story' do - # when - @formatter.story_ended 'title', 'narrative' - - # then - @out.string.should include("\n\n") - end - - it "should print nothing for collected_steps" do - @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel']) - @out.string.should == ("") - end - - it "should ignore messages it doesn't care about" do - lambda { - @formatter.this_method_does_not_exist - }.should_not raise_error - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/heckle_runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/heckle_runner_spec.rb deleted file mode 100644 index 539d908c2..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/heckle_runner_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' -unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} - require 'spec/runner/heckle_runner' - - module Foo - class Bar - def one; end - def two; end - end - - class Zap - def three; end - def four; end - end - end - - describe "HeckleRunner" do - before(:each) do - @heckle = mock("heckle", :null_object => true) - @heckle_class = mock("heckle_class") - end - - it "should heckle all methods in all classes in a module" do - @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Zap", "three", rspec_options).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Zap", "four", rspec_options).and_return(@heckle) - - heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class) - heckle_runner.heckle_with - end - - it "should heckle all methods in a class" do - @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) - @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) - - heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class) - heckle_runner.heckle_with - end - - it "should fail heckling when the class is not found" do - lambda do - heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class) - heckle_runner.heckle_with - end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module") - end - - it "should heckle specific method in a class (with #)" do - @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) - - heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class) - heckle_runner.heckle_with - end - - it "should heckle specific method in a class (with .)" do - @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) - - heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class) - heckle_runner.heckle_with - end - end - - describe "Heckler" do - it "should say yes to tests_pass? if specs pass" do - options = mock("options", :null_object => true) - options.should_receive(:run_examples).and_return(true) - heckler = Spec::Runner::Heckler.new("Foo", nil, options) - heckler.tests_pass?.should be_true - end - - it "should say no to tests_pass? if specs fail" do - options = mock("options", :null_object => true) - options.should_receive(:run_examples).and_return(false) - heckler = Spec::Runner::Heckler.new("Foo", nil, options) - heckler.tests_pass?.should be_false - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/heckler_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/heckler_spec.rb deleted file mode 100644 index 7cf6606ec..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/heckler_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' -unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} - require 'spec/runner/heckle_runner' - - describe "Heckler" do - it "should run examples on tests_pass?" do - options = Spec::Runner::Options.new(StringIO.new, StringIO.new) - options.should_receive(:run_examples).with().and_return(&options.method(:run_examples)) - heckler = Spec::Runner::Heckler.new('Array', 'push', options) - heckler.tests_pass? - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/noisy_backtrace_tweaker_spec.rb deleted file mode 100644 index e097f2ec0..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe "NoisyBacktraceTweaker" do - before(:each) do - @error = RuntimeError.new - @tweaker = NoisyBacktraceTweaker.new - end - - it "should leave anything in lib spec dir" do - ["expectations", "mocks", "runner", "stubs"].each do |child| - @error.set_backtrace(["/lib/spec/#{child}/anything.rb"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should_not be_empty - end - end - - it "should leave anything in spec dir" do - @error.set_backtrace(["/lib/spec/expectations/anything.rb"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should_not be_empty - end - - it "should leave bin spec" do - @error.set_backtrace(["bin/spec:"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should_not be_empty - end - - it "should not barf on nil backtrace" do - lambda do - @tweaker.tweak_backtrace(@error) - end.should_not raise_error - end - - it "should clean up double slashes" do - @error.set_backtrace(["/a//b/c//d.rb"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should include("/a/b/c/d.rb") - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/option_parser_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/option_parser_spec.rb deleted file mode 100644 index 8c91ad19f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/option_parser_spec.rb +++ /dev/null @@ -1,377 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' -require 'fileutils' - -describe "OptionParser" do - before(:each) do - @out = StringIO.new - @err = StringIO.new - @parser = Spec::Runner::OptionParser.new(@err, @out) - end - - def parse(args) - @parser.parse(args) - @parser.options - end - - it "should accept dry run option" do - options = parse(["--dry-run"]) - options.dry_run.should be_true - end - - it "should eval and use custom formatter when none of the builtins" do - options = parse(["--format", "Custom::Formatter"]) - options.formatters[0].class.should be(Custom::Formatter) - end - - it "should support formatters with relative and absolute paths, even on windows" do - options = parse([ - "--format", "Custom::Formatter:C:\\foo\\bar", - "--format", "Custom::Formatter:foo/bar", - "--format", "Custom::Formatter:foo\\bar", - "--format", "Custom::Formatter:/foo/bar" - ]) - options.formatters[0].where.should eql("C:\\foo\\bar") - options.formatters[1].where.should eql("foo/bar") - options.formatters[2].where.should eql("foo\\bar") - options.formatters[3].where.should eql("/foo/bar") - end - - it "should not be verbose by default" do - options = parse([]) - options.verbose.should be_nil - end - - it "should not use colour by default" do - options = parse([]) - options.colour.should == false - end - - it "should print help to stdout if no args" do - pending 'A regression since 1.0.8' do - options = parse([]) - @out.rewind - @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m) - end - end - - it "should print help to stdout" do - options = parse(["--help"]) - @out.rewind - @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m) - end - - it "should print instructions about how to require missing formatter" do - lambda do - options = parse(["--format", "Custom::MissingFormatter"]) - options.formatters - end.should raise_error(NameError) - @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n) - end - - it "should print version to stdout" do - options = parse(["--version"]) - @out.rewind - @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(build \d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n) - end - - it "should require file when require specified" do - lambda do - parse(["--require", "whatever"]) - end.should raise_error(LoadError) - end - - it "should support c option" do - options = parse(["-c"]) - options.colour.should be_true - end - - it "should support queens colour option" do - options = parse(["--colour"]) - options.colour.should be_true - end - - it "should support us color option" do - options = parse(["--color"]) - options.colour.should be_true - end - - it "should support single example with -e option" do - options = parse(["-e", "something or other"]) - options.examples.should eql(["something or other"]) - end - - it "should support single example with -s option (will be removed when autotest supports -e)" do - options = parse(["-s", "something or other"]) - options.examples.should eql(["something or other"]) - end - - it "should support single example with --example option" do - options = parse(["--example", "something or other"]) - options.examples.should eql(["something or other"]) - end - - it "should read several example names from file if --example is given an existing file name" do - options = parse(["--example", File.dirname(__FILE__) + '/examples.txt']) - options.examples.should eql([ - "Sir, if you were my husband, I would poison your drink.", - "Madam, if you were my wife, I would drink it."]) - end - - it "should read no examples if given an empty file" do - options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt']) - options.examples.should eql([]) - end - - it "should use html formatter when format is h" do - options = parse(["--format", "h"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) - end - - it "should use html story formatter when format is h" do - options = parse(["--format", "h"]) - options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) - end - - it "should use html formatter when format is html" do - options = parse(["--format", "html"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) - end - - it "should use html story formatter when format is html" do - options = parse(["--format", "html"]) - options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) - end - - it "should use html formatter with explicit output when format is html:test.html" do - FileUtils.rm 'test.html' if File.exist?('test.html') - options = parse(["--format", "html:test.html"]) - options.formatters # creates the file - File.should be_exist('test.html') - options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) - options.formatters[0].close - FileUtils.rm 'test.html' - end - - it "should use noisy backtrace tweaker with b option" do - options = parse(["-b"]) - options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker) - end - - it "should use noisy backtrace tweaker with backtrace option" do - options = parse(["--backtrace"]) - options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker) - end - - it "should use quiet backtrace tweaker by default" do - options = parse([]) - options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker) - end - - it "should use progress bar formatter by default" do - options = parse([]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter) - end - - it "should use specdoc formatter when format is s" do - options = parse(["--format", "s"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter) - end - - it "should use specdoc formatter when format is specdoc" do - options = parse(["--format", "specdoc"]) - options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter) - end - - it "should support diff option when format is not specified" do - options = parse(["--diff"]) - options.diff_format.should == :unified - end - - it "should use unified diff format option when format is unified" do - options = parse(["--diff", "unified"]) - options.diff_format.should == :unified - options.differ_class.should equal(Spec::Expectations::Differs::Default) - end - - it "should use context diff format option when format is context" do - options = parse(["--diff", "context"]) - options.diff_format.should == :context - options.differ_class.should == Spec::Expectations::Differs::Default - end - - it "should use custom diff format option when format is a custom format" do - Spec::Expectations.differ.should_not be_instance_of(Custom::Differ) - - options = parse(["--diff", "Custom::Differ"]) - options.parse_diff "Custom::Differ" - options.diff_format.should == :custom - options.differ_class.should == Custom::Differ - Spec::Expectations.differ.should be_instance_of(Custom::Differ) - end - - it "should print instructions about how to fix missing differ" do - lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError) - @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n) - end - - it "should support --line to identify spec" do - spec_parser = mock("spec_parser") - @parser.instance_variable_set('@spec_parser', spec_parser) - - file_factory = mock("File") - file_factory.should_receive(:file?).and_return(true) - file_factory.should_receive(:open).and_return("fake_io") - @parser.instance_variable_set('@file_factory', file_factory) - - spec_parser.should_receive(:spec_name_for).with("fake_io", 169).and_return("some spec") - - options = parse(["some file", "--line", "169"]) - options.examples.should eql(["some spec"]) - File.rspec_verify - end - - it "should fail with error message if file is dir along with --line" do - spec_parser = mock("spec_parser") - @parser.instance_variable_set('@spec_parser', spec_parser) - - file_factory = mock("File") - file_factory.should_receive(:file?).and_return(false) - file_factory.should_receive(:directory?).and_return(true) - @parser.instance_variable_set('@file_factory', file_factory) - - options = parse(["some file", "--line", "169"]) - @err.string.should match(/You must specify one file, not a directory when using the --line option/n) - end - - it "should fail with error message if file does not exist along with --line" do - spec_parser = mock("spec_parser") - @parser.instance_variable_set('@spec_parser', spec_parser) - - file_factory = mock("File") - file_factory.should_receive(:file?).and_return(false) - file_factory.should_receive(:directory?).and_return(false) - @parser.instance_variable_set('@file_factory', file_factory) - - options = parse(["some file", "--line", "169"]) - @err.string.should match(/some file does not exist/n) - end - - it "should fail with error message if more than one files are specified along with --line" do - spec_parser = mock("spec_parser") - @parser.instance_variable_set('@spec_parser', spec_parser) - - options = parse(["some file", "some other file", "--line", "169"]) - @err.string.should match(/Only one file can be specified when using the --line option/n) - end - - it "should fail with error message if --example and --line are used simultaneously" do - spec_parser = mock("spec_parser") - @parser.instance_variable_set('@spec_parser', spec_parser) - - options = parse(["some file", "--example", "some example", "--line", "169"]) - @err.string.should match(/You cannot use both --line and --example/n) - end - - if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} - it "should barf when --heckle is specified (and platform is windows)" do - lambda do - options = parse(["--heckle", "Spec"]) - end.should raise_error(StandardError, "Heckle not supported on Windows") - end - else - it "should heckle when --heckle is specified (and platform is not windows)" do - options = parse(["--heckle", "Spec"]) - options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner) - end - end - - it "should read options from file when --options is specified" do - options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) - options.diff_format.should_not be_nil - options.colour.should be_true - end - - it "should default the formatter to ProgressBarFormatter when using options file" do - options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) - options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter) - end - - it "should read spaced and multi-line options from file when --options is specified" do - options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"]) - options.diff_format.should_not be_nil - options.colour.should be_true - options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter) - end - - it "should save config to file when --generate-options is specified" do - FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts') - options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"]) - IO.read('test.spec.opts').should == "--colour\n--diff\n" - FileUtils.rm 'test.spec.opts' - end - - it "should save config to file when -G is specified" do - FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts') - options = parse(["--colour", "-G", "test.spec.opts", "--diff"]) - IO.read('test.spec.opts').should == "--colour\n--diff\n" - FileUtils.rm 'test.spec.opts' - end - - it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do - options = Spec::Runner::OptionParser.parse([ - "some/spec.rb", "--diff", "--colour" - ], @err, @out) - Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options| - options.argv.should == ["some/spec.rb", "--diff", "--colour"] - end - parse(["some/spec.rb", "--diff", "--drb", "--colour"]) - end - - it "should reverse spec order when --reverse is specified" do - options = parse(["some/spec.rb", "--reverse"]) - end - - it "should set an mtime comparator when --loadby mtime" do - options = parse(["--loadby", 'mtime']) - runner = Spec::Runner::ExampleGroupRunner.new(options) - Spec::Runner::ExampleGroupRunner.should_receive(:new). - with(options). - and_return(runner) - runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"]) - - Dir.chdir(File.dirname(__FILE__)) do - options.files << 'command_line_spec.rb' - options.files << 'most_recent_spec.rb' - FileUtils.touch "most_recent_spec.rb" - options.run_examples - FileUtils.rm "most_recent_spec.rb" - end - end - - it "should use the standard runner by default" do - runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options) - ::Spec::Runner::ExampleGroupRunner.should_receive(:new). - with(@parser.options). - and_return(runner) - options = parse([]) - options.run_examples - end - - it "should use a custom runner when given" do - runner = Custom::ExampleGroupRunner.new(@parser.options, nil) - Custom::ExampleGroupRunner.should_receive(:new). - with(@parser.options, nil). - and_return(runner) - options = parse(["--runner", "Custom::ExampleGroupRunner"]) - options.run_examples - end - - it "should use a custom runner with extra options" do - runner = Custom::ExampleGroupRunner.new(@parser.options, 'something') - Custom::ExampleGroupRunner.should_receive(:new). - with(@parser.options, 'something'). - and_return(runner) - options = parse(["--runner", "Custom::ExampleGroupRunner:something"]) - options.run_examples - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/options_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/options_spec.rb deleted file mode 100644 index e4d01b05c..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/options_spec.rb +++ /dev/null @@ -1,294 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe Options do - before(:each) do - @err = StringIO.new('') - @out = StringIO.new('') - @options = Options.new(@err, @out) - end - - after(:each) do - Spec::Expectations.differ = nil - end - - describe "#examples" do - it "should default to empty array" do - @options.examples.should == [] - end - end - - describe "#backtrace_tweaker" do - it "should default to QuietBacktraceTweaker" do - @options.backtrace_tweaker.class.should == QuietBacktraceTweaker - end - end - - describe "#dry_run" do - it "should default to false" do - @options.dry_run.should == false - end - end - - describe "#context_lines" do - it "should default to 3" do - @options.context_lines.should == 3 - end - end - - describe "#parse_diff with nil" do - before(:each) do - @options.parse_diff nil - end - - it "should make diff_format unified" do - @options.diff_format.should == :unified - end - - it "should set Spec::Expectations.differ to be a default differ" do - Spec::Expectations.differ.class.should == - ::Spec::Expectations::Differs::Default - end - end - - describe "#parse_diff with 'unified'" do - before(:each) do - @options.parse_diff 'unified' - end - - it "should make diff_format unified and uses default differ_class" do - @options.diff_format.should == :unified - @options.differ_class.should equal(Spec::Expectations::Differs::Default) - end - - it "should set Spec::Expectations.differ to be a default differ" do - Spec::Expectations.differ.class.should == - ::Spec::Expectations::Differs::Default - end - end - - describe "#parse_diff with 'context'" do - before(:each) do - @options.parse_diff 'context' - end - - it "should make diff_format context and uses default differ_class" do - @options.diff_format.should == :context - @options.differ_class.should == Spec::Expectations::Differs::Default - end - - it "should set Spec::Expectations.differ to be a default differ" do - Spec::Expectations.differ.class.should == - ::Spec::Expectations::Differs::Default - end - end - - describe "#parse_diff with Custom::Differ" do - before(:each) do - @options.parse_diff 'Custom::Differ' - end - - it "should use custom differ_class" do - @options.diff_format.should == :custom - @options.differ_class.should == Custom::Differ - Spec::Expectations.differ.should be_instance_of(Custom::Differ) - end - - it "should set Spec::Expectations.differ to be a default differ" do - Spec::Expectations.differ.class.should == - ::Custom::Differ - end - end - - describe "#parse_diff with missing class name" do - it "should raise error" do - lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError) - @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n) - end - end - - describe "#parse_example" do - it "with argument thats not a file path, sets argument as the example" do - example = "something or other" - File.file?(example).should == false - @options.parse_example example - @options.examples.should eql(["something or other"]) - end - - it "with argument that is a file path, sets examples to contents of the file" do - example = "#{File.dirname(__FILE__)}/examples.txt" - File.should_receive(:file?).with(example).and_return(true) - file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.") - File.should_receive(:open).with(example).and_return(file) - - @options.parse_example example - @options.examples.should eql([ - "Sir, if you were my husband, I would poison your drink.", - "Madam, if you were my wife, I would drink it." - ]) - end - end - - describe "#examples_should_not_be_run" do - it "should cause #run_examples to return true and do nothing" do - @options.examples_should_not_be_run - ExampleGroupRunner.should_not_receive(:new) - - @options.run_examples.should be_true - end - end - - describe "#load_class" do - it "should raise error when not class name" do - lambda do - @options.send(:load_class, 'foo', 'fruit', '--food') - end.should raise_error('"foo" is not a valid class name') - end - end - - describe "#reporter" do - it "returns a Reporter" do - @options.reporter.should be_instance_of(Reporter) - @options.reporter.options.should === @options - end - end - - describe "#add_example_group affecting passed in example_group" do - it "runs all examples when options.examples is nil" do - example_1_has_run = false - example_2_has_run = false - @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do - it "runs 1" do - example_1_has_run = true - end - it "runs 2" do - example_2_has_run = true - end - end - - @options.examples = nil - - @options.add_example_group @example_group - @options.run_examples - example_1_has_run.should be_true - example_2_has_run.should be_true - end - - it "keeps all example_definitions when options.examples is empty" do - example_1_has_run = false - example_2_has_run = false - @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do - it "runs 1" do - example_1_has_run = true - end - it "runs 2" do - example_2_has_run = true - end - end - - @options.examples = [] - - @options.add_example_group @example_group - @options.run_examples - example_1_has_run.should be_true - example_2_has_run.should be_true - end - end - - describe "#add_example_group affecting example_group" do - it "adds example_group when example_group has example_definitions and is not shared" do - @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do - it "uses this example_group" do - end - end - - @options.number_of_examples.should == 0 - @options.add_example_group @example_group - @options.number_of_examples.should == 1 - @options.example_groups.length.should == 1 - end - end - - describe "#remove_example_group" do - it "should remove the ExampleGroup from the list of ExampleGroups" do - @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do - end - @options.add_example_group @example_group - @options.example_groups.should include(@example_group) - - @options.remove_example_group @example_group - @options.example_groups.should_not include(@example_group) - end - end - - describe "#run_examples" do - it "should use the standard runner by default" do - runner = ::Spec::Runner::ExampleGroupRunner.new(@options) - ::Spec::Runner::ExampleGroupRunner.should_receive(:new). - with(@options). - and_return(runner) - @options.user_input_for_runner = nil - - @options.run_examples - end - - it "should use a custom runner when given" do - runner = Custom::ExampleGroupRunner.new(@options, nil) - Custom::ExampleGroupRunner.should_receive(:new). - with(@options, nil). - and_return(runner) - @options.user_input_for_runner = "Custom::ExampleGroupRunner" - - @options.run_examples - end - - it "should use a custom runner with extra options" do - runner = Custom::ExampleGroupRunner.new(@options, 'something') - Custom::ExampleGroupRunner.should_receive(:new). - with(@options, 'something'). - and_return(runner) - @options.user_input_for_runner = "Custom::ExampleGroupRunner:something" - - @options.run_examples - end - - describe "#run_examples when there are example_group" do - before(:each) do - @options.add_example_group Class.new(::Spec::Example::ExampleGroup) - @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) - end - - it "runs the Examples and outputs the result" do - @options.run_examples - @out.string.should include("0 examples, 0 failures") - end - - it "sets #examples_run? to true" do - @options.examples_run?.should be_false - @options.run_examples - @options.examples_run?.should be_true - end - end - - describe "#run_examples when there are no example_group" do - before(:each) do - @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) - end - - it "does not run Examples and does not output a result" do - @options.run_examples - @out.string.should_not include("examples") - @out.string.should_not include("failures") - end - - it "sets #examples_run? to false" do - @options.examples_run?.should be_false - @options.run_examples - @options.examples_run?.should be_false - end - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture.rb deleted file mode 100644 index 444730dc3..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture.rb +++ /dev/null @@ -1,7 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "Running an Example" do - it "should not output twice" do - true.should be_true - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture_runner.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture_runner.rb deleted file mode 100644 index a0e61316e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_fixture_runner.rb +++ /dev/null @@ -1,8 +0,0 @@ -dir = File.dirname(__FILE__) -require "#{dir}/../../spec_helper" - -triggering_double_output = rspec_options -options = Spec::Runner::OptionParser.parse( - ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout -) -Spec::Runner::CommandLine.run(options) diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_spec.rb deleted file mode 100644 index 8f67a380a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/output_one_time_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe CommandLine do - it "should not output twice" do - dir = File.dirname(__FILE__) - Dir.chdir("#{dir}/../../..") do - output =`ruby #{dir}/output_one_time_fixture_runner.rb` - output.should include("1 example, 0 failures") - output.should_not include("0 examples, 0 failures") - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/quiet_backtrace_tweaker_spec.rb deleted file mode 100644 index e47b6c735..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe "QuietBacktraceTweaker" do - before(:each) do - @error = RuntimeError.new - @tweaker = QuietBacktraceTweaker.new - end - - it "should not barf on nil backtrace" do - lambda do - @tweaker.tweak_backtrace(@error) - end.should_not raise_error - end - - it "should remove anything from textmate ruby bundle" do - @error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should be_empty - end - - it "should remove anything in lib spec dir" do - ["expectations", "mocks", "runner"].each do |child| - element="/lib/spec/#{child}/anything.rb" - @error.set_backtrace([element]) - @tweaker.tweak_backtrace(@error) - unless (@error.backtrace.empty?) - raise("Should have tweaked away '#{element}'") - end - end - end - - it "should remove mock_frameworks/rspec" do - element = "mock_frameworks/rspec" - @error.set_backtrace([element]) - @tweaker.tweak_backtrace(@error) - unless (@error.backtrace.empty?) - raise("Should have tweaked away '#{element}'") - end - end - - it "should remove bin spec" do - @error.set_backtrace(["bin/spec:"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should be_empty - end - - it "should clean up double slashes" do - @error.set_backtrace(["/a//b/c//d.rb"]) - @tweaker.tweak_backtrace(@error) - @error.backtrace.should include("/a/b/c/d.rb") - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb deleted file mode 100644 index 52377e7f3..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/reporter_spec.rb +++ /dev/null @@ -1,189 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -module Spec - module Runner - describe Reporter do - attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group - before(:each) do - @formatter_output = StringIO.new - @options = Options.new(StringIO.new, StringIO.new) - @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil) - options.backtrace_tweaker = backtrace_tweaker - @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output) - options.formatters << formatter - @reporter = Reporter.new(options) - @example_group = create_example_group("example_group") - reporter.add_example_group example_group - end - - def failure - Mocks::DuckTypeArgConstraint.new(:header, :exception) - end - - def create_example_group(description_text) - example_group = Class.new(Spec::Example::ExampleGroup) - example_group.describe description_text - example_group - end - - it "should assign itself as the reporter to options" do - options.reporter.should equal(@reporter) - end - - it "should tell formatter when example_group is added" do - formatter.should_receive(:add_example_group).with(example_group) - reporter.add_example_group(example_group) - end - - it "should handle multiple example_groups with same name" do - formatter.should_receive(:add_example_group).exactly(3).times - formatter.should_receive(:example_started).exactly(3).times - formatter.should_receive(:example_passed).exactly(3).times - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:close).with(no_args) - formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0) - reporter.add_example_group(create_example_group("example_group")) - reporter.example_started("spec 1") - reporter.example_finished("spec 1") - reporter.add_example_group(create_example_group("example_group")) - reporter.example_started("spec 2") - reporter.example_finished("spec 2") - reporter.add_example_group(create_example_group("example_group")) - reporter.example_started("spec 3") - reporter.example_finished("spec 3") - reporter.dump - end - - it "should handle multiple examples with the same name" do - error=RuntimeError.new - passing = ExampleGroup.new("example") - failing = ExampleGroup.new("example") - - formatter.should_receive(:add_example_group).exactly(2).times - formatter.should_receive(:example_passed).with(passing).exactly(2).times - formatter.should_receive(:example_failed).with(failing, 1, failure) - formatter.should_receive(:example_failed).with(failing, 2, failure) - formatter.should_receive(:dump_failure).exactly(2).times - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:close).with(no_args) - formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0) - backtrace_tweaker.should_receive(:tweak_backtrace).twice - - reporter.add_example_group(create_example_group("example_group")) - reporter.example_finished(passing) - reporter.example_finished(failing, error) - - reporter.add_example_group(create_example_group("example_group")) - reporter.example_finished(passing) - reporter.example_finished(failing, error) - reporter.dump - end - - it "should push stats to formatter even with no data" do - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0) - formatter.should_receive(:close).with(no_args) - reporter.dump - end - - it "should push time to formatter" do - formatter.should_receive(:start).with(5) - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:close).with(no_args) - formatter.should_receive(:dump_summary) do |time, a, b| - time.to_s.should match(/[0-9].[0-9|e|-]+/) - end - reporter.start(5) - reporter.end - reporter.dump - end - - describe Reporter, "reporting one passing example" do - it "should tell formatter example passed" do - formatter.should_receive(:example_passed) - reporter.example_finished("example") - end - - it "should not delegate to backtrace tweaker" do - formatter.should_receive(:example_passed) - backtrace_tweaker.should_not_receive(:tweak_backtrace) - reporter.example_finished("example") - end - - it "should account for passing example in stats" do - formatter.should_receive(:example_passed) - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0) - formatter.should_receive(:close).with(no_args) - reporter.example_finished("example") - reporter.dump - end - end - - describe Reporter, "reporting one failing example" do - it "should tell formatter that example failed" do - formatter.should_receive(:example_failed) - reporter.example_finished(example_group, RuntimeError.new) - end - - it "should delegate to backtrace tweaker" do - formatter.should_receive(:example_failed) - backtrace_tweaker.should_receive(:tweak_backtrace) - reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new) - end - - it "should account for failing example in stats" do - example = ExampleGroup.new("example") - formatter.should_receive(:example_failed).with(example, 1, failure) - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:dump_failure).with(1, anything()) - formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0) - formatter.should_receive(:close).with(no_args) - reporter.example_finished(example, RuntimeError.new) - reporter.dump - end - - end - - describe Reporter, "reporting one pending example (ExamplePendingError)" do - it "should tell formatter example is pending" do - example = ExampleGroup.new("example") - formatter.should_receive(:example_pending).with(example_group.description, example, "reason") - formatter.should_receive(:add_example_group).with(example_group) - reporter.add_example_group(example_group) - reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) - end - - it "should account for pending example in stats" do - example = ExampleGroup.new("example") - formatter.should_receive(:example_pending).with(example_group.description, example, "reason") - formatter.should_receive(:start_dump) - formatter.should_receive(:dump_pending) - formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1) - formatter.should_receive(:close).with(no_args) - formatter.should_receive(:add_example_group).with(example_group) - reporter.add_example_group(example_group) - reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) - reporter.dump - end - end - - describe Reporter, "reporting one pending example (PendingExampleFixedError)" do - it "should tell formatter pending example is fixed" do - formatter.should_receive(:example_failed) do |name, counter, failure| - failure.header.should == "'example_group example' FIXED" - end - formatter.should_receive(:add_example_group).with(example_group) - reporter.add_example_group(example_group) - reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason")) - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner/spec_parser_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner/spec_parser_spec.rb deleted file mode 100644 index 301155d04..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner/spec_parser_spec.rb +++ /dev/null @@ -1,124 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper.rb' - -describe "c" do - - it "1" do - end - - it "2" do - end - -end - -describe "d" do - - it "3" do - end - - it "4" do - end - -end - -class SpecParserSubject -end - -describe SpecParserSubject do - - it "5" do - end - -end - -describe SpecParserSubject, "described" do - - it "6" do - end - -end - -describe SpecParserSubject, "described", :something => :something_else do - - it "7" do - end - -end - -describe "described", :something => :something_else do - - it "8" do - end - -end - - -describe "SpecParser" do - before(:each) do - @p = Spec::Runner::SpecParser.new - end - - it "should find spec name for 'specify' at same line" do - @p.spec_name_for(File.open(__FILE__), 5).should == "c 1" - end - - it "should find spec name for 'specify' at end of spec line" do - @p.spec_name_for(File.open(__FILE__), 6).should == "c 1" - end - - it "should find context for 'context' above all specs" do - @p.spec_name_for(File.open(__FILE__), 4).should == "c" - end - - it "should find spec name for 'it' at same line" do - @p.spec_name_for(File.open(__FILE__), 15).should == "d 3" - end - - it "should find spec name for 'it' at end of spec line" do - @p.spec_name_for(File.open(__FILE__), 16).should == "d 3" - end - - it "should find context for 'describe' above all specs" do - @p.spec_name_for(File.open(__FILE__), 14).should == "d" - end - - it "should find nearest example name between examples" do - @p.spec_name_for(File.open(__FILE__), 7).should == "c 1" - end - - it "should find nothing outside a context" do - @p.spec_name_for(File.open(__FILE__), 2).should be_nil - end - - it "should find context name for type" do - @p.spec_name_for(File.open(__FILE__), 26).should == "SpecParserSubject" - end - - it "should find context and spec name for type" do - @p.spec_name_for(File.open(__FILE__), 28).should == "SpecParserSubject 5" - end - - it "should find context and description for type" do - @p.spec_name_for(File.open(__FILE__), 33).should == "SpecParserSubject described" - end - - it "should find context and description and example for type" do - @p.spec_name_for(File.open(__FILE__), 36).should == "SpecParserSubject described 6" - end - - it "should find context and description for type with modifications" do - @p.spec_name_for(File.open(__FILE__), 40).should == "SpecParserSubject described" - end - - it "should find context and described and example for type with modifications" do - @p.spec_name_for(File.open(__FILE__), 43).should == "SpecParserSubject described 7" - end - - it "should find example group" do - @p.spec_name_for(File.open(__FILE__), 47).should == "described" - end - - it "should find example" do - @p.spec_name_for(File.open(__FILE__), 50).should == "described 8" - end - -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/runner_spec.rb deleted file mode 100644 index d75e66111..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/runner_spec.rb +++ /dev/null @@ -1,11 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper.rb' - -module Spec - describe Runner, ".configure" do - it "should yield global configuration" do - Spec::Runner.configure do |config| - config.should equal(Spec::Runner.configuration) - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/spec_classes.rb b/vendor/gems/rspec-1.1.2/spec/spec/spec_classes.rb deleted file mode 100644 index 73b0e33e8..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/spec_classes.rb +++ /dev/null @@ -1,129 +0,0 @@ -# This file contains various classes used by the specs. -module Spec - module Expectations - class Person - attr_reader :name - def initialize name - @name = name - end - def == other - return @name == other.name - end - end - - class ClassWithMultiWordPredicate - def multi_word_predicate? - true - end - end - - module Helper - class CollectionWithSizeMethod - def initialize; @list = []; end - def size; @list.size; end - def push(item); @list.push(item); end - end - - class CollectionWithLengthMethod - def initialize; @list = []; end - def length; @list.size; end - def push(item); @list.push(item); end - end - - class CollectionOwner - attr_reader :items_in_collection_with_size_method, :items_in_collection_with_length_method - - def initialize - @items_in_collection_with_size_method = CollectionWithSizeMethod.new - @items_in_collection_with_length_method = CollectionWithLengthMethod.new - end - - def add_to_collection_with_size_method(item) - @items_in_collection_with_size_method.push(item) - end - - def add_to_collection_with_length_method(item) - @items_in_collection_with_length_method.push(item) - end - - def items_for(arg) - return [1, 2, 3] if arg == 'a' - [1] - end - - def items - @items_in_collection_with_size_method - end - end - - class HandCodedMock - include Spec::Matchers - def initialize(return_val) - @return_val = return_val - @funny_called = false - end - - def funny? - @funny_called = true - @return_val - end - - def hungry?(a, b, c) - a.should equal(1) - b.should equal(2) - c.should equal(3) - @funny_called = true - @return_val - end - - def exists? - @return_val - end - - def multi_word_predicate? - @return_val - end - - def rspec_verify - @funny_called.should be_true - end - end - class ClassWithUnqueriedPredicate - attr_accessor :foo - def initialize(foo) - @foo = foo - end - end - end - end -end - -module Custom - require 'spec/runner/formatter/base_text_formatter' - class Formatter < Spec::Runner::Formatter::BaseTextFormatter - attr_reader :options, :where - - def initialize(options, where) - @options = options - @where = where - end - end - - class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter - attr_reader :where - - def initialize(options, where) - bad_method - end - end - - class Differ - attr_reader :options - def initialize(options) - @options = options - end - end -end - -class FakeReporter < Spec::Runner::Reporter -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/builders.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/builders.rb deleted file mode 100644 index 77d50d53e..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/builders.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Spec - module Story - class StoryBuilder - def initialize - @title = 'a story' - @narrative = 'narrative' - end - - def title(value) - @title = value - self - end - - def narrative(value) - @narrative = value - self - end - - def to_story(&block) - block = lambda {} unless block_given? - Story.new @title, @narrative, &block - end - end - - class ScenarioBuilder - def initialize - @name = 'a scenario' - @story = StoryBuilder.new.to_story - end - - def name(value) - @name = value - self - end - - def story(value) - @story = value - self - end - - def to_scenario(&block) - Scenario.new @story, @name, &block - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb deleted file mode 100644 index acdc341ce..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb +++ /dev/null @@ -1,161 +0,0 @@ -require File.dirname(__FILE__) + '/../../../spec_helper' - -module Spec - module Story - module Extensions - describe "the main object extended with Main", :shared => true do - before(:each) do - @main = Class.new do; include Main; end - @original_rspec_story_steps, $rspec_story_steps = $rspec_story_steps, nil - end - - after(:each) do - $rspec_story_steps = @original_rspec_story_steps - end - - def have_step(type, name) - return simple_matcher(%[step group containing a #{type} named #{name.inspect}]) do |actual| - Spec::Story::Step === actual.find(type, name) - end - end - end - - describe Main, "#run_story" do - it_should_behave_like "the main object extended with Main" - - it "should create a PlainTextStoryRunner with run_story" do - Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(mock("runner", :null_object => true)) - @main.run_story - end - - it "should yield the runner if arity == 1" do - File.should_receive(:read).with("some/path").and_return("Story: foo") - $main_spec_runner = nil - @main.run_story("some/path") do |runner| - $main_spec_runner = runner - end - $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner) - end - - it "should run in the runner if arity == 0" do - File.should_receive(:read).with("some/path").and_return("Story: foo") - $main_spec_runner = nil - @main.run_story("some/path") do - $main_spec_runner = self - end - $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner) - end - - it "should tell the PlainTextStoryRunner to run with run_story" do - runner = mock("runner") - Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(runner) - runner.should_receive(:run) - @main.run_story - end - end - - describe Main, "#steps_for" do - it_should_behave_like "the main object extended with Main" - - it "should have no steps for a non existent key" do - @main.steps_for(:key).find(:given, "foo").should be_nil - end - - it "should create steps for a key" do - $main_spec_invoked = false - @main.steps_for(:key) do - Given("foo") { - $main_spec_invoked = true - } - end - @main.steps_for(:key).find(:given, "foo").perform(Object.new, "foo") - $main_spec_invoked.should be_true - end - - it "should append steps to steps_for a given key" do - @main.steps_for(:key) do - Given("first") {} - end - @main.steps_for(:key) do - Given("second") {} - end - @main.steps_for(:key).should have_step(:given, "first") - @main.steps_for(:key).should have_step(:given, "second") - end - end - - describe Main, "#with_steps_for adding new steps" do - it_should_behave_like "the main object extended with Main" - - it "should result in a group containing pre-existing steps and newly defined steps" do - first_group = @main.steps_for(:key) do - Given("first") {} - end - second_group = @main.with_steps_for(:key) do - Given("second") {} - end - - second_group.should have_step(:given, "first") - second_group.should have_step(:given, "second") - end - - it "should not add its steps to the existing group" do - first_group = @main.steps_for(:key) do - Given("first") {} - end - second_group = @main.with_steps_for(:key) do - Given("second") {} - end - - first_group.should have_step(:given, "first") - first_group.should_not have_step(:given, "second") - end - end - - describe Main, "#with_steps_for running a story" do - it_should_behave_like "the main object extended with Main" - - before(:each) do - @runner = mock("runner") - @runner_step_group = StepGroup.new - @runner.stub!(:steps).and_return(@runner_step_group) - @runner.stub!(:run) - Spec::Story::Runner::PlainTextStoryRunner.stub!(:new).and_return(@runner) - end - - it "should create a PlainTextStoryRunner with a path" do - Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with('path/to/file',{}).and_return(@runner) - @main.with_steps_for(:foo) do - run 'path/to/file' - end - end - - it "should create a PlainTextStoryRunner with a path and options" do - Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with(anything,{:bar => :baz}).and_return(@runner) - @main.with_steps_for(:foo) do - run 'path/to/file', :bar => :baz - end - end - - it "should pass the group it creates to the runner's steps" do - steps = @main.steps_for(:ice_cream) do - Given("vanilla") {} - end - @main.with_steps_for(:ice_cream) do - run 'foo' - end - @runner_step_group.should have_step(:given, "vanilla") - end - - it "should run a story" do - @runner.should_receive(:run) - Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(@runner) - @main.with_steps_for(:foo) do - run 'path/to/file' - end - end - - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/extensions_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/extensions_spec.rb deleted file mode 100644 index 612ddc72f..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/extensions_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -require 'spec/story' - -describe Kernel, "#Story" do - before(:each) do - Kernel.stub!(:at_exit) - end - - it "should delegate to ::Spec::Story::Runner.story_runner" do - ::Spec::Story::Runner.story_runner.should_receive(:Story) - story = Story("title","narrative"){} - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/given_scenario_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/given_scenario_spec.rb deleted file mode 100644 index a688f88d5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/given_scenario_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe GivenScenario do - it 'should execute a scenario from the current story in its world' do - # given - class MyWorld - attr :scenario_ran - end - instance = World.create(MyWorld) - scenario = ScenarioBuilder.new.to_scenario do - @scenario_ran = true - end - Runner::StoryRunner.should_receive(:scenario_from_current_story).with('scenario name').and_return(scenario) - - step = GivenScenario.new 'scenario name' - - # when - step.perform(instance, nil) - - # then - instance.scenario_ran.should be_true - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/plain_text_story_runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/plain_text_story_runner_spec.rb deleted file mode 100644 index 1d5f2e0c3..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/plain_text_story_runner_spec.rb +++ /dev/null @@ -1,92 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - describe PlainTextStoryRunner do - before(:each) do - StoryParser.stub!(:new).and_return(@parser = mock("parser")) - @parser.stub!(:parse).and_return([]) - File.stub!(:read).with("path").and_return("this\nand that") - end - - it "should provide access to steps" do - runner = PlainTextStoryRunner.new("path") - - runner.steps do |add| - add.given("baz") {} - end - - runner.steps.find(:given, "baz").should_not be_nil - end - - it "should parse a story file" do - runner = PlainTextStoryRunner.new("path") - - during { - runner.run - }.expect { - @parser.should_receive(:parse).with(["this", "and that"]) - } - end - - it "should build up a mediator with its own steps and the singleton story_runner" do - runner = PlainTextStoryRunner.new("path") - Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner")) - Spec::Story::Runner::StoryMediator.should_receive(:new).with(runner.steps, story_runner, {}). - and_return(mediator = stub("mediator", :run_stories => nil)) - runner.run - end - - it "should build up a parser with the mediator" do - runner = PlainTextStoryRunner.new("path") - Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner")) - Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator = stub("mediator", :run_stories => nil)) - Spec::Story::Runner::StoryParser.should_receive(:new).with(mediator).and_return(@parser) - runner.run - end - - it "should tell the mediator to run the stories" do - runner = PlainTextStoryRunner.new("path") - mediator = mock("mediator") - Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator) - mediator.should_receive(:run_stories) - runner.run - end - - it "should accept a block instead of a path" do - runner = PlainTextStoryRunner.new do |runner| - runner.load("path/to/story") - end - File.should_receive(:read).with("path/to/story").and_return("this\nand that") - runner.run - end - - it "should tell you if you try to run with no path set" do - runner = PlainTextStoryRunner.new - lambda { - runner.run - }.should raise_error(RuntimeError, "You must set a path to the file with the story. See the RDoc.") - end - - it "should pass options to the mediator" do - runner = PlainTextStoryRunner.new("path", :foo => :bar) - Spec::Story::Runner::StoryMediator.should_receive(:new). - with(anything, anything, :foo => :bar). - and_return(mediator = stub("mediator", :run_stories => nil)) - runner.run - end - - it "should provide access to its options" do - runner = PlainTextStoryRunner.new("path") - runner[:foo] = :bar - Spec::Story::Runner::StoryMediator.should_receive(:new). - with(anything, anything, :foo => :bar). - and_return(mediator = stub("mediator", :run_stories => nil)) - runner.run - end - - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_collector_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_collector_spec.rb deleted file mode 100644 index 042c41e8d..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_collector_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - describe ScenarioCollector do - it 'should construct scenarios with the supplied story' do - # given - story = stub_everything('story') - scenario_collector = ScenarioCollector.new(story) - - # when - scenario_collector.Scenario 'scenario1' do end - scenario_collector.Scenario 'scenario2' do end - scenarios = scenario_collector.scenarios - - # then - scenario_collector.should have(2).scenarios - scenarios.first.name.should == 'scenario1' - scenarios.first.story.should equal(story) - scenarios.last.name.should == 'scenario2' - scenarios.last.story.should equal(story) - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_runner_spec.rb deleted file mode 100644 index a69ed4a99..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/scenario_runner_spec.rb +++ /dev/null @@ -1,142 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - describe ScenarioRunner do - it 'should run a scenario in its story' do - # given - world = stub_everything - scenario_runner = ScenarioRunner.new - $answer = nil - story = Story.new 'story', 'narrative' do - @answer = 42 # this should be available to the scenario - end - scenario = Scenario.new story, 'scenario' do - $answer = @answer - end - - # when - scenario_runner.run(scenario, world) - - # then - $answer.should == 42 - end - - it 'should allow scenarios to share methods' do - # given - world = stub_everything - $shared_invoked = 0 - story = Story.new 'story', 'narrative' do - def shared - $shared_invoked += 1 - end - end - scenario1 = Scenario.new story, 'scenario1' do - shared() - end - scenario2 = Scenario.new story, 'scenario2' do - shared() - end - scenario_runner = ScenarioRunner.new - - # when - scenario_runner.run(scenario1, world) - scenario_runner.run(scenario2, world) - - # then - $shared_invoked.should == 2 - end - - it 'should notify listeners when a scenario starts' do - # given - world = stub_everything - story = Story.new 'story', 'narrative' do end - scenario = Scenario.new story, 'scenario1' do - # succeeds - end - scenario_runner = ScenarioRunner.new - mock_listener1 = stub_everything('listener1') - mock_listener2 = stub_everything('listener2') - scenario_runner.add_listener(mock_listener1) - scenario_runner.add_listener(mock_listener2) - - # expect - mock_listener1.should_receive(:scenario_started).with('story', 'scenario1') - mock_listener2.should_receive(:scenario_started).with('story', 'scenario1') - - # when - scenario_runner.run(scenario, world) - - # then - end - - it 'should notify listeners when a scenario succeeds' do - # given - world = stub_everything('world') - story = Story.new 'story', 'narrative' do end - scenario = Scenario.new story, 'scenario1' do - # succeeds - end - scenario_runner = ScenarioRunner.new - mock_listener1 = stub_everything('listener1') - mock_listener2 = stub_everything('listener2') - scenario_runner.add_listener(mock_listener1) - scenario_runner.add_listener(mock_listener2) - - # expect - mock_listener1.should_receive(:scenario_succeeded).with('story', 'scenario1') - mock_listener2.should_receive(:scenario_succeeded).with('story', 'scenario1') - - # when - scenario_runner.run(scenario, world) - - # then - end - - it 'should notify listeners ONCE when a scenario raises an error' do - # given - error = RuntimeError.new('oops') - story = Story.new 'title', 'narrative' do end - scenario = Scenario.new story, 'scenario1' do - end - scenario_runner = ScenarioRunner.new - mock_listener = stub_everything('listener') - scenario_runner.add_listener(mock_listener) - world = stub_everything - - # expect - world.should_receive(:errors).twice.and_return([error, error]) - mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', error).once - - # when - scenario_runner.run scenario, world - - # then - end - - it 'should notify listeners when a scenario is pending' do - # given - pending_error = Spec::Example::ExamplePendingError.new('todo') - story = Story.new 'title', 'narrative' do end - scenario = Scenario.new story, 'scenario1' do - end - scenario_runner = ScenarioRunner.new - mock_listener = mock('listener') - scenario_runner.add_listener(mock_listener) - world = stub_everything - - # expect - world.should_receive(:errors).twice.and_return([pending_error, pending_error]) - mock_listener.should_receive(:scenario_started).with('title', 'scenario1') - mock_listener.should_receive(:scenario_pending).with('title', 'scenario1', 'todo').once - - # when - scenario_runner.run scenario, world - - # then - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_mediator_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_mediator_spec.rb deleted file mode 100644 index 4192e483a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_mediator_spec.rb +++ /dev/null @@ -1,133 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - - describe StoryMediator do - before(:each) do - $story_mediator_spec_value = nil - @step_group = StepGroup.new - @step_group.create_matcher(:given, "given") { $story_mediator_spec_value = "given matched" } - @step_group.create_matcher(:when, "when") { $story_mediator_spec_value = "when matched" } - @step_group.create_matcher(:then, "then") { $story_mediator_spec_value = "then matched" } - - @scenario_runner = ScenarioRunner.new - @runner = StoryRunner.new @scenario_runner - @mediator = StoryMediator.new @step_group, @runner - end - - def run_stories - @mediator.run_stories - @runner.run_stories - end - - it "should have no stories" do - @mediator.stories.should be_empty - end - - it "should create two stories" do - @mediator.create_story "story title", "story narrative" - @mediator.create_story "story title 2", "story narrative 2" - run_stories - - @runner.should have(2).stories - @runner.stories.first.title.should == "story title" - @runner.stories.first.narrative.should == "story narrative" - @runner.stories.last.title.should == "story title 2" - @runner.stories.last.narrative.should == "story narrative 2" - end - - it "should create a scenario" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario name" - run_stories - - @runner.should have(1).scenarios - @runner.scenarios.first.name.should == "scenario name" - @runner.scenarios.first.story.should == @runner.stories.first - end - - it "should create a given scenario step if one matches" do - pending("need to untangle the dark mysteries of the story runner - something needs to get stubbed here") do - story = @mediator.create_story "title", "narrative" - @mediator.create_scenario "previous scenario" - @mediator.create_scenario "current scenario" - @mediator.create_given_scenario "previous scenario" - run_stories - - $story_mediator_spec_value.should == "previous scenario matched" - end - end - - it "should create a given step if one matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_given "given" - run_stories - - $story_mediator_spec_value.should == "given matched" - end - - it "should create a pending step if no given step matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_given "no match" - mock_listener = stub_everything("listener") - mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") - @scenario_runner.add_listener mock_listener - run_stories - end - - it "should create a when step if one matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_when "when" - run_stories - - $story_mediator_spec_value.should == "when matched" - end - - it "should create a pending step if no when step matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_when "no match" - mock_listener = stub_everything("listener") - mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") - @scenario_runner.add_listener mock_listener - run_stories - end - - it "should create a then step if one matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_then "then" - run_stories - - $story_mediator_spec_value.should == "then matched" - end - - it "should create a pending step if no 'then' step matches" do - @mediator.create_story "title", "narrative" - @mediator.create_scenario "scenario" - @mediator.create_then "no match" - mock_listener = stub_everything("listener") - mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") - @scenario_runner.add_listener mock_listener - run_stories - end - - it "should pass options to the stories it creates" do - @mediator = StoryMediator.new @step_group, @runner, :foo => :bar - @mediator.create_story "story title", "story narrative" - - run_stories - - @runner.stories.first[:foo].should == :bar - end - - end - - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb deleted file mode 100644 index 5efc8fd18..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_parser_spec.rb +++ /dev/null @@ -1,384 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - - describe StoryParser do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - end - - it "should parse no lines" do - @parser.parse([]) - end - - it "should ignore text before the first Story: begins" do - @story_mediator.should_not_receive(:create_scenario) - @story_mediator.should_not_receive(:create_given) - @story_mediator.should_not_receive(:create_when) - @story_mediator.should_not_receive(:create_then) - @story_mediator.should_receive(:create_story).with("simple addition", "") - @parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"]) - end - - it "should create a story" do - @story_mediator.should_receive(:create_story).with("simple addition", "") - @parser.parse(["Story: simple addition"]) - end - - it "should create a story when line has leading spaces" do - @story_mediator.should_receive(:create_story).with("simple addition", "") - @parser.parse([" Story: simple addition"]) - end - - it "should add a one line narrative to the story" do - @story_mediator.should_receive(:create_story).with("simple addition","narrative") - @parser.parse(["Story: simple addition","narrative"]) - end - - it "should add a multi line narrative to the story" do - @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3") - @parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"]) - end - - it "should exclude blank lines from the narrative" do - @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2") - @parser.parse(["Story: simple addition","narrative line 1", "", "line 2"]) - end - - it "should exclude Scenario from the narrative" do - @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2") - @story_mediator.should_receive(:create_scenario) - @parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"]) - end - - end - - describe StoryParser, "in Story state" do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - @story_mediator.stub!(:create_story) - end - - it "should create a second Story for Story" do - @story_mediator.should_receive(:create_story).with("number two","") - @parser.parse(["Story: s", "Story: number two"]) - end - - it "should include And in the narrative" do - @story_mediator.should_receive(:create_story).with("s","And foo") - @story_mediator.should_receive(:create_scenario).with("bar") - @parser.parse(["Story: s", "And foo", "Scenario: bar"]) - end - - it "should create a Scenario for Scenario" do - @story_mediator.should_receive(:create_scenario).with("number two") - @parser.parse(["Story: s", "Scenario: number two"]) - end - - it "should include Given in the narrative" do - @story_mediator.should_receive(:create_story).with("s","Given foo") - @story_mediator.should_receive(:create_scenario).with("bar") - @parser.parse(["Story: s", "Given foo", "Scenario: bar"]) - end - - it "should include Given: in the narrative" do - @story_mediator.should_receive(:create_story).with("s","Given: foo") - @story_mediator.should_receive(:create_scenario).with("bar") - @parser.parse(["Story: s", "Given: foo", "Scenario: bar"]) - end - - it "should include When in the narrative" do - @story_mediator.should_receive(:create_story).with("s","When foo") - @story_mediator.should_receive(:create_scenario).with("bar") - @parser.parse(["Story: s", "When foo", "Scenario: bar"]) - end - - it "should include Then in the narrative" do - @story_mediator.should_receive(:create_story).with("s","Then foo") - @story_mediator.should_receive(:create_scenario).with("bar") - @parser.parse(["Story: s", "Then foo", "Scenario: bar"]) - end - - it "should include other in the story" do - @story_mediator.should_receive(:create_story).with("s","narrative") - @parser.parse(["Story: s", "narrative"]) - end - end - - describe StoryParser, "in Scenario state" do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - @story_mediator.stub!(:create_story) - @story_mediator.stub!(:create_scenario) - end - - it "should create a Story for Story" do - @story_mediator.should_receive(:create_story).with("number two","") - @parser.parse(["Story: s", "Scenario: s", "Story: number two"]) - end - - it "should create a Scenario for Scenario" do - @story_mediator.should_receive(:create_scenario).with("number two") - @parser.parse(["Story: s", "Scenario: s", "Scenario: number two"]) - end - - it "should raise for And" do - lambda { - @parser.parse(["Story: s", "Scenario: s", "And second"]) - }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/) - end - - it "should create a Given for Given" do - @story_mediator.should_receive(:create_given).with("gift") - @parser.parse(["Story: s", "Scenario: s", "Given gift"]) - end - - it "should create a Given for Given:" do - @story_mediator.should_receive(:create_given).with("gift") - @parser.parse(["Story: s", "Scenario: s", "Given: gift"]) - end - - it "should create a GivenScenario for GivenScenario" do - @story_mediator.should_receive(:create_given_scenario).with("previous") - @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"]) - end - - it "should create a GivenScenario for GivenScenario:" do - @story_mediator.should_receive(:create_given_scenario).with("previous") - @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"]) - end - - it "should transition to Given state after GivenScenario" do - @story_mediator.stub!(:create_given_scenario) - @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"]) - @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState) - end - - it "should transition to Given state after GivenScenario:" do - @story_mediator.stub!(:create_given_scenario) - @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"]) - @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState) - end - - it "should create a When for When" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "When ever"]) - end - - it "should create a When for When:" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "When: ever"]) - end - - it "should create a Then for Then" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Then and there"]) - end - - it "should create a Then for Then:" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Then: and there"]) - end - - it "should ignore other" do - @parser.parse(["Story: s", "Scenario: s", "this is ignored"]) - end - end - - describe StoryParser, "in Given state" do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - @story_mediator.stub!(:create_story) - @story_mediator.stub!(:create_scenario) - @story_mediator.should_receive(:create_given).with("first") - end - - it "should create a Story for Story" do - @story_mediator.should_receive(:create_story).with("number two","") - @parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"]) - end - - it "should create a Scenario for Scenario" do - @story_mediator.should_receive(:create_scenario).with("number two") - @parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"]) - end - - it "should create a second Given for Given" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"]) - end - - it "should create a second Given for And" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"]) - end - - it "should create a second Given for And:" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"]) - end - - it "should create a When for When" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"]) - end - - it "should create a When for When:" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"]) - end - - it "should create a Then for Then" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"]) - end - - it "should create a Then for Then:" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"]) - end - - it "should ignore other" do - @parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"]) - end - end - - describe StoryParser, "in When state" do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - @story_mediator.stub!(:create_story) - @story_mediator.stub!(:create_scenario) - @story_mediator.should_receive(:create_given).with("first") - @story_mediator.should_receive(:create_when).with("else") - end - - it "should create a Story for Story" do - @story_mediator.should_receive(:create_story).with("number two","") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"]) - end - - it "should create a Scenario for Scenario" do - @story_mediator.should_receive(:create_scenario).with("number two") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"]) - end - - it "should create Given for Given" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"]) - end - - it "should create Given for Given:" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"]) - end - - it "should create a second When for When" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"]) - end - - it "should create a second When for When:" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"]) - end - - it "should create a second When for And" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"]) - end - - it "should create a second When for And:" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"]) - end - - it "should create a Then for Then" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"]) - end - - it "should create a Then for Then:" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"]) - end - - it "should ignore other" do - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"]) - end - end - - describe StoryParser, "in Then state" do - before(:each) do - @story_mediator = mock("story_mediator") - @parser = StoryParser.new(@story_mediator) - @story_mediator.stub!(:create_story) - @story_mediator.stub!(:create_scenario) - @story_mediator.should_receive(:create_given).with("first") - @story_mediator.should_receive(:create_when).with("else") - @story_mediator.should_receive(:create_then).with("what") - end - - it "should create a Story for Story" do - @story_mediator.should_receive(:create_story).with("number two","") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"]) - end - - it "should create a Scenario for Scenario" do - @story_mediator.should_receive(:create_scenario).with("number two") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"]) - end - - it "should create Given for Given" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"]) - end - - it "should create Given for Given:" do - @story_mediator.should_receive(:create_given).with("second") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"]) - end - - it "should create When for When" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"]) - end - - it "should create When for When:" do - @story_mediator.should_receive(:create_when).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"]) - end - - it "should create a Then for Then" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"]) - end - - it "should create a Then for Then:" do - @story_mediator.should_receive(:create_then).with("and there") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"]) - end - - it "should create a second Then for And" do - @story_mediator.should_receive(:create_then).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"]) - end - - it "should create a second Then for And:" do - @story_mediator.should_receive(:create_then).with("ever") - @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"]) - end - - it "should ignore other" do - @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "this is ignored"]) - end - end - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_runner_spec.rb deleted file mode 100644 index 0fc46405a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner/story_runner_spec.rb +++ /dev/null @@ -1,256 +0,0 @@ -require File.dirname(__FILE__) + '/../story_helper' - -module Spec - module Story - module Runner - describe StoryRunner do - it 'should collect all the stories' do - # given - story_runner = StoryRunner.new(stub('scenario_runner')) - - # when - story_runner.Story 'title1', 'narrative1' do end - story_runner.Story 'title2', 'narrative2' do end - stories = story_runner.stories - - # then - story_runner.should have(2).stories - stories.first.title.should == 'title1' - stories.first.narrative.should == 'narrative1' - stories.last.title.should == 'title2' - stories.last.narrative.should == 'narrative2' - end - - it 'should gather all the scenarios in the stories' do - # given - story_runner = StoryRunner.new(stub('scenario_runner')) - - # when - story_runner.Story "story1", "narrative1" do - Scenario "scenario1" do end - Scenario "scenario2" do end - end - story_runner.Story "story2", "narrative2" do - Scenario "scenario3" do end - end - scenarios = story_runner.scenarios - - # then - story_runner.should have(3).scenarios - scenarios[0].name.should == 'scenario1' - scenarios[1].name.should == 'scenario2' - scenarios[2].name.should == 'scenario3' - end - - # captures worlds passed into a ScenarioRunner - class ScenarioWorldCatcher - attr_accessor :worlds - def run(scenario, world) - (@worlds ||= []) << world - end - end - - it 'should run each scenario in a separate object' do - # given - scenario_world_catcher = ScenarioWorldCatcher.new - story_runner = StoryRunner.new(scenario_world_catcher) - story_runner.Story 'story', 'narrative' do - Scenario 'scenario1' do end - Scenario 'scenario2' do end - end - - # when - story_runner.run_stories - - # then - worlds = scenario_world_catcher.worlds - scenario_world_catcher.should have(2).worlds - worlds[0].should_not == worlds[1] - end - - it 'should use the provided world creator to create worlds' do - # given - stub_scenario_runner = stub_everything - mock_world_creator = mock('world creator') - story_runner = StoryRunner.new(stub_scenario_runner, mock_world_creator) - story_runner.Story 'story', 'narrative' do - Scenario 'scenario1' do end - Scenario 'scenario2' do end - end - - # expect - mock_world_creator.should_receive(:create).twice - - # when - story_runner.run_stories - - # then - end - - it 'should notify listeners of the scenario count when the run starts' do - # given - story_runner = StoryRunner.new(stub_everything) - mock_listener1 = stub_everything('listener1') - mock_listener2 = stub_everything('listener2') - story_runner.add_listener(mock_listener1) - story_runner.add_listener(mock_listener2) - - story_runner.Story 'story1', 'narrative1' do - Scenario 'scenario1' do end - end - story_runner.Story 'story2', 'narrative2' do - Scenario 'scenario2' do end - Scenario 'scenario3' do end - end - - # expect - mock_listener1.should_receive(:run_started).with(3) - mock_listener2.should_receive(:run_started).with(3) - - # when - story_runner.run_stories - - # then - end - - it 'should notify listeners when a story starts' do - # given - story_runner = StoryRunner.new(stub_everything) - mock_listener1 = stub_everything('listener1') - mock_listener2 = stub_everything('listener2') - story_runner.add_listener(mock_listener1) - story_runner.add_listener(mock_listener2) - - story_runner.Story 'story1', 'narrative1' do - Scenario 'scenario1' do end - end - story_runner.Story 'story2', 'narrative2' do - Scenario 'scenario2' do end - Scenario 'scenario3' do end - end - - # expect - mock_listener1.should_receive(:story_started).with('story1', 'narrative1') - mock_listener1.should_receive(:story_ended).with('story1', 'narrative1') - mock_listener2.should_receive(:story_started).with('story2', 'narrative2') - mock_listener2.should_receive(:story_ended).with('story2', 'narrative2') - - # when - story_runner.run_stories - - # then - end - - it 'should notify listeners when the run ends' do - # given - story_runner = StoryRunner.new(stub_everything) - mock_listener1 = stub_everything('listener1') - mock_listener2 = stub_everything('listener2') - story_runner.add_listener mock_listener1 - story_runner.add_listener mock_listener2 - story_runner.Story 'story1', 'narrative1' do - Scenario 'scenario1' do end - end - - # expect - mock_listener1.should_receive(:run_ended) - mock_listener2.should_receive(:run_ended) - - # when - story_runner.run_stories - - # then - end - - it 'should run a story in an instance of a specified class' do - # given - scenario_world_catcher = ScenarioWorldCatcher.new - story_runner = StoryRunner.new(scenario_world_catcher) - story_runner.Story 'title', 'narrative', :type => String do - Scenario 'scenario' do end - end - - # when - story_runner.run_stories - - # then - scenario_world_catcher.worlds[0].should be_kind_of(String) - scenario_world_catcher.worlds[0].should be_kind_of(World) - end - - it 'should pass initialization params through to the constructed instance' do - # given - scenario_world_catcher = ScenarioWorldCatcher.new - story_runner = StoryRunner.new(scenario_world_catcher) - story_runner.Story 'title', 'narrative', :type => Array, :args => [3] do - Scenario 'scenario' do end - end - - # when - story_runner.run_stories - - # then - scenario_world_catcher.worlds[0].should be_kind_of(Array) - scenario_world_catcher.worlds[0].size.should == 3 - end - - it 'should find a scenario in the current story by name' do - # given - story_runner = StoryRunner.new(ScenarioRunner.new) - $scenario = nil - - story_runner.Story 'title', 'narrative' do - Scenario 'first scenario' do - end - Scenario 'second scenario' do - $scenario = StoryRunner.scenario_from_current_story 'first scenario' - end - end - - # when - story_runner.run_stories - - # then - $scenario.name.should == 'first scenario' - end - - it "should clean the steps between stories" do - #given - story_runner = StoryRunner.new(ScenarioRunner.new) - result = mock 'result' - - step1 = Step.new('step') do - result.one - end - steps1 = StepGroup.new - steps1.add :when, step1 - - story_runner.Story 'title', 'narrative', :steps => steps1 do - Scenario 'first scenario' do - When 'step' - end - end - - step2 = Step.new('step') do - result.two - end - steps2 = StepGroup.new - steps2.add :when, step2 - - story_runner.Story 'title2', 'narrative', :steps => steps2 do - Scenario 'second scenario' do - When 'step' - end - end - - #then - result.should_receive(:one) - result.should_receive(:two) - - #when - story_runner.run_stories - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/runner_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/runner_spec.rb deleted file mode 100644 index 81e852640..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/runner_spec.rb +++ /dev/null @@ -1,106 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe Runner, "module" do - def dev_null - io = StringIO.new - def io.write(str) - str.to_s.size - end - return io - end - - before :each do - Kernel.stub!(:at_exit) - @stdout, $stdout = $stdout, dev_null - @argv = Array.new(ARGV) - @runner_module = Runner.dup - @world_creator = World.dup - @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil } - end - - after :each do - $stdout = @stdout - ARGV.replace @argv - @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil } - end - - it 'should wire up a singleton StoryRunner' do - @runner_module.story_runner.should_not be_nil - end - - it 'should set its options based on ARGV' do - # given - ARGV << '--dry-run' - - # when - options = @runner_module.run_options - - # then - options.dry_run.should be_true - end - - it 'should add a reporter to the runner classes' do - # given - story_runner = mock('story runner', :null_object => true) - scenario_runner = mock('scenario runner', :null_object => true) - world_creator = mock('world', :null_object => true) - - @runner_module::class_eval { @world_creator = world_creator } - @runner_module::StoryRunner.stub!(:new).and_return(story_runner) - @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) - - # expect - world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) - story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) - scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) - - # when - @runner_module.story_runner - end - - it 'should add a documenter to the runner classes if one is specified' do - # given - ARGV << "--format" << "html" - story_runner = mock('story runner', :null_object => true) - scenario_runner = mock('scenario runner', :null_object => true) - world_creator = mock('world', :null_object => true) - - @runner_module::class_eval { @world_creator = world_creator } - @runner_module::StoryRunner.stub!(:new).and_return(story_runner) - @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) - - # expect - world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) - story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) - scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) - - # when - @runner_module.story_runner - end - - it 'should add any registered listener to the runner classes' do - # given - ARGV << "--format" << "html" - story_runner = mock('story runner', :null_object => true) - scenario_runner = mock('scenario runner', :null_object => true) - world_creator = mock('world', :null_object => true) - - @runner_module::class_eval { @world_creator = world_creator } - @runner_module::StoryRunner.stub!(:new).and_return(story_runner) - @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) - - listener = Object.new - - # expect - world_creator.should_receive(:add_listener).with(listener) - story_runner.should_receive(:add_listener).with(listener) - scenario_runner.should_receive(:add_listener).with(listener) - - # when - @runner_module.register_listener listener - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/scenario_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/scenario_spec.rb deleted file mode 100644 index 0cf7aff30..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/scenario_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe Scenario do - it 'should not raise an error if no body is supplied' do - # given - story = StoryBuilder.new.to_story - - # when - error = exception_from do - Scenario.new story, 'name' - end - - # then - error.should be_nil - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb deleted file mode 100644 index dd28bfa26..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb +++ /dev/null @@ -1,157 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe StepGroup do - before(:each) do - @step_group = StepGroup.new - end - - it "should not find a matcher if empty" do - @step_group.find(:given, "this and that").should be_nil - end - - it "should create a given_scenario matcher" do - step = @step_group.given_scenario("this and that") {} - @step_group.find(:given_scenario, "this and that").should_not be_nil - @step_group.find(:given_scenario, "this and that").should equal(step) - end - - it "should create a given matcher" do - step = @step_group.given("this and that") {} - @step_group.find(:given, "this and that").should equal(step) - end - - it "should create a when matcher" do - step = @step_group.when("this and that") {} - @step_group.find(:when, "this and that").should equal(step) - end - - it "should create a them matcher" do - step = @step_group.then("this and that") {} - @step_group.find(:then, "this and that").should equal(step) - end - - it "should add a matcher object" do - step = Step.new("this and that") {} - @step_group.add(:given, step) - @step_group.find(:given, "this and that").should equal(step) - end - - it "should add it matchers to another StepGroup (with one given)" do - source = StepGroup.new - target = StepGroup.new - step = source.given("this and that") {} - source.add_to target - target.find(:given, "this and that").should equal(step) - end - - it "should add it matchers to another StepGroup (with some of each type)" do - source = StepGroup.new - target = StepGroup.new - given_scenario = source.given_scenario("1") {} - given = source.given("1") {} - when1 = source.when("1") {} - when2 = source.when("2") {} - then1 = source.then("1") {} - then2 = source.then("2") {} - then3 = source.then("3") {} - source.add_to target - target.find(:given_scenario, "1").should equal(given_scenario) - target.find(:given, "1").should equal(given) - target.find(:when, "1").should equal(when1) - target.find(:when, "2").should equal(when2) - target.find(:then, "1").should equal(then1) - target.find(:then, "2").should equal(then2) - target.find(:then, "3").should equal(then3) - end - - it "should append another collection" do - matchers_to_append = StepGroup.new - step = matchers_to_append.given("this and that") {} - @step_group << matchers_to_append - @step_group.find(:given, "this and that").should equal(step) - end - - it "should append several other collections" do - matchers_to_append = StepGroup.new - more_matchers_to_append = StepGroup.new - first_matcher = matchers_to_append.given("this and that") {} - second_matcher = more_matchers_to_append.given("and the other") {} - @step_group << matchers_to_append - @step_group << more_matchers_to_append - @step_group.find(:given, "this and that").should equal(first_matcher) - @step_group.find(:given, "and the other").should equal(second_matcher) - end - - it "should yield itself on initialization" do - begin - $step_group_spec_step = nil - matchers = StepGroup.new do |matchers| - $step_group_spec_step = matchers.given("foo") {} - end - $step_group_spec_step.matches?("foo").should be_true - ensure - $step_group_spec_step = nil - end - end - - it "should support defaults" do - class StepGroupSubclass < StepGroup - steps do |add| - add.given("foo") {} - end - end - StepGroupSubclass.new.find(:given, "foo").should_not be_nil - end - - it "should create a Given" do - sub = Class.new(StepGroup).new - step = sub.Given("foo") {} - sub.find(:given, "foo").should == step - end - - it "should create a When" do - sub = Class.new(StepGroup).new - step = sub.When("foo") {} - sub.find(:when, "foo").should == step - end - - it "should create a Then" do - sub = Class.new(StepGroup).new - step = sub.Then("foo") {} - sub.find(:then, "foo").should == step - end - - it "should create steps in a block" do - sub = Class.new(StepGroup).new do - Given("a given") {} - When("a when") {} - Then("a then") {} - end - sub.find(:given, "a given").should_not be_nil - sub.find(:when, "a when").should_not be_nil - sub.find(:then, "a then").should_not be_nil - end - - it "should clear itself" do - step = @step_group.given("this and that") {} - @step_group.clear - @step_group.find(:given, "this and that").should be_nil - end - - it "should tell you when it is empty" do - @step_group.should be_empty - end - - it "should tell you when it is not empty" do - @step_group.given("this and that") {} - @step_group.should_not be_empty - end - - it "should handle << nil" do - @step_group << nil - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/step_mother_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/step_mother_spec.rb deleted file mode 100644 index 64efd7a6a..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/step_mother_spec.rb +++ /dev/null @@ -1,72 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe StepMother do - it 'should store a step by name and type' do - # given - step_mother = StepMother.new - step = Step.new("a given", &lambda {}) - step_mother.store(:given, step) - - # when - found = step_mother.find(:given, "a given") - - # then - found.should == step - end - - it 'should NOT raise an error if a step is missing' do - # given - step_mother = StepMother.new - - # then - lambda do - # when - step_mother.find(:given, "doesn't exist") - end.should_not raise_error - end - - it "should create a default step which raises a pending error" do - # given - step_mother = StepMother.new - - # when - step = step_mother.find(:given, "doesn't exist") - - # then - step.should be_an_instance_of(Step) - - lambda do - step.perform(Object.new, "doesn't exist") - end.should raise_error(Spec::Example::ExamplePendingError, /Unimplemented/) - end - - it 'should clear itself' do - # given - step_mother = StepMother.new - step = Step.new("a given") do end - step_mother.store(:given, step) - - # when - step_mother.clear - - # then - step_mother.should be_empty - end - - it "should use assigned steps" do - step_mother = StepMother.new - - step = Step.new('step') {} - step_group = StepGroup.new - step_group.add(:given, step) - - step_mother.use(step_group) - - step_mother.find(:given, "step").should equal(step) - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/step_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/step_spec.rb deleted file mode 100644 index ec6628809..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/step_spec.rb +++ /dev/null @@ -1,178 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe Step, "matching" do - it "should match a text string" do - step = Step.new("this text") {} - step.matches?("this text").should be_true - end - - it "should not match a text string that does not start the same" do - step = Step.new("this text") {} - step.matches?("Xthis text").should be_false - end - - it "should not match a text string that does not end the same" do - step = Step.new("this text") {} - step.matches?("this textX").should be_false - end - - it "should match a text string with a param" do - step = Step.new("this $param text") {} - step.matches?("this anything text").should be_true - end - - it "should not be greedy" do - step = Step.new("enter $value for $key") {} - step.parse_args("enter 3 for keys for a piano").should == ['3','keys for a piano'] - end - - it "should match a text string with 3 params" do - step = Step.new("1 $one 2 $two 3 $three 4") {} - step.matches?("1 a 2 b 3 c 4").should be_true - end - - it "should match a text string with a param at the beginning" do - step = Step.new("$one 2 3") {} - step.matches?("a 2 3").should be_true - end - - it "should match a text string with a param at the end" do - step = Step.new("1 2 $three") {} - step.matches?("1 2 c").should be_true - end - - it "should not match a different string" do - step = Step.new("this text") {} - step.matches?("other text").should be_false - end - - it "should match a regexp" do - step = Step.new(/this text/) {} - step.matches?("this text").should be_true - end - - it "should match a regexp with a match group" do - step = Step.new(/this (.*) text/) {} - step.matches?("this anything text").should be_true - end - - it "should not match a non matching regexp" do - step = Step.new(/this (.*) text/) {} - step.matches?("other anything text").should be_false - end - - it "should not get bogged down by parens in strings" do - step = Step.new("before () after") {} - step.matches?("before () after").should be_true - end - - it "should match any option of an alteration" do - step = Step.new(/(he|she) is cool/) {} - step.matches?("he is cool").should be_true - step.matches?("she is cool").should be_true - end - - it "should match alteration as well as a variable" do - step = Step.new(/(he|she) is (.*)/) {} - step.matches?("he is cool").should be_true - step.parse_args("he is cool").should == ['he', 'cool'] - end - - end - - describe Step do - it "should make complain with no block" do - lambda { - step = Step.new("foo") - }.should raise_error - end - - it "should perform itself on an object" do - # given - $instance = nil - step = Step.new 'step' do - $instance = self - end - instance = Object.new - - # when - step.perform(instance, "step") - - # then - $instance.should == instance - end - - it "should perform itself with one parameter with match expression" do - # given - $result = nil - step = Step.new 'an account with $count dollars' do |count| - $result = count - end - instance = Object.new - - # when - args = step.parse_args("an account with 3 dollars") - step.perform(instance, *args) - - # then - $result.should == "3" - end - - it "should perform itself with one parameter without a match expression" do - # given - $result = nil - step = Step.new 'an account with a balance of' do |amount| - $result = amount - end - instance = Object.new - - # when - step.perform(instance, 20) - - # then - $result.should == 20 - end - - it "should perform itself with 2 parameters" do - # given - $account_type = nil - $amount = nil - step = Step.new 'a $account_type account with $amount dollars' do |account_type, amount| - $account_type = account_type - $amount = amount - end - instance = Object.new - - # when - args = step.parse_args("a savings account with 3 dollars") - step.perform(instance, *args) - - # then - $account_type.should == "savings" - $amount.should == "3" - end - - it "should perform itself when defined with a regexp with 2 parameters" do - # given - $pronoun = nil - $adjective = nil - step = Step.new /(he|she) is (.*)/ do |pronoun, adjective| - $pronoun = pronoun - $adjective = adjective - end - instance = Object.new - - # when - args = step.parse_args("he is cool") - step.perform(instance, *args) - - # then - $pronoun.should == "he" - $adjective.should == "cool" - end - - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/story_helper.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/story_helper.rb deleted file mode 100644 index bb906f255..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/story_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -require File.dirname(__FILE__) + '/../../spec_helper' -require File.dirname(__FILE__) + '/builders' diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/story_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/story_spec.rb deleted file mode 100644 index 21257e9a7..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/story_spec.rb +++ /dev/null @@ -1,86 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -module Spec - module Story - describe Story do - it 'should run itself in a given object' do - # given - $instance = nil - story = Story.new 'title', 'narrative' do - $instance = self - end - object = Object.new - - # when - story.run_in(object) - - # then - $instance.should be(object) - end - - it 'should not raise an error if no block is supplied' do - # when - error = exception_from do - Story.new 'title', 'narrative' - end - - # then - error.should be_nil - end - - it "should raise when error raised running in another object" do - #given - story = Story.new 'title', 'narrative' do - raise "this is raised in the story" - end - object = Object.new - - # when/then - lambda do - story.run_in(object) - end.should raise_error - end - - it "should use the steps it is told to using a StepGroup" do - story = Story.new("title", "narrative", :steps => steps = StepGroup.new) do end - assignee = mock("assignee") - assignee.should_receive(:use).with(steps) - story.assign_steps_to(assignee) - end - - it "should use the steps it is told to using a key" do - begin - orig_rspec_story_steps = $rspec_story_steps - $rspec_story_steps = StepGroupHash.new - $rspec_story_steps[:foo] = steps = Object.new - - story = Story.new("title", "narrative", :steps_for => :foo) do end - assignee = mock("assignee") - - assignee.should_receive(:use).with(steps) - story.assign_steps_to(assignee) - ensure - $rspec_story_steps = orig_rspec_story_steps - end - end - - it "should use the steps it is told to using multiple keys" do - begin - orig_rspec_story_steps = $rspec_story_steps - $rspec_story_steps = StepGroupHash.new - $rspec_story_steps[:foo] = foo_steps = Object.new - $rspec_story_steps[:bar] = bar_steps = Object.new - - story = Story.new("title", "narrative", :steps_for => [:foo, :bar]) do end - assignee = mock("assignee") - - assignee.should_receive(:use).with(foo_steps) - assignee.should_receive(:use).with(bar_steps) - story.assign_steps_to(assignee) - ensure - $rspec_story_steps = orig_rspec_story_steps - end - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/world_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/world_spec.rb deleted file mode 100644 index 85410f612..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/story/world_spec.rb +++ /dev/null @@ -1,416 +0,0 @@ -require File.dirname(__FILE__) + '/story_helper' - -require 'spec/story' - -module Spec - module Story - describe World do - before :each do - World.listeners.clear - end - - after :each do - World.listeners.clear - World.step_mother.clear - end - - it 'should create an object that mixes in a World' do - # when - obj = World::create - - # then - obj.should be_kind_of(World) - end - - it 'should create a World from any object type' do - # when - obj = World::create String - - # then - obj.should be_kind_of(String) - obj.should be_kind_of(World) - end - - it 'should pass arguments to #new when creating an object of a specified type that mixes in a world' do - # given - Thing = Struct.new(:name, :age) - - # when - obj = World::create Thing, "David", "I'm not telling" - - # then - obj.should be_an_instance_of(Thing) - obj.name.should == "David" - obj.age.should == "I'm not telling" - obj.should be_kind_of(World) - end - - def ensure_world_executes_step(&block) - # given - obj = World::create - $step_ran = false - - # when - obj.instance_eval(&block) - - # then - $step_ran.should be_true - end - - it 'should execute a Given, When or Then step' do - ensure_world_executes_step do - Given 'a given' do - $step_ran = true - end - end - - ensure_world_executes_step do - When 'an event' do - $step_ran = true - end - end - - ensure_world_executes_step do - Then 'an outcome' do - $step_ran = true - end - end - end - - it 'should interpret Given... And... as multiple givens' do - # given - world = World.create - $steps = [] - - # when - world.instance_eval do - Given 'step 1' do - $steps << 1 - end - And 'step 2' do - $steps << 2 - end - end - - # then - $steps.should == [1,2] - World.step_mother.find(:given, 'step 1').should_not be_nil - World.step_mother.find(:given, 'step 2').should_not be_nil - end - - it 'should interpret When... And... as multiple events' do - # given - world = World.create - $steps = [] - - # when - world.instance_eval do - When 'step 1' do - $steps << 1 - end - And 'step 2' do - $steps << 2 - end - end - - # then - $steps.should == [1,2] - World.step_mother.find(:when, 'step 1').should_not be_nil - World.step_mother.find(:when, 'step 2').should_not be_nil - end - - it 'should interpret Then... And... as multiple outcomes' do - # given - world = World.create - $steps = [] - - # when - world.instance_eval do - Then 'step 1' do - $steps << 1 - end - And 'step 2' do - $steps << 2 - end - end - - # then - $steps.should == [1,2] - World.step_mother.find(:then, 'step 1').should_not be_nil - World.step_mother.find(:then, 'step 2').should_not be_nil - end - - it 'should reuse a given across scenarios' do - # given - $num_invoked = 0 - a_world = World::create - a_world.instance_eval do - Given 'a given' do - $num_invoked += 1 - end - end - another_world = World::create - - # when - another_world.instance_eval do - Given 'a given' # without a body - end - - # then - $num_invoked.should == 2 - end - - it 'should reuse an event across scenarios' do - # given - $num_invoked = 0 - a_world = World::create - a_world.instance_eval do - When 'an event' do - $num_invoked += 1 - end - end - - another_world = World::create - - # when - another_world.instance_eval do - When 'an event' # without a body - end - - # then - $num_invoked.should == 2 - end - - it 'should reuse an outcome across scenarios' do - # given - $num_invoked = 0 - a_world = World::create - a_world.instance_eval do - Then 'an outcome' do - $num_invoked += 1 - end - end - - another_world = World::create - - # when - another_world.instance_eval do - Then 'an outcome' # without a body - end - - # then - $num_invoked.should == 2 - end - - it 'should preserve instance variables between steps within a scenario' do - # given - world = World::create - $first = nil - $second = nil - - # when - world.instance_eval do - Given 'given' do - @first = 'first' - end - When 'event' do - @second = @first # from given - end - Then 'outcome' do - $first = @first # from given - $second = @second # from event - end - end - - # then - $first.should == 'first' - $second.should == 'first' - end - - it 'should invoke a reused step in the new object instance' do - # given - $instances = [] - $debug = true - world1 = World.create - world1.instance_eval do - Given 'a given' do - $instances << self.__id__ - end - end - world2 = World.create - - # when - world2.instance_eval do - Given 'a given' # reused - Then 'an outcome' do - $instances << __id__ - end - end - $debug = false - # then - $instances.should == [ world1.__id__, world2.__id__, world2.__id__ ] - end - - def ensure_world_collects_error(expected_error, &block) - # given - world = World.create - # $error = nil - - # when - world.start_collecting_errors - world.instance_eval(&block) - - # then - world.should have(1).errors - world.errors[0].should be_kind_of(expected_error) - end - - it 'should collect a failure from a Given step' do - ensure_world_collects_error RuntimeError do - Given 'a given' do - raise RuntimeError, "oops" - end - end - end - - it 'should collect a failure from a When step' do - ensure_world_collects_error RuntimeError do - When 'an event' do - raise RuntimeError, "oops" - end - end - end - - it 'should collect a failure from a Then step' do - ensure_world_collects_error RuntimeError do - Then 'an outcome' do - raise RuntimeError, "oops" - end - end - end - - it 'should inform listeners when it runs a Given, When or Then step' do - # given - world = World.create - mock_listener1 = mock('listener1') - mock_listener2 = mock('listener2') - World.add_listener(mock_listener1) - World.add_listener(mock_listener2) - - # expect - mock_listener1.should_receive(:step_succeeded).with(:given, 'a context') - mock_listener1.should_receive(:step_succeeded).with(:when, 'an event') - mock_listener1.should_receive(:step_succeeded).with(:then, 'an outcome') - - mock_listener2.should_receive(:step_succeeded).with(:given, 'a context') - mock_listener2.should_receive(:step_succeeded).with(:when, 'an event') - mock_listener2.should_receive(:step_succeeded).with(:then, 'an outcome') - - # when - world.instance_eval do - Given 'a context' do end - When 'an event' do end - Then 'an outcome' do end - end - - # then - end - - it 'should tell listeners but not execute the step in dry-run mode' do - # given - Runner.stub!(:dry_run).and_return(true) - mock_listener = mock('listener') - World.add_listener(mock_listener) - $step_invoked = false - world = World.create - - # expect - mock_listener.should_receive(:step_succeeded).with(:given, 'a context') - - # when - world.instance_eval do - Given 'a context' do - $step_invoked = true - end - end - - # then - $step_invoked.should be(false) - end - - it 'should suppress listeners while it runs a GivenScenario' do - # given - $scenario_ran = false - - scenario = ScenarioBuilder.new.name('a scenario').to_scenario do - $scenario_ran = true - Given 'given' do end - When 'event' do end - Then 'outcome' do end - end - - given_scenario = GivenScenario.new('a scenario') - Runner::StoryRunner.should_receive(:scenario_from_current_story). - with('a scenario').and_return(scenario) - - world = World.create - listener = mock('listener') - World.add_listener(listener) - - # expect - listener.should_receive(:found_scenario).with(:'given scenario', 'a scenario') - listener.should_receive(:step_succeeded).never.with(:given, 'given') - listener.should_receive(:step_succeeded).never.with(:when, 'event') - listener.should_receive(:step_succeeded).never.with(:then, 'outcome') - - # when - world.GivenScenario 'a scenario' - - # then - $scenario_ran.should be_true - end - - it 'should interpret GivenScenario... And... as multiple givens' do - # given - world = World.create - $steps = [] - - scenario = ScenarioBuilder.new.name('a scenario').to_scenario do - $steps << 1 - end - Runner::StoryRunner.should_receive(:scenario_from_current_story). - with('a scenario').and_return(scenario) - - # when - world.instance_eval do - GivenScenario 'a scenario' - And 'step 2' do - $steps << 2 - end - end - - # then - $steps.should == [1,2] - World.step_mother.find(:given, 'step 2').should_not be_nil - end - - it 'should provide rspec matchers' do - # given - world = World.create - - # then - world.instance_eval do - 'hello'.should match(/^hello$/) - end - end - - it "should use assigned matchers" do - world = World.create - - World.should_receive(:use).with(steps = Object.new) - - World.use(steps) - end - end - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec/translator_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/translator_spec.rb deleted file mode 100644 index 01293d9ee..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec/translator_spec.rb +++ /dev/null @@ -1,265 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper.rb' -require 'spec/translator' - -describe "Translator" do - before do - @t = Spec::Translator.new - end - - it "should translate files" do - from = File.dirname(__FILE__) + '/..' - to = "#{Dir.tmpdir}/translated_specs" - @t.translate_dir(from, to) - end - - it "should translate context_setup do" do - @t.translate_line( - "context_setup do\n" - ).should eql( - "before(:all) do\n" - ) - end - - it "should translate context_setup {foo}" do - @t.translate_line( - "context_setup {foo}\n" - ).should eql( - "before(:all) {foo}\n" - ) - end - - it "should translate context ' to describe '" do - @t.translate_line( - "context 'Translator' do\n" - ).should eql( - "describe 'Translator' do\n" - ) - end - - it 'should translate context " to describe "' do - @t.translate_line( - 'context "Translator"' - ).should eql( - 'describe "Translator"' - ) - end - - it 'should translate spaces then context " to describe "' do - @t.translate_line( - ' context "Translator"' - ).should eql( - ' describe "Translator"' - ) - end - - it "should not translate context=foo" do - @t.translate_line(' context=foo').should eql(' context=foo') - end - - it "should not translate context = foo" do - @t.translate_line(' context = foo').should eql(' context = foo') - end - - it "should not translate context = foo" do - @t.translate_line(' context = foo').should eql(' context = foo') - end - - it "should translate should_be_close" do - @t.translate_line('5.0.should_be_close(5.0, 0.5)').should eql('5.0.should be_close(5.0, 0.5)') - end - - it "should translate should_not_raise" do - @t.translate_line('lambda { self.call }.should_not_raise').should eql('lambda { self.call }.should_not raise_error') - end - - it "should translate should_throw" do - @t.translate_line('lambda { self.call }.should_throw').should eql('lambda { self.call }.should throw_symbol') - end - - it "should not translate 0.9 should_not" do - @t.translate_line('@target.should_not @matcher').should eql('@target.should_not @matcher') - end - - it "should leave should_not_receive" do - @t.translate_line('@mock.should_not_receive(:not_expected).with("unexpected text")').should eql('@mock.should_not_receive(:not_expected).with("unexpected text")') - end - - it "should leave should_receive" do - @t.translate_line('@mock.should_receive(:not_expected).with("unexpected text")').should eql('@mock.should_receive(:not_expected).with("unexpected text")') - end - - it "should translate multi word predicates" do - @t.translate_line('foo.should_multi_word_predicate').should eql('foo.should be_multi_word_predicate') - end - - it "should translate multi word predicates prefixed with be" do - @t.translate_line('foo.should_be_multi_word_predicate').should eql('foo.should be_multi_word_predicate') - end - - it "should translate be(expected) to equal(expected)" do - @t.translate_line('foo.should_be :cool').should eql('foo.should equal :cool') - end - - it "should translate instance_of" do - @t.translate_line('5.should_be_an_instance_of(Integer)').should eql('5.should be_an_instance_of(Integer)') - end - - it "should translate should_be <" do - @t.translate_line('3.should_be < 4').should eql('3.should be < 4') - end - - it "should translate should_be <=" do - @t.translate_line('3.should_be <= 4').should eql('3.should be <= 4') - end - - it "should translate should_be >=" do - @t.translate_line('4.should_be >= 3').should eql('4.should be >= 3') - end - - it "should translate should_be >" do - @t.translate_line('4.should_be > 3').should eql('4.should be > 3') - end - - it "should translate should_be_happy" do - @t.translate_line("4.should_be_happy").should eql("4.should be_happy") - end - - it "should translate custom method taking regexp with parenthesis" do - @t.translate_line("@browser.should_contain_text(/Sn.rrunger og annet rusk/)").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)") - end - - it "should translate custom method taking regexp without parenthesis" do - @t.translate_line("@browser.should_contain_text /Sn.rrunger og annet rusk/\n").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)\n") - end - - it "should translate should_not_be_nil" do - @t.translate_line("foo.should_not_be_nil\n").should eql("foo.should_not be_nil\n") - end - - it "should translate kind of" do - @t.translate_line('@object.should_be_kind_of(MessageExpectation)').should( - eql('@object.should be_kind_of(MessageExpectation)')) - end - - it "should translate should_be_true" do - @t.translate_line("foo.should_be_true\n").should eql("foo.should be_true\n") - end - - # [#9674] spec_translate incorrectly handling shoud_match, when regexp in a var, in a block - # http://rubyforge.org/tracker/?func=detail&atid=3149&aid=9674&group_id=797 - it "should translate should_match on a regexp, in a var, in a block" do - @t.translate_line("collection.each { |c| c.should_match a_regexp_in_a_var }\n").should eql("collection.each { |c| c.should match(a_regexp_in_a_var) }\n") - @t.translate_line("collection.each{|c| c.should_match a_regexp_in_a_var}\n").should eql("collection.each{|c| c.should match(a_regexp_in_a_var) }\n") - end - - # From Rubinius specs - it "should translate close_to without parens" do - @t.translate_line("end.should_be_close 3.14159_26535_89793_23846, TOLERANCE\n").should eql("end.should be_close(3.14159_26535_89793_23846, TOLERANCE)\n") - end - - # [#9882] 0.9 Beta 1 - translator bugs - # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 - it "should support symbol arguments" do - @t.translate_line( - "lambda { sequence.parse('bar') }.should_throw :ZeroWidthParseSuccess\n" - ).should eql( - "lambda { sequence.parse('bar') }.should throw_symbol(:ZeroWidthParseSuccess)\n" - ) - end - - # [#9882] 0.9 Beta 1 - translator bugs - # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 - it "should support instance var arguments" do - @t.translate_line( - "a.should_eql @local" - ).should eql( - "a.should eql(@local)" - ) - end - - # [#9882] 0.9 Beta 1 - translator bugs - # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 - it "should support lambdas as expecteds" do - @t.translate_line( - "@parslet.should_not_eql lambda { nil }.to_parseable" - ).should eql( - "@parslet.should_not eql(lambda { nil }.to_parseable)" - ) - end - - # [#9882] 0.9 Beta 1 - translator bugs - # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 - it "should support fully qualified names" do - @t.translate_line( - "results.should_be_kind_of SimpleASTLanguage::Identifier" - ).should eql( - "results.should be_kind_of(SimpleASTLanguage::Identifier)" - ) - end - - # [#9882] 0.9 Beta 1 - translator bugs - # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 - # it "should leave whitespace between expression and comments" do - # @t.translate_line( - # "lambda { @instance.foo = foo }.should_raise NoMethodError # no writer defined" - # ).should eql( - # "lambda { @instance.foo = foo }.should raise_error(NoMethodError) # no writer defined" - # ) - # end - - it "should translate redirects" do - @t.translate_line( - "controller.should_redirect_to 'http://not_existing_domain_for_novalis.test.host/404.html'" - ).should eql( - "controller.should redirect_to('http://not_existing_domain_for_novalis.test.host/404.html')" - ) - end - - it "should translate :any_args" do - @t.translate_line( - "mock.should_receive(:foo).with(:any_args)" - ).should eql( - "mock.should_receive(:foo).with(any_args)" - ) - end - - it "should translate :anything" do - @t.translate_line( - "mock.should_receive(:foo).with(:anything)" - ).should eql( - "mock.should_receive(:foo).with(anything)" - ) - end - - it "should translate :boolean" do - @t.translate_line( - "mock.should_receive(:foo).with(:boolean)" - ).should eql( - "mock.should_receive(:foo).with(boolean)" - ) - end - - it "should translate :no_args" do - @t.translate_line( - "mock.should_receive(:foo).with(:no_args)" - ).should eql( - "mock.should_receive(:foo).with(no_args)" - ) - end - - it "should translate :numeric" do - @t.translate_line( - "mock.should_receive(:foo).with(:numeric)" - ).should eql( - "mock.should_receive(:foo).with(an_instance_of(Numeric))" - ) - end - - it "should translate :string" do - @t.translate_line( - "mock.should_receive(:foo).with(:string)" - ).should eql( - "mock.should_receive(:foo).with(an_instance_of(String))" - ) - end -end diff --git a/vendor/gems/rspec-1.1.2/spec/spec_helper.rb b/vendor/gems/rspec-1.1.2/spec/spec_helper.rb deleted file mode 100644 index 1318176d5..000000000 --- a/vendor/gems/rspec-1.1.2/spec/spec_helper.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'stringio' - -dir = File.dirname(__FILE__) -lib_path = File.expand_path("#{dir}/../lib") -$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path) -$_spec_spec = true # Prevents Kernel.exit in various places - -require 'spec' -require 'spec/mocks' -require 'spec/story' -spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes") -require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path) -require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default' - -module Spec - module Matchers - def fail - raise_error(Spec::Expectations::ExpectationNotMetError) - end - - def fail_with(message) - raise_error(Spec::Expectations::ExpectationNotMetError, message) - end - - class Pass - def matches?(proc, &block) - begin - proc.call - true - rescue Exception => @error - false - end - end - - def failure_message - @error.message + "\n" + @error.backtrace.join("\n") - end - end - - def pass - Pass.new - end - - class CorrectlyOrderedMockExpectation - def initialize(&event) - @event = event - end - - def expect(&expectations) - expectations.call - @event.call - end - end - - def during(&block) - CorrectlyOrderedMockExpectation.new(&block) - end - end -end - -class NonStandardError < Exception; end - -module Custom - class ExampleGroupRunner - attr_reader :options, :arg - def initialize(options, arg) - @options, @arg = options, arg - end - - def load_files(files) - end - - def run - end - end -end - -def exception_from(&block) - exception = nil - begin - yield - rescue StandardError => e - exception = e - end - exception -end - -describe "sandboxed rspec_options", :shared => true do - attr_reader :options - - before(:all) do - @original_rspec_options = $rspec_options - end - - before(:each) do - @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) - $rspec_options = options - end - - after do - $rspec_options = @original_rspec_options - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/all.rb b/vendor/gems/rspec-1.1.2/stories/all.rb deleted file mode 100644 index c2428fdf8..000000000 --- a/vendor/gems/rspec-1.1.2/stories/all.rb +++ /dev/null @@ -1,5 +0,0 @@ -require File.join(File.dirname(__FILE__), *%w[helper]) - -["example_groups","interop"].each do |dir| - require File.join(File.dirname(__FILE__), "#{dir}/stories") -end diff --git a/vendor/gems/rspec-1.1.2/stories/example_groups/autogenerated_docstrings b/vendor/gems/rspec-1.1.2/stories/example_groups/autogenerated_docstrings deleted file mode 100644 index b3ff68998..000000000 --- a/vendor/gems/rspec-1.1.2/stories/example_groups/autogenerated_docstrings +++ /dev/null @@ -1,45 +0,0 @@ -Story: autogenerated docstrings - - As an RSpec user - I want examples to generate their own names - So that I can reduce duplication between example names and example code - - Scenario: run passing examples with ruby - Given the file ../../examples/pure/autogenerated_docstrings_example.rb - - When I run it with the ruby interpreter -fs - - Then the stdout should match /should equal 5/ - And the stdout should match /should be < 5/ - And the stdout should match /should include "a"/ - And the stdout should match /should respond to #size/ - - Scenario: run failing examples with ruby - Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb - - When I run it with the ruby interpreter -fs - - Then the stdout should match /should equal 2/ - And the stdout should match /should be > 5/ - And the stdout should match /should include "b"/ - And the stdout should match /should not respond to #size/ - - Scenario: run passing examples with spec - Given the file ../../examples/pure/autogenerated_docstrings_example.rb - - When I run it with the spec script -fs - - Then the stdout should match /should equal 5/ - And the stdout should match /should be < 5/ - And the stdout should match /should include "a"/ - And the stdout should match /should respond to #size/ - - Scenario: run failing examples with spec - Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb - - When I run it with the spec script -fs - - Then the stdout should match /should equal 2/ - And the stdout should match /should be > 5/ - And the stdout should match /should include "b"/ - And the stdout should match /should not respond to #size/ diff --git a/vendor/gems/rspec-1.1.2/stories/example_groups/example_group_with_should_methods b/vendor/gems/rspec-1.1.2/stories/example_groups/example_group_with_should_methods deleted file mode 100644 index 3d2bc61eb..000000000 --- a/vendor/gems/rspec-1.1.2/stories/example_groups/example_group_with_should_methods +++ /dev/null @@ -1,17 +0,0 @@ -Story: Spec::ExampleGroup with should methods - - As an RSpec adopter accustomed to classes and methods - I want to use should_* methods in an ExampleGroup - So that I use RSpec with classes and methods that look more like RSpec examples - - Scenario: Run with ruby - Given the file spec/example_group_with_should_methods.rb - When I run it with the ruby interpreter - Then the exit code should be 256 - And the stdout should match "2 examples, 1 failure" - - Scenario: Run with spec - Given the file spec/example_group_with_should_methods.rb - When I run it with the spec script - Then the exit code should be 256 - And the stdout should match "2 examples, 1 failure" diff --git a/vendor/gems/rspec-1.1.2/stories/example_groups/nested_groups b/vendor/gems/rspec-1.1.2/stories/example_groups/nested_groups deleted file mode 100644 index ede978563..000000000 --- a/vendor/gems/rspec-1.1.2/stories/example_groups/nested_groups +++ /dev/null @@ -1,17 +0,0 @@ -Story: Nested example groups - - As an RSpec user - I want to nest examples groups - So that I can better organize my examples - - Scenario: Run with ruby - Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb - When I run it with the ruby interpreter -fs - Then the stdout should match /Stack \(empty\)/ - And the stdout should match /Stack \(full\)/ - - Scenario: Run with ruby - Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb - When I run it with the spec script -fs - Then the stdout should match /Stack \(empty\)/ - And the stdout should match /Stack \(full\)/ diff --git a/vendor/gems/rspec-1.1.2/stories/example_groups/output b/vendor/gems/rspec-1.1.2/stories/example_groups/output deleted file mode 100644 index 4947bdcaf..000000000 --- a/vendor/gems/rspec-1.1.2/stories/example_groups/output +++ /dev/null @@ -1,25 +0,0 @@ -Story: Getting correct output - - As an RSpec user - I want to see output only once - So that I don't get confused - - Scenario: Run with ruby - Given the file spec/simple_spec.rb - When I run it with the ruby interpreter - Then the exit code should be 0 - And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m - And the stdout should match "1 example, 0 failures" - - Scenario: Run with CommandLine object - Given the file spec/simple_spec.rb - When I run it with the CommandLine object - Then the exit code should be 0 - And the stdout should not match "Loaded suite" - And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m - And the stdout should match "1 example, 0 failures" - - Scenario: Tweak backtrace - Given the file stories/failing_story.rb - When I run it with the ruby interpreter - Then the stdout should not match /\/lib\/spec\// diff --git a/vendor/gems/rspec-1.1.2/stories/example_groups/stories.rb b/vendor/gems/rspec-1.1.2/stories/example_groups/stories.rb deleted file mode 100644 index e45882a93..000000000 --- a/vendor/gems/rspec-1.1.2/stories/example_groups/stories.rb +++ /dev/null @@ -1,7 +0,0 @@ -require File.join(File.dirname(__FILE__), *%w[.. helper]) - -with_steps_for :running_rspec do - Dir["#{File.dirname(__FILE__)}/*"].each do |file| - run file if File.file?(file) && !(file =~ /\.rb$/) - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/helper.rb b/vendor/gems/rspec-1.1.2/stories/helper.rb deleted file mode 100644 index d9a105e76..000000000 --- a/vendor/gems/rspec-1.1.2/stories/helper.rb +++ /dev/null @@ -1,6 +0,0 @@ -$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../lib") -require 'spec' -require 'tempfile' -require File.join(File.dirname(__FILE__), *%w[resources matchers smart_match]) -require File.join(File.dirname(__FILE__), *%w[resources helpers story_helper]) -require File.join(File.dirname(__FILE__), *%w[resources steps running_rspec]) diff --git a/vendor/gems/rspec-1.1.2/stories/interop/examples_and_tests_together b/vendor/gems/rspec-1.1.2/stories/interop/examples_and_tests_together deleted file mode 100644 index 6583f89c6..000000000 --- a/vendor/gems/rspec-1.1.2/stories/interop/examples_and_tests_together +++ /dev/null @@ -1,30 +0,0 @@ -Story: Spec and test together - - As an RSpec adopter with existing Test::Unit tests - I want to run a few specs alongside my existing Test::Unit tests - So that I can experience a smooth, gradual migration path - - Scenario: Run with ruby - Given the file test/spec_and_test_together.rb - - When I run it with the ruby interpreter -fs - - Then the exit code should be 256 - And the stdout should match "ATest" - And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'" - And the stdout should match "'An Example should fail with should' FAILED" - And the stdout should match "10 examples, 6 failures" - And the stdout should match /expected: 40,\s*got: 4/m - And the stdout should match /expected: 50,\s*got: 5/m - Scenario: Run with spec - Given the file test/spec_and_test_together.rb - - When I run it with the spec script -fs - - Then the exit code should be 256 - Ands the stdout should match "ATest" - And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'" - And the stdout should match "'An Example should fail with should' FAILED" - And the stdout should match "10 examples, 6 failures" - And the stdout should match /expected: 40,\s*got: 4/m - And the stdout should match /expected: 50,\s*got: 5/m diff --git a/vendor/gems/rspec-1.1.2/stories/interop/stories.rb b/vendor/gems/rspec-1.1.2/stories/interop/stories.rb deleted file mode 100644 index e45882a93..000000000 --- a/vendor/gems/rspec-1.1.2/stories/interop/stories.rb +++ /dev/null @@ -1,7 +0,0 @@ -require File.join(File.dirname(__FILE__), *%w[.. helper]) - -with_steps_for :running_rspec do - Dir["#{File.dirname(__FILE__)}/*"].each do |file| - run file if File.file?(file) && !(file =~ /\.rb$/) - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/interop/test_case_with_should_methods b/vendor/gems/rspec-1.1.2/stories/interop/test_case_with_should_methods deleted file mode 100644 index 31f28d32e..000000000 --- a/vendor/gems/rspec-1.1.2/stories/interop/test_case_with_should_methods +++ /dev/null @@ -1,17 +0,0 @@ -Story: Test::Unit::TestCase extended by rspec with should methods - - As an RSpec adopter with existing Test::Unit tests - I want to use should_* methods in a Test::Unit::TestCase - So that I use RSpec with classes and methods that look more like RSpec examples - - Scenario: Run with ruby - Given the file test/test_case_with_should_methods.rb - When I run it with the ruby interpreter - Then PENDING the exit code should be 256 - And the stdout should match "5 examples, 3 failures" - - Scenario: Run with spec - Given the file test/test_case_with_should_methods.rb - When I run it with the spec script - Then the exit code should be 256 - And the stdout should match "5 examples, 3 failures" diff --git a/vendor/gems/rspec-1.1.2/stories/pending_stories/README b/vendor/gems/rspec-1.1.2/stories/pending_stories/README deleted file mode 100644 index 2f9b44314..000000000 --- a/vendor/gems/rspec-1.1.2/stories/pending_stories/README +++ /dev/null @@ -1,3 +0,0 @@ -This directory contains stories that are currently not passing -because they are new or they represent regressions. - diff --git a/vendor/gems/rspec-1.1.2/stories/resources/helpers/cmdline.rb b/vendor/gems/rspec-1.1.2/stories/resources/helpers/cmdline.rb deleted file mode 100644 index ab86bd3e1..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/helpers/cmdline.rb +++ /dev/null @@ -1,9 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) -require 'spec' - -# Uncommenting next line will break the output story (no output!!) -# rspec_options -options = Spec::Runner::OptionParser.parse( - ARGV, $stderr, $stdout -) -Spec::Runner::CommandLine.run(options) diff --git a/vendor/gems/rspec-1.1.2/stories/resources/helpers/story_helper.rb b/vendor/gems/rspec-1.1.2/stories/resources/helpers/story_helper.rb deleted file mode 100644 index e0aef5b45..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/helpers/story_helper.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'spec/story' -require File.dirname(__FILE__) + '/../../../spec/ruby_forker' - -module StoryHelper - include RubyForker - - def spec(args, stderr) - ruby("#{File.dirname(__FILE__) + '/../../../bin/spec'} #{args}", stderr) - end - - def cmdline(args, stderr) - ruby("#{File.dirname(__FILE__) + '/../../resources/helpers/cmdline.rb'} #{args}", stderr) - end - - Spec::Story::World.send :include, self -end diff --git a/vendor/gems/rspec-1.1.2/stories/resources/matchers/smart_match.rb b/vendor/gems/rspec-1.1.2/stories/resources/matchers/smart_match.rb deleted file mode 100644 index 7b1672bc0..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/matchers/smart_match.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Spec - module Matchers - class SmartMatch - def initialize(expected) - @expected = expected - end - - def matches?(actual) - @actual = actual - # Satisfy expectation here. Return false or raise an error if it's not met. - - if @expected =~ /^\/.*\/?$/ || @expected =~ /^".*"$/ - regex_or_string = eval(@expected) - if Regexp === regex_or_string - (@actual =~ regex_or_string) ? true : false - else - @actual.index(regex_or_string) != nil - end - else - false - end - end - - def failure_message - "expected #{@actual.inspect} to smart_match #{@expected.inspect}, but it didn't" - end - - def negative_failure_message - "expected #{@actual.inspect} not to smart_match #{@expected.inspect}, but it did" - end - end - - def smart_match(expected) - SmartMatch.new(expected) - end - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/resources/spec/example_group_with_should_methods.rb b/vendor/gems/rspec-1.1.2/stories/resources/spec/example_group_with_should_methods.rb deleted file mode 100644 index 4c0505d2a..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/spec/example_group_with_should_methods.rb +++ /dev/null @@ -1,12 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) -require 'spec' - -class MySpec < Spec::ExampleGroup - def should_pass_with_should - 1.should == 1 - end - - def should_fail_with_should - 1.should == 2 - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/resources/spec/simple_spec.rb b/vendor/gems/rspec-1.1.2/stories/resources/spec/simple_spec.rb deleted file mode 100644 index 2fb67ba49..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/spec/simple_spec.rb +++ /dev/null @@ -1,8 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) -require 'spec' - -describe "Running an Example" do - it "should not output twice" do - true.should be_true - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/resources/steps/running_rspec.rb b/vendor/gems/rspec-1.1.2/stories/resources/steps/running_rspec.rb deleted file mode 100644 index 496847fe4..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/steps/running_rspec.rb +++ /dev/null @@ -1,50 +0,0 @@ -steps_for :running_rspec do - - Given("the file $relative_path") do |relative_path| - @path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "resources", relative_path)) - unless File.exist?(@path) - raise "could not find file at #{@path}" - end - end - - When("I run it with the $interpreter") do |interpreter| - stderr_file = Tempfile.new('rspec') - stderr_file.close - @stdout = case(interpreter) - when /^ruby interpreter/ - args = interpreter.gsub('ruby interpreter','') - ruby("#{@path}#{args}", stderr_file.path) - when /^spec script/ - args = interpreter.gsub('spec script','') - spec("#{@path}#{args}", stderr_file.path) - when 'CommandLine object' then cmdline(@path, stderr_file.path) - else raise "Unknown interpreter: #{interpreter}" - end - @stderr = IO.read(stderr_file.path) - @exit_code = $?.to_i - end - - Then("the exit code should be $exit_code") do |exit_code| - if @exit_code != exit_code.to_i - raise "Did not exit with #{exit_code}, but with #{@exit_code}. Standard error:\n#{@stderr}" - end - end - - Then("the $stream should match $regex") do |stream, string_or_regex| - written = case(stream) - when 'stdout' then @stdout - when 'stderr' then @stderr - else raise "Unknown stream: #{stream}" - end - written.should smart_match(string_or_regex) - end - - Then("the $stream should not match $regex") do |stream, string_or_regex| - written = case(stream) - when 'stdout' then @stdout - when 'stderr' then @stderr - else raise "Unknown stream: #{stream}" - end - written.should_not smart_match(string_or_regex) - end -end diff --git a/vendor/gems/rspec-1.1.2/stories/resources/stories/failing_story.rb b/vendor/gems/rspec-1.1.2/stories/resources/stories/failing_story.rb deleted file mode 100644 index cc9506c66..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/stories/failing_story.rb +++ /dev/null @@ -1,15 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) - -require 'spec/story' - -Story "Failing story", -%(As an RSpec user - I want a failing test - So that I can observe the output) do - - Scenario "Failing scenario" do - Then "true should be false" do - true.should == false - end - end -end diff --git a/vendor/gems/rspec-1.1.2/stories/resources/test/spec_and_test_together.rb b/vendor/gems/rspec-1.1.2/stories/resources/test/spec_and_test_together.rb deleted file mode 100644 index eb2b4e074..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/test/spec_and_test_together.rb +++ /dev/null @@ -1,57 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) -require 'spec' -# TODO - this should not be necessary, ay? -require 'spec/interop/test' - -describe "An Example" do - it "should pass with assert" do - assert true - end - - it "should fail with assert" do - assert false - end - - it "should pass with should" do - 1.should == 1 - end - - it "should fail with should" do - 1.should == 2 - end -end - -class ATest < Test::Unit::TestCase - def test_should_pass_with_assert - assert true - end - - def test_should_fail_with_assert - assert false - end - - def test_should_pass_with_should - 1.should == 1 - end - - def test_should_fail_with_should - 1.should == 2 - end - - def setup - @from_setup ||= 3 - @from_setup += 1 - end - - def test_should_fail_with_setup_method_variable - @from_setup.should == 40 - end - - before do - @from_before = @from_setup + 1 - end - - def test_should_fail_with_before_block_variable - @from_before.should == 50 - end -end \ No newline at end of file diff --git a/vendor/gems/rspec-1.1.2/stories/resources/test/test_case_with_should_methods.rb b/vendor/gems/rspec-1.1.2/stories/resources/test/test_case_with_should_methods.rb deleted file mode 100644 index 3912429e3..000000000 --- a/vendor/gems/rspec-1.1.2/stories/resources/test/test_case_with_should_methods.rb +++ /dev/null @@ -1,30 +0,0 @@ -$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib]) -require 'test/unit' -require 'spec' -require 'spec/interop/test' - -class MySpec < Test::Unit::TestCase - def should_pass_with_should - 1.should == 1 - end - - def should_fail_with_should - 1.should == 2 - end - - def should_pass_with_assert - assert true - end - - def should_fail_with_assert - assert false - end - - def test - raise "This is not a real test" - end - - def test_ify - raise "This is a real test" - end -end \ No newline at end of file diff --git a/vendor/generators/daemon/daemon_generator.rb b/vendor/generators/daemon/daemon_generator.rb new file mode 100644 index 000000000..83e3bab2c --- /dev/null +++ b/vendor/generators/daemon/daemon_generator.rb @@ -0,0 +1,11 @@ +class DaemonGenerator < Rails::Generator::NamedBase + def manifest + record do |m| + m.directory "lib/daemons" + m.file "daemons", "script/daemons", :chmod => 0755 + m.template "script.rb", "lib/daemons/#{file_name}.rb", :chmod => 0755 + m.template "script_ctl", "lib/daemons/#{file_name}_ctl", :chmod => 0755 + m.file "daemons.yml", "config/daemons.yml" + end + end +end \ No newline at end of file diff --git a/vendor/generators/daemon/templates/daemons b/vendor/generators/daemon/templates/daemons new file mode 100644 index 000000000..feb98b645 --- /dev/null +++ b/vendor/generators/daemon/templates/daemons @@ -0,0 +1,2 @@ +#!/usr/bin/env ruby +Dir[File.dirname(__FILE__) + "/../lib/daemons/*_ctl"].each {|f| `#{f} #{ARGV.first}`} \ No newline at end of file diff --git a/vendor/generators/daemon/templates/daemons.yml b/vendor/generators/daemon/templates/daemons.yml new file mode 100644 index 000000000..c9f78f583 --- /dev/null +++ b/vendor/generators/daemon/templates/daemons.yml @@ -0,0 +1,5 @@ +dir_mode: script +dir: ../../log +multiple: false +backtrace: true +monitor: true \ No newline at end of file diff --git a/vendor/generators/daemon/templates/script.rb b/vendor/generators/daemon/templates/script.rb new file mode 100755 index 000000000..c3cd9b06b --- /dev/null +++ b/vendor/generators/daemon/templates/script.rb @@ -0,0 +1,19 @@ +#!/usr/bin/env ruby + +#You might want to change this +ENV["RAILS_ENV"] ||= "production" + +require File.dirname(__FILE__) + "/../../config/environment" + +$running = true; +Signal.trap("TERM") do + $running = false +end + +while($running) do + + # Replace this with your code + ActiveRecord::Base.logger << "This daemon is still running at #{Time.now}.\n" + + sleep 10 +end \ No newline at end of file diff --git a/vendor/generators/daemon/templates/script_ctl b/vendor/generators/daemon/templates/script_ctl new file mode 100755 index 000000000..058f61828 --- /dev/null +++ b/vendor/generators/daemon/templates/script_ctl @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby +require 'rubygems' +require "daemons" +require 'yaml' +require 'erb' + +class Hash + def with_symbols! + self.keys.each{|key| self[key.to_s.to_sym] = self[key] }; self + end +end + +options = YAML.load( + ERB.new( + IO.read( + File.dirname(__FILE__) + "/../../config/daemons.yml" + )).result).with_symbols! +options[:dir_mode] = options[:dir_mode].to_sym + +Daemons.run File.dirname(__FILE__) + '/<%=file_name%>.rb', options \ No newline at end of file diff --git a/vendor/plugins/output_compression/LICENSE b/vendor/plugins/output_compression/LICENSE new file mode 100644 index 000000000..1139144f6 --- /dev/null +++ b/vendor/plugins/output_compression/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2007 Jeremy Evans + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/plugins/output_compression/README b/vendor/plugins/output_compression/README new file mode 100644 index 000000000..54030bf89 --- /dev/null +++ b/vendor/plugins/output_compression/README @@ -0,0 +1,10 @@ +OutputCompression +================= + +Allows gzip output compression to clients that support it. Simple to use, just +put after_filter :compress_output in your controller. Pulled out of the Google +cache and packaged into plugin form, code originally hosted at +http://www.tuxsoft.se/oss/rails/download/output_compression.rb. + + svn: svn://code.jeremyevans.net/rails/plugins/output_compression + file: http://code.jeremyevans.net/code/output_compression.tar.gz diff --git a/vendor/plugins/output_compression/Rakefile b/vendor/plugins/output_compression/Rakefile new file mode 100644 index 000000000..0ffac2d70 --- /dev/null +++ b/vendor/plugins/output_compression/Rakefile @@ -0,0 +1,22 @@ +require 'rake' +require 'rake/testtask' +require 'rake/rdoctask' + +desc 'Default: run unit tests.' +task :default => :test + +desc 'Test the output_compression plugin.' +Rake::TestTask.new(:test) do |t| + t.libs << 'lib' + t.pattern = 'test/**/*_test.rb' + t.verbose = true +end + +desc 'Generate documentation for the output_compression plugin.' +Rake::RDocTask.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'OutputCompression' + rdoc.options << '--line-numbers --inline-source' + rdoc.rdoc_files.include('README') + rdoc.rdoc_files.include('lib/**/*.rb') +end diff --git a/vendor/plugins/output_compression/init.rb b/vendor/plugins/output_compression/init.rb new file mode 100644 index 000000000..52bdcc3f2 --- /dev/null +++ b/vendor/plugins/output_compression/init.rb @@ -0,0 +1,2 @@ +# Include hook code here +require 'output_compression' diff --git a/vendor/plugins/output_compression/lib/output_compression.rb b/vendor/plugins/output_compression/lib/output_compression.rb new file mode 100644 index 000000000..c7652ae1d --- /dev/null +++ b/vendor/plugins/output_compression/lib/output_compression.rb @@ -0,0 +1,66 @@ +# OutputCompression +# Rails output compression filters +# +# Adds two classmethods to ActionController that can be used as after-filters: +# strip_whitespace and compress_output. +# If you use page-caching, you MUST specify the compress_output filter AFTER +# caches_page, otherwise the compressed data will be cached instead of the HTML +# +# class MyController < ApplicationController +# after_filter :strip_whitespace +# caches_page :index +# after_filter :compress_output +# end + +begin + require 'zlib' + require 'stringio' + GZIP_SUPPORTED = true +rescue + GZIP_SUPPORTED = false +end + +module CompressionSystem + def compress_output + return unless accepts_gzip? + output = StringIO.new + def output.close + # Zlib does a close. Bad Zlib... + rewind + end + gz = Zlib::GzipWriter.new(output) + gz.write(response.body) + gz.close + if output.length < response.body.length + @old_response_body = response.body + response.body = output.string + response.headers['Content-encoding'] = @compression_encoding + end + end + + def accepts_gzip? + return false unless GZIP_SUPPORTED + accepts = request.env['HTTP_ACCEPT_ENCODING'] + return false unless accepts && accepts =~ /(x-gzip|gzip)/ + @compression_encoding = $1 + true + end + + def strip_whitespace + response.body.gsub!(/()|(.*?<\/script>)|()|()|\s+/m) do |m| + if m =~ /^()(.*?)<\/script>$/m + $1 + $2.strip.gsub(/\s+/, ' ').gsub('',"\n-->") + '' + elsif m =~ /^$/m + '' + elsif m =~ /^<(textarea|pre)/ + m + else ' ' + end + end + response.body.gsub! /\s+\s+/, '>' + end +end + +class ActionController::Base + include CompressionSystem +end \ No newline at end of file diff --git a/vendor/plugins/output_compression/tasks/output_compression_tasks.rake b/vendor/plugins/output_compression/tasks/output_compression_tasks.rake new file mode 100644 index 000000000..0382661bd --- /dev/null +++ b/vendor/plugins/output_compression/tasks/output_compression_tasks.rake @@ -0,0 +1,4 @@ +# desc "Explaining what the task does" +# task :output_compression do +# # Task goes here +# end \ No newline at end of file diff --git a/vendor/plugins/output_compression/test/output_compression_test.rb b/vendor/plugins/output_compression/test/output_compression_test.rb new file mode 100644 index 000000000..9b94fa187 --- /dev/null +++ b/vendor/plugins/output_compression/test/output_compression_test.rb @@ -0,0 +1,8 @@ +require 'test/unit' + +class OutputCompressionTest < Test::Unit::TestCase + # Replace this with your real tests. + def test_this_plugin + flunk + end +end