Module: Capybara::Node::WhitespaceNormalizer
- Included in:
- RackTest::Node, Selenium::Node
- Defined in:
- lib/capybara/node/whitespace_normalizer.rb
Overview
WhitespaceNormalizer provides methods that help to normalize the spacing of text content inside of Elements by removing various unicode spacing and directional markings.
Constant Summary collapse
- NON_BREAKING_SPACE =
Unicode for NBSP, or
"\u00a0"
- LINE_SEPERATOR =
"\u2028"
- PARAGRAPH_SEPERATOR =
"\u2029"
- BREAKING_SPACES =
All spaces except for NBSP
"[[:space:]&&[^#{NON_BREAKING_SPACE}]]".freeze
- SQUEEZED_SPACES =
Whitespace we want to substitute with plain spaces
" \n\f\t\v#{LINE_SEPERATOR}#{PARAGRAPH_SEPERATOR}".freeze
- LEADING_SPACES =
Any whitespace at the front of text
/\A#{BREAKING_SPACES}+/
- TRAILING_SPACES =
Any whitespace at the end of text
/#{BREAKING_SPACES}+\z/
- ZERO_WIDTH_SPACE =
"Invisible" space character
"\u200b"
- LEFT_TO_RIGHT_MARK =
Signifies text is read left to right
"\u200e"
- RIGHT_TO_LEFT_MARK =
Signifies text is read right to left
"\u200f"
- REMOVED_CHARACTERS =
Characters we want to truncate from text
[ZERO_WIDTH_SPACE, LEFT_TO_RIGHT_MARK, RIGHT_TO_LEFT_MARK].join
- EMPTY_LINES =
Matches multiple empty lines
/[\ \n]*\n[\ \n]*/
Instance Method Summary collapse
-
#normalize_spacing(text) ⇒ String
Normalizes the spacing of a node's text to be similar to what matchers might expect.
-
#normalize_visible_spacing(text) ⇒ String
Variant on Normalizer#normalize_spacing that targets the whitespace of visible elements only.
Instance Method Details
#normalize_spacing(text) ⇒ String
Normalizes the spacing of a node's text to be similar to what matchers might expect.
53 54 55 56 57 58 59 60 61 |
# File 'lib/capybara/node/whitespace_normalizer.rb', line 53 def normalize_spacing(text) text .delete(REMOVED_CHARACTERS) .tr(SQUEEZED_SPACES, ' ') .squeeze(' ') .sub(LEADING_SPACES, '') .sub(TRAILING_SPACES, '') .tr(NON_BREAKING_SPACE, ' ') end |
#normalize_visible_spacing(text) ⇒ String
Variant on Normalizer#normalize_spacing that targets the whitespace of visible elements only.
71 72 73 74 75 76 77 78 |
# File 'lib/capybara/node/whitespace_normalizer.rb', line 71 def normalize_visible_spacing(text) text .squeeze(' ') .gsub(EMPTY_LINES, "\n") .sub(LEADING_SPACES, '') .sub(TRAILING_SPACES, '') .tr(NON_BREAKING_SPACE, ' ') end |