You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2003/11/30 02:57:11 UTC

cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/resources PackageTest.java

sebb        2003/11/29 17:57:11

  Added:       src/core/org/apache/jmeter/resources PackageTest.java
  Log:
  Package test for resources
  
  Revision  Changes    Path
  1.1                  jakarta-jmeter/src/core/org/apache/jmeter/resources/PackageTest.java
  
  Index: PackageTest.java
  ===================================================================
  package org.apache.jmeter.resources;
  
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.Enumeration;
  import java.util.List;
  import java.util.PropertyResourceBundle;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  /*
   * Created on Nov 29, 2003
   *
   * Test the composition of the properties files
   * - properties files exist (default, DE, NO, JA)
   * - properties files don't have duplicate keys
   * - non-default properties files have same keys as the default.
   * 
   * N.B. If there is a default resource, ResourceBundle does not detect missing resources,
   * i.e. the presence of messages.properties means that the ResourceBundle for Locale "XYZ"
   * would still be found, and have the same keys as the default. This makes it not very
   * useful for checking properties files.
   * 
   * This is why the tests use Class.getResourceAsStream() etc
   * 
   * The tests don't quite follow the normal JUnit test strategy of one test
   * per possible failure. This was done in order to make it easier to report
   * exactly why the tests failed.
   */
  
  /**
   * @author sebb AT apache DOT org
   * @version $revision$ $date$
   */
  public class PackageTest extends TestCase
  {
  
      private static int defaultListSize;
  
      private static List defaultList = null;
      
      private int countKeys(Enumeration e, List l){
      	int i=0;
      	while (e.hasMoreElements()){
      		i++;
      		l.add(e.nextElement());
      	}
      	return i;
      }
      
      // Read resource into ResourceBundle and store in List
      private int getRAS(String res, List l) throws Exception{
      	InputStream ras = this.getClass().getResourceAsStream(res);
      	PropertyResourceBundle prb = new PropertyResourceBundle(ras);
      	return countKeys(prb.getKeys(),l);
      }
  
      private int readRF(String res, List l) throws Exception
      {//Read resource file and return # of lines; saving the keys
  		int i=0;// no of lines
  		InputStream ras = this.getClass().getResourceAsStream(res);
  		BufferedReader fileReader =
  		new BufferedReader(new InputStreamReader(ras));
         	String s;
          while((s=fileReader.readLine())!=null)
          {
             	if (s.length() > 0)  {
             		l.add(s.substring(0,s.indexOf('=')));
            		i++;
             	}
         	} 
  		return i;
      }
      
      // Helper method to construct resource name
      private static String getResName(String lang){
      	if (lang.length()==0){
  			return "messages.properties";
      	} else {
  			return "messages_"+lang.toLowerCase()+".properties";
      	}
      }
  	
  	private void check(String resname) throws Exception
  	{
  		ArrayList alf = new ArrayList(500);// holds keys from file
  		ArrayList alr = new ArrayList(500);// holds keys from resource
  		String res = getResName(resname);
  		readRF(res,alf);
  		getRAS(res,alr);
  		Collections.sort(alf);
  		Collections.sort(alr);
  		
  		// Look for duplicate keys in the file
  		String last="";
  		for (int i=0;i<alf.size();i++){
  			String curr = (String) alf.get(i);
  			if (curr.equals(last)){
  				subTestFailures++;
  				System.out.println("\nDuplicate key ="+curr+" in "+res);
  			}
  			last=curr;
  		}
  		
  		if (defaultList != null){
  			if (defaultListSize != alr.size()){
  				subTestFailures++;
  				System.out.println("\nKey counts differ: "
  				+getResName("")+"="+defaultListSize+" "+res+"="+alr.size());
  			}
  			if (!defaultList.equals(alr)){
  				subTestFailures++;
  				System.out.println("\nKeys in "
  				+res
  				+" do not match keys in "
  				+getResName("")
  				);
  				for (int i=0;i<alr.size();i++){
  					String d=(String) defaultList.get(i);
  					String a=(String) alr.get(i);
  					if (!d.equals(a)){
  						System.out.println("First difference: "+ a + "!=" + d);
  						break;
  					}
  				}
  			}
  		} else { // must be the default file
  			defaultList = alr;
  			defaultListSize = alr.size();
  		}
  
  		if (subTestFailures > 0) {
  			fail("One or more subtests failed");
  		}
  	}
  	
  	public static Test suite(){
  		TestSuite ts=new TestSuite();
  		ts.addTest(new PackageTest("testDefault"));
  		ts.addTest(new PackageTest("testDE"));
  		ts.addTest(new PackageTest("testNO"));
  		ts.addTest(new PackageTest("testJA"));
  		return ts;
  	}
  
      private int subTestFailures;
  
      public PackageTest(String string)
      {
          super(string);
          subTestFailures=0;
      }
  
      public void testDE() throws Exception
  	{
  		check("DE");
  	}
  
      public void testJA() throws Exception
  	{
  		check("JA");
  	}
  	public void testNO() throws Exception
  	{
  		check("NO");
  	}
  	public void testDefault() throws Exception
  	{
  		check("");
  	}
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org