1 # frozen_string_literal: true
 
   5 class LeadingWhitespaceValidatable
 
   6   include ActiveModel::Validations
 
   8   validates :string, :whitespace => { :leading => false }
 
  12 class TrailingWhitespaceValidatable
 
  13   include ActiveModel::Validations
 
  15   validates :string, :whitespace => { :trailing => false }
 
  19 class WhitespaceValidatorTest < ActiveSupport::TestCase
 
  20   include Rails::Dom::Testing::Assertions::SelectorAssertions
 
  22   def test_with_leading_whitespace
 
  23     validator = LeadingWhitespaceValidatable.new
 
  25     strings = [" ", " test", "  ", "\ttest"]
 
  29       assert_not_predicate validator, :valid?, "'#{v}' should not be valid"
 
  33   def test_without_leading_whitespace
 
  34     validator = LeadingWhitespaceValidatable.new
 
  36     strings = ["test", "test ", "t est", "test\t", ".test", "_test"]
 
  40       assert_predicate validator, :valid?, "'#{v}' should be valid"
 
  44   def test_with_trailing_whitespace
 
  45     validator = TrailingWhitespaceValidatable.new
 
  47     strings = [" ", "test ", "  ", "test\t", "_test_ "]
 
  51       assert_not_predicate validator, :valid?, "'#{v}' should not be valid"
 
  55   def test_without_trailing_whitespace
 
  56     validator = TrailingWhitespaceValidatable.new
 
  58     strings = ["test", " test", "tes t", "\ttest", "test.", "test_"]
 
  62       assert_predicate validator, :valid?, "'#{v}' should be valid"