summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rexml/functions.rb33
-rw-r--r--test/rexml/test_jaxen.rb27
2 files changed, 29 insertions, 31 deletions
diff --git a/lib/rexml/functions.rb b/lib/rexml/functions.rb
index b84209619d..0f91fcd23f 100644
--- a/lib/rexml/functions.rb
+++ b/lib/rexml/functions.rb
@@ -136,21 +136,36 @@ module REXML
# An object of a type other than the four basic types is converted to a
# string in a way that is dependent on that type.
def Functions::string( object=nil )
- #object = @context unless object
- if object.instance_of? Array
- string( object[0] )
- elsif defined? object.node_type
- if object.node_type == :attribute
+ object = @@context[:node] if object.nil?
+ if object.respond_to?(:node_type)
+ case object.node_type
+ when :attribute
object.value
- elsif object.node_type == :element || object.node_type == :document
+ when :element
string_value(object)
+ when :document
+ string_value(object.root)
+ when :processing_instruction
+ object.content
else
object.to_s
end
- elsif object.nil?
- return ""
else
- object.to_s
+ case object
+ when Array
+ string(object[0])
+ when Numeric
+ integer = object.to_i
+ if object == integer
+ "%d" % integer
+ else
+ object.to_s
+ end
+ when nil
+ ""
+ else
+ object.to_s
+ end
end
end
diff --git a/test/rexml/test_jaxen.rb b/test/rexml/test_jaxen.rb
index 69c74d5572..671c185ea5 100644
--- a/test/rexml/test_jaxen.rb
+++ b/test/rexml/test_jaxen.rb
@@ -28,7 +28,7 @@ module REXMLTests
def _test_namespaces ; process_test_case("namespaces") ; end
def _test_nitf ; process_test_case("nitf") ; end
def _test_numbers ; process_test_case("numbers") ; end
- def _test_pi ; process_test_case("pi") ; end
+ def test_pi ; process_test_case("pi") ; end
def _test_pi2 ; process_test_case("pi2") ; end
def _test_simple ; process_test_case("simple") ; end
def _test_testNamespaces ; process_test_case("testNamespaces") ; end
@@ -79,29 +79,12 @@ module REXMLTests
def process_value_of(context, variables, namespaces, value_of)
expected = value_of.text
xpath = value_of.attributes["select"]
- matched = XPath.first(context, xpath, namespaces, variables)
+ matched = XPath.match(context, xpath, namespaces, variables)
message = user_message(context, xpath, matched)
-
- if expected.nil?
- assert_nil(matched, message)
- else
- case matched
- when Element
- assert_equal(expected, matched.text, message)
- when Attribute, Text, Comment, TrueClass, FalseClass
- assert_equal(expected, matched.to_s, message)
- when Instruction
- assert_equal(expected, matched.content, message)
- when Integer, Float
- assert_equal(expected.to_f, matched, message)
- when String
- assert_equal(expected, matched, message)
- else
- flunk("#{message}\n" +
- "Unexpected match value: <#{matched.inspect}>")
- end
- end
+ assert_equal(expected || "",
+ REXML::Functions.string(matched),
+ message)
end
# processes a tests/document/context/test node ( where @exception is false or doesn't exist )