/*
* Copyright 2009 Google Inc.
*
* Licensed 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.
*/
package com.google.eclipse.javascript.jstestdriver.ui.launch;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author shyamseshadri@gmail.com (Shyam Seshadri)
*/
public class TestCaseNameFinder {
// TODO(shyamseshadri): Handle the following case
/*
* TestCase('name', { testMooh: function() {
* }, testMeuh: function() {} });
*
*/
private static final Pattern TESTMETHOD_DECLARATION_PATTERN =
Pattern.compile("\\s*([a-zA-Z_]*)\\.prototype(\\.test.*?)[\\s=].*");
public List<String> getTestCases(File jsFile) throws IOException {
return getTestCases(new FileInputStream(jsFile));
}
public List<String> getTestCases(InputStream jsStream) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(jsStream));
String input = null;
StringBuilder builder = new StringBuilder();
while ((input = reader.readLine()) != null) {
builder.append(input + "\n");
}
String source = builder.toString();
return getTestCases(source);
}
public List<String> getTestCases(String source) {
List<String> testMethods = new ArrayList<String>();
for (String line : source.split("\n")) {
Matcher matcher = TESTMETHOD_DECLARATION_PATTERN.matcher(line);
if (matcher.matches()) {
testMethods.add(matcher.group(1)+matcher.group(2));
}
}
return testMethods;
}
}