=begin /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ Scans java test source files, recursively from the current directory, and produces a list of test metods sorted by specification line number. The implementation makes heavy use of my scant knowledge of regex. I'll comeback and clean this up as time allows. Assumes a test comment convention like this: /** * Lines 410,411,412,413: *

* A method of a conversational interface may be marked with an * "@EndsConversation" annotation. Once a method marked with * "@EndsConversation" has been called, the conversation between client and * service provider is at an end, which implies no further methods may be * called on that service within the *same* conversation. */ @Test public void atEndsConversation1() throws Exception { Example command line usage >ruby processcomments.rb > comment_scan.txt Current output is formatted for a cwiki page and can be directly pasted to a blank page Some TODO's: Add logic to process number ranges such as "Lines 523-556" or "Lines 523 to 556" =end class TestMethod attr_accessor :lines_tested, :first_line_tested def initialize(text, parent) @text = text @parent = parent @lines_tested = init_lines_tested @first_line_tested = @lines_tested.first end #Define sort criteria def <=>(test_method) @first_line_tested.<=>(test_method.first_line_tested) end def name regex = /void\s*\S*\(\) / str = @text[regex] str.sub(/void\s*/, '') end def init_lines_tested lines_regex = /Line.*?$/ lines_array = @text.scan(lines_regex) nums_regex = /\d{1,4}/ line_numbers = Array.new lines_array.each do |line_text| number_strings =line_text.scan(nums_regex) number_strings.each {|num_string| line_numbers<