From 990a3f3a83ec6b33360373919009a7d8bd396534 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Wed, 14 Nov 2007 18:59:05 +0000 Subject: Use rexml for some tests rather than string include? checks to account for unordered attributes. Closes #10164 [Catfish] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8142 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/test/base_test.rb | 49 ++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index ee34d201b8..a95ee7cd8a 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -12,6 +12,7 @@ require 'fixtures/subscriber' require 'fixtures/keyboard' require 'fixtures/post' require 'fixtures/minimalistic' +require 'rexml/document' class Category < ActiveRecord::Base; end class Smarts < ActiveRecord::Base; end @@ -1543,28 +1544,48 @@ class BasicsTest < Test::Unit::TestCase end def test_to_xml - xml = topics(:first).to_xml(:indent => 0, :skip_instruct => true) + xml = REXML::Document.new(topics(:first).to_xml(:indent => 0)) bonus_time_in_current_timezone = topics(:first).bonus_time.xmlschema written_on_in_current_timezone = topics(:first).written_on.xmlschema last_read_in_current_timezone = topics(:first).last_read.xmlschema - assert_equal "", xml.first(7) - assert xml.include?(%(The First Topic)) - assert xml.include?(%(David)) - assert xml.include?(%(1)) - assert xml.include?(%(1)) - assert xml.include?(%(#{written_on_in_current_timezone})) - assert xml.include?(%(--- Have a nice day\n)) - assert xml.include?(%(david@loudthinking.com)) - assert xml.include?(%()) + + assert_equal "topic", xml.root.name + assert_equal "The First Topic" , xml.elements["//title"].text + assert_equal "David" , xml.elements["//author-name"].text + + assert_equal "1", xml.elements["//id"].text + assert_equal "integer" , xml.elements["//id"].attributes['type'] + + assert_equal "1", xml.elements["//replies-count"].text + assert_equal "integer" , xml.elements["//replies-count"].attributes['type'] + + assert_equal written_on_in_current_timezone, xml.elements["//written-on"].text + assert_equal "datetime" , xml.elements["//written-on"].attributes['type'] + + assert_equal "--- Have a nice day\n" , xml.elements["//content"].text + assert_equal "yaml" , xml.elements["//content"].attributes['type'] + + assert_equal "david@loudthinking.com", xml.elements["//author-email-address"].text + + assert_equal nil, xml.elements["//parent-id"].text + assert_equal "integer", xml.elements["//parent-id"].attributes['type'] + assert_equal "true", xml.elements["//parent-id"].attributes['nil'] + if current_adapter?(:SybaseAdapter, :SQLServerAdapter, :OracleAdapter) - assert xml.include?(%(#{last_read_in_current_timezone})) + assert_equal last_read_in_current_timezone, xml.elements["//last-read"].text + assert_equal "datetime" , xml.elements["//last-read"].attributes['type'] else - assert xml.include?(%(2004-04-15)) + assert_equal "2004-04-15", xml.elements["//last-read"].text + assert_equal "date" , xml.elements["//last-read"].attributes['type'] end + # Oracle and DB2 don't have true boolean or time-only fields unless current_adapter?(:OracleAdapter, :DB2Adapter) - assert xml.include?(%(false)), "Approved should be a boolean" - assert xml.include?(%(#{bonus_time_in_current_timezone})) + assert_equal "false", xml.elements["//approved"].text + assert_equal "boolean" , xml.elements["//approved"].attributes['type'] + + assert_equal bonus_time_in_current_timezone, xml.elements["//bonus-time"].text + assert_equal "datetime" , xml.elements["//bonus-time"].attributes['type'] end end -- cgit v1.2.3