Skip to content

Commit 3d31c13

Browse files
authored
Merge pull request #446 from Umofomia/normalize-text
OneLogin::RubySaml::Utils.element_text should normalize text before returning it
2 parents 0a7d012 + 22efc12 commit 3d31c13

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

lib/onelogin/ruby-saml/utils.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ def self.original_uri_match?(destination_url, settings_url)
286286
# that there all children other than text nodes can be ignored (e.g. comments). If nil is
287287
# passed, nil will be returned.
288288
def self.element_text(element)
289-
element.texts.join if element
289+
element.texts.map(&:value).join if element
290290
end
291291
end
292292
end

test/utils_test.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,5 +213,42 @@ class UtilsTest < Minitest::Test
213213
assert !OneLogin::RubySaml::Utils.uri_match?(destination, settings)
214214
end
215215
end
216+
217+
describe 'element_text' do
218+
it 'returns the element text' do
219+
element = REXML::Document.new('<element>element text</element>').elements.first
220+
assert_equal 'element text', OneLogin::RubySaml::Utils.element_text(element)
221+
end
222+
223+
it 'returns all segments of the element text' do
224+
element = REXML::Document.new('<element>element <!-- comment -->text</element>').elements.first
225+
assert_equal 'element text', OneLogin::RubySaml::Utils.element_text(element)
226+
end
227+
228+
it 'returns normalized element text' do
229+
element = REXML::Document.new('<element>element &amp; text</element>').elements.first
230+
assert_equal 'element & text', OneLogin::RubySaml::Utils.element_text(element)
231+
end
232+
233+
it 'returns the CDATA element text' do
234+
element = REXML::Document.new('<element><![CDATA[element & text]]></element>').elements.first
235+
assert_equal 'element & text', OneLogin::RubySaml::Utils.element_text(element)
236+
end
237+
238+
it 'returns the element text with newlines and additional whitespace' do
239+
element = REXML::Document.new("<element> element \n text </element>").elements.first
240+
assert_equal " element \n text ", OneLogin::RubySaml::Utils.element_text(element)
241+
end
242+
243+
it 'returns nil when element is nil' do
244+
assert_nil OneLogin::RubySaml::Utils.element_text(nil)
245+
end
246+
247+
it 'returns empty string when element has no text' do
248+
element = REXML::Document.new('<element></element>').elements.first
249+
assert_equal '', OneLogin::RubySaml::Utils.element_text(element)
250+
end
251+
252+
end
216253
end
217254
end

0 commit comments

Comments
 (0)