Module: Datadog::CI::Utils::TestName

Defined in:
lib/datadog/ci/utils/test_name.rb

Constant Summary collapse

MONTH =
"(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"
WEEKDAY =
"(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)"
CONSTANT_NAME =
"[A-Z]\\w*(?:::[A-Z]\\w*)*"
DATE_INSPECT_PATTERN =
/#<Date(?::[^>\n]*)?>/.freeze
TIME_INSPECT_PATTERN =
/#<(?:DateTime|Time)(?::[^>\n]*)?>/.freeze
CLASS_INSPECT_PATTERN =
/#<Class:(#{CONSTANT_NAME}|0x[0-9a-fA-F]+)(?:\s[^>\n]*)?>/.freeze
NAMED_OBJECT_INSPECT_PATTERN =
/#<(#{CONSTANT_NAME})(?::[^>\n]*)?>/.freeze
OBJECT_INSPECT_PATTERN =
/#<[^>\n]+>/.freeze
ACTIVE_RECORD_CLASS_INSPECT_PATTERN =
/
  \b(#{CONSTANT_NAME})
  (?:
    \s\(call\s'\1\.connection'\sto\ establish\ a\ connection\)
    |
    \(
      (?:\.\.\.\s*)?[a-z_][a-z0-9_]*:\s[^,)\n]*
      (?:
        ,\s(?:\.\.\.\s*)?[a-z_][a-z0-9_]*:\s[^,)\n]*
      )*
    \)
  )
/x.freeze
TIME_PATTERN =
/
  \b
  (?:
    \d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?
    (?:\s?(?:Z|UTC|[A-Z]{2,5}|[+-]\d{2}:?\d{2}))?
    |
    #{WEEKDAY},?\s+\d{1,2}\s+#{MONTH}\s+\d{4}\s+\d{2}:\d{2}:\d{2}(?:\.\d+)?
    (?:\s+(?:UTC|[A-Z]{2,5}|[+-]\d{2}:?\d{2}))?
  )
  \b
/x.freeze
DATE_PATTERN =
/
  \b
  (?:
    \d{4}-\d{2}-\d{2}
    |
    #{WEEKDAY},?\s+\d{1,2}\s+#{MONTH}\s+\d{4}
  )
  \b
/x.freeze
RANGE_PATTERN =
/
  (^|[^\w.])
  (?:-?\d+(?:\.\d+)?|DATE|TIME|:[a-zA-Z_]\w*|"[^"]*"|'[^']*')
  \s*\.{2,3}\s*
  (?:-?\d+(?:\.\d+)?|DATE|TIME|:[a-zA-Z_]\w*|"[^"]*"|'[^']*')
  (?=$|[^\w.])
/x.freeze
ARRAY_PATTERN =
/\[[^\[\]\n]{0,300}\]/.freeze
HASH_PATTERN =
/\{[^{}\n]{0,300}\}/.freeze

Class Method Summary collapse

Class Method Details

.normalize(name) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/datadog/ci/utils/test_name.rb', line 58

def self.normalize(name)
  return name unless name.is_a?(String)
  return name if name.empty?

  normalized = name.gsub(DATE_INSPECT_PATTERN, "DATE")
  normalized.gsub!(TIME_INSPECT_PATTERN, "TIME")
  normalized.gsub!(CLASS_INSPECT_PATTERN) do
    class_name = Regexp.last_match(1).to_s
    class_name.start_with?("0x") ? "CLASS" : "CLASS:#{class_name}"
  end
  normalized.gsub!(NAMED_OBJECT_INSPECT_PATTERN) { "OBJECT:#{Regexp.last_match(1)}" }
  normalized.gsub!(OBJECT_INSPECT_PATTERN, "OBJECT")
  normalized.gsub!(ACTIVE_RECORD_CLASS_INSPECT_PATTERN) { Regexp.last_match(1).to_s }
  normalized.gsub!(ARRAY_PATTERN) { |value| array_literal?(value) ? "ARRAY" : value }
  normalized.gsub!(HASH_PATTERN) { |value| hash_literal?(value) ? "HASH" : value }
  normalized.gsub!(TIME_PATTERN, "TIME")
  normalized.gsub!(DATE_PATTERN, "DATE")
  normalized.gsub!(RANGE_PATTERN) { "#{Regexp.last_match(1)}RANGE" }

  normalized
rescue => e
  warn_normalization_error(e)
  name
end