class Swiftrail::Swift::Parser
Constants
- RegexMatch
Attributes
test_patterns[R]
Public Class Methods
new(test_patterns)
click to toggle source
# File lib/swiftrail/swift/parser.rb, line 6 def initialize(test_patterns) @test_patterns = test_patterns end
Public Instance Methods
parse()
click to toggle source
# File lib/swiftrail/swift/parser.rb, line 10 def parse all_files.map do |file_name| collect_test_cases(file_name, IO.read(file_name)) end.flatten end
Private Instance Methods
all_files()
click to toggle source
# File lib/swiftrail/swift/parser.rb, line 21 def all_files test_patterns.map do |test_pattern| Dir[test_pattern] end.flatten.uniq end
cases_regex()
click to toggle source
# File lib/swiftrail/swift/parser.rb, line 44 def cases_regex %r{(//\s*TESTRAIL\s*([(C(0-9)*)|\s|,]*)$\s*)*^[\w ]*(func |class )\s*(\w*)\s*(\(\)|:\s*XCTestCase)}im end
collect_test_cases(file_name, content)
click to toggle source
@return [Test]
# File lib/swiftrail/swift/parser.rb, line 28 def collect_test_cases(file_name, content) class_cases = [] class_name = '' content.scan(cases_regex).map { |match| RegexMatch.new(sanitize(match[1]), match[2] == 'class ', match[3]) }.reduce([]) { |result, match| if match.class_type? class_cases = match.case_ids class_name = match.name else result << Test.new(file_name, class_name, match.name, (match.case_ids + class_cases).uniq) end result } end
sanitize(case_ids)
click to toggle source
# File lib/swiftrail/swift/parser.rb, line 48 def sanitize(case_ids) return [] if case_ids.nil? || case_ids.empty? case_ids.delete(' ') .split(',') .select { |case_id| case_id.downcase.start_with?('c') } .map { |case_id| case_id[1..-1] } end