Get all the tests passing under ruby 1.9
authorTom Hughes <tom@compton.nu>
Sun, 27 May 2012 12:50:41 +0000 (13:50 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 27 May 2012 12:51:25 +0000 (13:51 +0100)
14 files changed:
Gemfile
Gemfile.lock
app/controllers/amf_controller.rb
config/locales/en.yml
lib/potlatch.rb
lib/utf8.rb
test/functional/amf_controller_test.rb
test/functional/diary_entry_controller_test.rb
test/functional/user_controller_test.rb
test/integration/oauth_test.rb
test/integration/user_creation_test.rb
test/test_helper.rb
test/unit/message_test.rb
test/unit/user_test.rb

diff --git a/Gemfile b/Gemfile
index 0075f1771a8fc3f4db4d57ea20871c57a20899f7..76872dfffc8c3133aa15e8afeb5b8fc3aaf7fdaf 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -4,6 +4,9 @@ source 'http://rubygems.org'
 # Require rails
 gem 'rails', '3.2.3'
 
+# Require things which have moved to gems in ruby 1.9
+gem 'bigdecimal', :platforms => :ruby_19
+
 # Require the postgres database driver
 gem 'pg'
 
@@ -47,6 +50,7 @@ gem 'memcached', '>= 1.4.1'
 # Gems needed for running tests
 group :test do
   gem 'timecop'
+  gem 'minitest', :platforms => :ruby_19
 end
 
 # Gems needed for compiling assets
index 0ea8790212128f35a0d74d1700921cfe301f9242..dca0097f50084c60521ba53f3b00c5f0f077bf76 100644 (file)
@@ -30,6 +30,7 @@ GEM
       i18n (~> 0.6)
       multi_json (~> 1.0)
     arel (3.0.2)
+    bigdecimal (1.1.0)
     builder (3.0.0)
     cocaine (0.2.1)
     coffee-rails (3.2.2)
@@ -68,6 +69,7 @@ GEM
       treetop (~> 1.4.8)
     memcached (1.4.1)
     mime-types (1.18)
+    minitest (3.0.1)
     multi_json (1.3.4)
     multipart-post (1.1.5)
     nokogiri (1.5.2)
@@ -154,6 +156,7 @@ PLATFORMS
 
 DEPENDENCIES
   SystemTimer (>= 1.1.3)
+  bigdecimal
   coffee-rails (~> 3.2.1)
   composite_primary_keys (>= 5.0.0)
   deadlock_retry (>= 1.2.0)
@@ -165,6 +168,7 @@ DEPENDENCIES
   jquery-rails
   libxml-ruby (>= 2.0.5)
   memcached (>= 1.4.1)
+  minitest
   open_id_authentication (>= 1.1.0)
   openstreetmap-oauth-plugin (>= 0.4.0.1)
   paperclip (~> 2.0)
index 091bdea0e6b7bd1270983b9f03b59447e7f8062d..a24ac52651dec7e63f95f65c4d6f88dd15fd41b2 100644 (file)
@@ -423,7 +423,7 @@ class AmfController < ApplicationController
       # Remove any elements where 2 seconds doesn't elapse before next one
       revdates.delete_if { |d| revdates.include?(d+1) or revdates.include?(d+2) }
       # Collect all in one nested array
-      revdates.collect! {|d| [d.succ.strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
+      revdates.collect! {|d| [(d + 1).strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
       revdates.uniq!
 
       return ['way', wayid, revdates]
@@ -437,7 +437,7 @@ class AmfController < ApplicationController
   def getnode_history(nodeid) #:doc:
     begin 
       history = Node.find(nodeid).old_nodes.unredacted.reverse.collect do |old_node|
-        [old_node.timestamp.succ.strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
+        [(old_node.timestamp + 1).strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
       end
       return ['node', nodeid, history]
     rescue ActiveRecord::RecordNotFound
index d5577ff6486cd75a53ff1e5898093f3deb4b26f3..7bfda9593bf5d89f4e8af25ca0a47534511f72f5 100644 (file)
@@ -400,7 +400,7 @@ en:
       post: Post
       when: When
       comment: Comment
-      ago: %{ago} ago
+      ago: "%{ago} ago"
       newer_comments: "Newer Comments"
       older_comments: "Older Comments"
   export:
index 43be2f8b47e730e1e4a9dc07ba39d5e1b083d3c7..919eb0122986fe5ac923e519c6a9aeb3934af713 100644 (file)
@@ -8,18 +8,20 @@ module Potlatch
     
     # Return two-byte integer
     def self.getint(s) 
-      s.getc*256+s.getc
+      s.getbyte*256+s.getbyte
     end
 
     # Return four-byte long
     def self.getlong(s) 
-      ((s.getc*256+s.getc)*256+s.getc)*256+s.getc
+      ((s.getbyte*256+s.getbyte)*256+s.getbyte)*256+s.getbyte
     end
 
     # Return string with two-byte length 
     def self.getstring(s) 
-      len=s.getc*256+s.getc
-      s.read(len)
+      len=s.getbyte*256+s.getbyte
+      str=s.read(len)
+      str.force_encoding("UTF-8") if str.respond_to?("force_encoding")
+      str
     end
 
     # Return eight-byte double-precision float 
@@ -45,23 +47,23 @@ module Potlatch
         if (key=='') then break end
         arr[key]=getvalue(s)
       end
-      s.getc           # skip the 9 'end of object' value
+      s.getbyte                # skip the 9 'end of object' value
       arr
     end
 
     # Parse and get value
     def self.getvalue(s) 
-      case s.getc
+      case s.getbyte
       when 0;  return getdouble(s)                     # number
-      when 1;  return s.getc                           # boolean
+      when 1;  return s.getbyte                        # boolean
       when 2;  return getstring(s)                     # string
       when 3;  return getobject(s)                     # object/hash
-      when 5;  return nil                                      # null
-      when 6;  return nil                                      # undefined
-      when 8;  s.read(4)                                       # mixedArray
-        return getobject(s)                    #  |
-      when 10;return getarray(s)                       # array
-      else;    return nil                                      # error
+      when 5;  return nil                              # null
+      when 6;  return nil                              # undefined
+      when 8;  s.read(4)                               # mixedArray
+                return getobject(s)                    #  |
+      when 10;  return getarray(s)                     # array
+      else;    return nil                              # error
       end
     end
 
@@ -134,7 +136,7 @@ module Potlatch
       # Skip headers
       AMF.getint(@request).times do     # Read number of headers and loop
         AMF.getstring(@request)         #  | skip name
-        req.getc                        #  | skip boolean
+        req.getbyte                     #  | skip boolean
         AMF.getvalue(@request)          #  | skip value
       end
 
index 90b8f0413e99237b7a808d1d397301da3e021442..c6e1918afb198b26a245325796624718a3d1f856 100644 (file)
@@ -1,16 +1,21 @@
-require 'iconv'
-
 module UTF8
   ##
   # Checks that a string is valid UTF-8 by trying to convert it to UTF-8
   # using the iconv library, which is in the standard library.
-  def self.valid?(str)
-    return true if str.nil?
-    Iconv.conv("UTF-8", "UTF-8", str)
-    return true
-    
-  rescue
-    return false
-  end  
-end
+  if String.new.respond_to?("valid_encoding?")
+    def self.valid?(str)
+      return true if str.nil?
+      return str.valid_encoding?
+    end
+  else
+    require 'iconv'
 
+    def self.valid?(str)
+      return true if str.nil?
+      Iconv.conv("UTF-8", "UTF-8", str)
+      return true
+    rescue
+      return false
+    end
+  end
+end
index 46ff71eb734aad0ba57a3220105dd2870d6ba044..757acf6aceaa808adb3b01cb2e86cce3598c180c 100644 (file)
@@ -295,11 +295,10 @@ class AmfControllerTest < ActionController::TestCase
     assert_equal latest.id, history[1] 
     # We use dates rather than version numbers here, because you might
     # have moved a node within a way (i.e. way version not incremented).
-    # The timestamp is +1 (timestamp.succ) because we say "give me the
-    # revision of 15:33:02", but that might actually include changes at
-    # 15:33:02.457.
-    assert_equal latest.timestamp.succ.strftime("%d %b %Y, %H:%M:%S"), history[2].first[0]
-    assert_equal oldest.timestamp.succ.strftime("%d %b %Y, %H:%M:%S"), history[2].last[0]
+    # The timestamp is +1 because we say "give me the revision of 15:33:02",
+    # but that might actually include changes at 15:33:02.457.
+    assert_equal (latest.timestamp + 1).strftime("%d %b %Y, %H:%M:%S"), history[2].first[0]
+    assert_equal (oldest.timestamp + 1).strftime("%d %b %Y, %H:%M:%S"), history[2].last[0]
   end
 
   def test_getway_history_nonexistent
@@ -331,10 +330,10 @@ class AmfControllerTest < ActionController::TestCase
     assert_equal history[1], latest.id,
       'second element should be the input node ID'
     assert_equal history[2].first[0], 
-      latest.timestamp.succ.strftime("%d %b %Y, %H:%M:%S"),
+      (latest.timestamp + 1).strftime("%d %b %Y, %H:%M:%S"),
       'first element in third element (array) should be the latest version'
     assert_equal history[2].last[0], 
-      nodes(:node_with_versions_v1).timestamp.succ.strftime("%d %b %Y, %H:%M:%S"),
+      (nodes(:node_with_versions_v1).timestamp + 1).strftime("%d %b %Y, %H:%M:%S"),
       'last element in third element (array) should be the initial version'
   end
 
index 724fb48a5a3387d828b4ef31bca3fdccafc6d6b6..0fa9ea97f276c9810dc41d262e78f750de203e26 100644 (file)
@@ -104,7 +104,7 @@ class DiaryEntryControllerTest < ActionController::TestCase
       end
       assert_select "body", :count => 1 do
         assert_select "div#content", :count => 1 do
-          assert_select "h1", "New Diary Entry", :count => 1
+          assert_select "h1", :text => "New Diary Entry", :count => 1
           # We don't care about the layout, we just care about the form fields
           # that are available
           assert_select "form[action='/diary/new']", :count => 1 do
index 576eb0db9c72371a9778dcf3a08fc3359c5edc5e..4379a1d49d18c5e5bd06fa8f239c9dd8fd06a116 100644 (file)
@@ -212,7 +212,7 @@ class UserControllerTest < ActionController::TestCase
     register_email = ActionMailer::Base.deliveries.first
   
     assert_equal register_email.to[0], new_email
-    assert_match /#{@url}/, register_email.body
+    assert_match /#{@url}/, register_email.body.to_s
 
     # Check the page
     assert_redirected_to :action => 'login', :referer => nil
index 8639c8e53ed4910b6521a1044f97346b457396c4..2bda77379b46bac15368472528204eb6823eaa4f 100644 (file)
@@ -1,7 +1,7 @@
 require File.dirname(__FILE__) + '/../test_helper'
 
 class OAuthTest < ActionController::IntegrationTest
-  fixtures :users, :client_applications
+  fixtures :users, :client_applications, :gpx_files
 
   include OAuth::Helper
 
index 3c716e99ec17f33df31608736966ab69ce976853..b5b3e91c7a99a2ddd1cefee600339b0c871bc542 100644 (file)
@@ -71,7 +71,7 @@ class UserCreationTest < ActionController::IntegrationTest
 
       assert_equal register_email.to[0], new_email
       # Check that the confirm account url is correct
-      assert_match /#{@url}/, register_email.body
+      assert_match /#{@url}/, register_email.body.to_s
 
       # Check the page
       assert_response :success
@@ -114,7 +114,7 @@ class UserCreationTest < ActionController::IntegrationTest
     # Check that the confirm account url is correct
     confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
     register_email.parts.each do |part|
-      assert_match(confirm_regex, part.body)
+      assert_match confirm_regex, part.body.to_s
     end
     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
 
@@ -211,7 +211,7 @@ class UserCreationTest < ActionController::IntegrationTest
     # Check that the confirm account url is correct
     confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
     register_email.parts.each do |part|
-      assert_match(confirm_regex, part.body)
+      assert_match confirm_regex, part.body.to_s
     end
     confirm_string = register_email.parts[0].body.match(confirm_regex)[1]
 
index 59b87da847ab8e835836f68d6944eecdca1ec179..703347c9c9dedd5508d01264ec07527f4c81f6e3 100644 (file)
@@ -7,7 +7,7 @@ class ActiveSupport::TestCase
   # Load standard fixtures needed to test API methods
   def self.api_fixtures
     #print "setting up the api_fixtures"
-    fixtures :users, :changesets, :changeset_tags
+    fixtures :users, :user_roles, :changesets, :changeset_tags
 
     fixtures :current_nodes, :nodes
     set_fixture_class :current_nodes => 'Node'
index 260852aea51deebddb921d1715102b8226be86b6..3da91de38365df658a4aa1d243186afae7d62bdb 100644 (file)
@@ -19,7 +19,7 @@ class MessageTest < ActiveSupport::TestCase
     assert message.errors[:title].any?
     assert message.errors[:body].any?
     assert message.errors[:sent_on].any?
-    assert true, message.message_read
+    assert !message.message_read
   end
   
   def test_validating_msgs
@@ -76,6 +76,9 @@ class MessageTest < ActiveSupport::TestCase
         db_msg = msg.class.find(msg.id)
         assert_equal char, db_msg.title, "Database silently truncated message title"
 
+      rescue ArgumentError => ex
+        assert_equal ex.to_s, "invalid byte sequence in UTF-8"
+
       rescue ActiveRecord::RecordInvalid
         # because we only test invalid sequences it is OK to barf on them
       end
index 9f04bd1d6ec5ff7e31e15e9538d4efae7c338930..225eca02b491387535ebb4d3f5e18c16ba82024f 100644 (file)
@@ -52,7 +52,7 @@ class UserTest < ActiveSupport::TestCase
     ok.each do |name|
       user = users(:normal_user)
       user.email = name
-      assert user.valid?(:save), user.errors.full_messages
+      assert user.valid?(:save), user.errors.full_messages.join(",")
     end
     
     bad.each do |name|