You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by se...@apache.org on 2013/01/29 22:37:52 UTC
svn commit: r1440156 -
/jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java
Author: sebb
Date: Tue Jan 29 21:37:52 2013
New Revision: 1440156
URL: http://svn.apache.org/viewvc?rev=1440156&view=rev
Log:
Add a basic check for missing message property keys
Modified:
jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java
Modified: jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java?rev=1440156&r1=1440155&r2=1440156&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/resources/PackageTest.java Tue Jan 29 21:37:52 2013
@@ -20,6 +20,7 @@ package org.apache.jmeter.resources;
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
@@ -38,6 +39,9 @@ import java.util.PropertyResourceBundle;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -73,7 +77,9 @@ public class PackageTest extends TestCas
private static final String MESSAGES = "messages";
- private static PropertyResourceBundle defaultPRB;
+ private static PropertyResourceBundle defaultPRB; // current default language properties file
+
+ private static PropertyResourceBundle messagePRB; // messages.properties
private static final CharsetEncoder ASCII_ENCODER =
Charset.forName("US-ASCII").newEncoder(); // Ensure properties files don't use special characters
@@ -193,6 +199,9 @@ public class PackageTest extends TestCas
if (defaultPRB == null){
throw new IOException("Could not find required file: "+res);
}
+ if (resourcePrefix.endsWith(MESSAGES)) {
+ messagePRB = defaultPRB;
+ }
} else if (checkUnexpected) {
// Check all the keys are in the default props file
PropertyResourceBundle prb = getRAS(res);
@@ -252,6 +261,10 @@ public class PackageTest extends TestCas
private static void findFile(File file, Set<String> set,
FilenameFilter filenameFilter) {
File[] foundFiles = file.listFiles(filenameFilter);
+ if (foundFiles == null) { // Better error than NPE
+ System.err.println("Not a directory: "+file);
+ return;
+ }
for (File file2 : foundFiles) {
if(file2.isDirectory()) {
findFile(file2, set, filenameFilter);
@@ -262,7 +275,6 @@ public class PackageTest extends TestCas
set.add(absPath2.substring(indexOfOrg, lastIndex));
}
}
-
}
/*
@@ -290,6 +302,7 @@ public class PackageTest extends TestCas
// ts.addTest(new PackageTest("checkI18n", Locale.JAPANESE.toString()));
// ts.addTest(new PackageTest("checkI18n", Locale.SIMPLIFIED_CHINESE.toString()));
// ts.addTest(new PackageTest("checkI18n", Locale.TRADITIONAL_CHINESE.toString()));
+ ts.addTest(new PackageTest("checkResourceReferences", ""));
return ts;
}
@@ -298,7 +311,7 @@ public class PackageTest extends TestCas
private final String lang;
- private final String resourcePrefix; // e.g. "messages"
+ private final String resourcePrefix; // e.g. "/org/apache/jmeter/resources/messages"
public PackageTest(String testName, String _lang) {
this(testName, _lang, MESSAGES);
@@ -385,4 +398,53 @@ public class PackageTest extends TestCas
}
return builder.toString();
}
+
+ // Check that calls to getResString use a valid property key name
+ public void checkResourceReferences() {
+ final AtomicInteger errors = new AtomicInteger(0);
+ findFile(srcFiledir, null, new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ final File file = new File(dir, name);
+ // Look for calls to JMeterUtils.getResString()
+ final Pattern pat = Pattern.compile(".*getResString\\(\"([^\"]+)\"\\).*");
+ if (name.endsWith(".java")) {
+ BufferedReader fileReader;
+ try {
+ fileReader = new BufferedReader(new FileReader(file));
+ String s;
+ while ((s = fileReader.readLine()) != null) {
+ if (s.matches("\\s*//.*")) { // leading comment
+ continue;
+ }
+ Matcher m = pat.matcher(s);
+ if (m.matches()) {
+ final String key = m.group(1);
+ // Resource keys cannot contain spaces, and are forced to lower case
+ String resKey = key.replace(' ', '_'); // $NON-NLS-1$ // $NON-NLS-2$
+ resKey = resKey.toLowerCase(java.util.Locale.ENGLISH);
+ if (!key.equals(resKey)) {
+ System.out.println(file+": non-standard message key: '"+key+"'");
+ }
+ try {
+ messagePRB.getString(resKey);
+ } catch (MissingResourceException e) {
+ System.out.println(file+": missing message key: '"+key+"'");
+ errors.incrementAndGet();
+ }
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+ return file.isDirectory();
+ }
+ });
+ int errs = errors.get();
+ if (errs > 0) {
+ fail("Detected "+errs+" missing message property keys");
+ }
+ }
}