#!/bin/bash
#
# The contents of this file are subject to the terms of the Common Development
# and Distribution License (the License). You may not use this file except in
# compliance with the License.
#
# You can obtain a copy of the License at http://www.netbeans.org/cddl.html
# or http://www.netbeans.org/cddl.txt.
# 
# When distributing Covered Code, include this CDDL Header Notice in each file
# and include the License file at http://www.netbeans.org/cddl.txt.
# If applicable, add the following below the CDDL Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
# 
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
# Microsystems, Inc. All Rights Reserved.

create()
{
   testMethodName="test$1$2";
   echo -e "public void $testMethodName() throws Exception {" >>$output;
   echo -e "    log(\"$testMethodName() start\");" >>$output;
   echo -e "    PrintWriter outputWriter  = null;" >>$output;
   echo -e "    PrintWriter logWriter = null;" >>$output;
   echo -e "    try {" >>$output;
   echo -e "        outputWriter  = new PrintWriter(getRef());" >>$output;
   echo -e "        logWriter = new PrintWriter(getLog());" >>$output;
   echo -e "        new CompletionTest().test(outputWriter, logWriter, \"$text\", $sorted, getDataDir(), \"$project\", \"$sourcefile\", $lineinsource);" >>$output;
   echo -e "    } finally {" >>$output;
   echo -e "        if (outputWriter != null) {" >>$output;
   echo -e "            outputWriter.flush();" >>$output;
   echo -e "        }" >>$output;
   echo -e "        if (logWriter != null) {" >>$output;
   echo -e "            logWriter.flush();" >>$output;
   echo -e "        }" >>$output;
   echo -e "      log(\"$testMethodName() end\");" >>$output;
   echo -e "    }\n" >>$output;
   echo -e "    assertFile(\"Output does not match golden file.\", resolveGoldenFile(\"$proposedGoldenFile\"), new File(getWorkDir(), this.getName() + \".ref\"), null, new LineDiff(false));" >>$output;
   echo -e "}" >>$output;

   testMethodNames="$testMethodNames $testMethodName";
}

go() 
{
   output="CompletionTestPerformer.java";


   rm -f $output;
   touch $output;
   cat >>$output <<END_OF_SOURCE
//This class is automatically generated - DO NOT MODIFY (ever)
/*
 * The contents of this file are subject to the terms of the Common Development
 * and Distribution License (the License). You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
 * or http://www.netbeans.org/cddl.txt.
 * 
 * When distributing Covered Code, include this CDDL Header Notice in each file
 * and include the License file at http://www.netbeans.org/cddl.txt.
 * If applicable, add the following below the CDDL Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * The Original Software is NetBeans. The Initial Developer of the Original
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
 * Microsystems, Inc. All Rights Reserved.
 */
package org.netbeans.test.java.editor.completion;
import java.io.PrintWriter;

import org.openide.filesystems.*;

import org.netbeans.junit.NbTestCase;
import org.netbeans.junit.NbTestSuite;
import org.netbeans.jellytools.JellyTestCase;
import org.netbeans.test.editor.LineDiff;
import java.io.File;

/**This class is automatically generated from <I>config.txt</I> using bash
 * script <I>create</I>. For any changes, change the code generating script
 * and re-generate.
 *
 * Althought this class is runned as a test, there is no real code. This class
 * is only wrapper between xtest and harness independet test code. Main information
 * source is <B>CompletionTest</B> class ({@link CompletionTest}).
 *
 * @see CompletionTest
 */
public class CompletionTestPerformer extends NbTestCase {

    /** Need to be defined because of JUnit */
    public CompletionTestPerformer(String name) {
        super(name);
    }

    protected void setUp() {
        log("CompletionTestPerformer.setUp started.");
        log("CompletionTestPerformer.setUp finished.");
    }

    private String getJDKVersionCode() {
        String specVersion = System.getProperty("java.version");
        
        if (specVersion.startsWith("1.4"))
            return "jdk14";
        
        if (specVersion.startsWith("1.5"))
            return "jdk15";
        
        throw new IllegalStateException("Specification version: " + specVersion + " not recognized.");
    }

    private File resolveGoldenFile(String proposedGoldenFileName) {
        if ("@".equals(proposedGoldenFileName.trim()))
            return getGoldenFile(getJDKVersionCode() + "-" + getName() + ".pass");
        else
            return getGoldenFile(getJDKVersionCode() + "-" + proposedGoldenFileName + ".pass");
    }

END_OF_SOURCE

    testMethodNames="";
while read line; do
   echo $line >/tmp/line.tmp
   name=`cut -d ':' -f 1 </tmp/line.tmp`;
   echo "Creating test case: $name";
   text=`cut -d ':' -f 2 </tmp/line.tmp`;
   sorted=`cut -d ':' -f 3 </tmp/line.tmp`;
   proposedGoldenFile=`cut -d ':' -f 4 </tmp/line.tmp`;
   project=`cut -d ':' -f 5 </tmp/line.tmp`;
   sourcefile=`cut -d ':' -f 6 </tmp/line.tmp`;
   lineinsource=`cut -d ':' -f 7 </tmp/line.tmp`;
   if test "$sorted" == "true"; then
      create $name "sorted";
   else
      if test "$sorted" == "false"; then
          create $name "unsorted";
      else
         echo "Unknown sorted modifier: \"$sorted\"" 1>&2;
      fi;
   fi; 
done;

#   echo -e "    public static NbTestSuite suite() {\nNbTestSuite suite = new NbTestSuite();" >>$output;
#   for method in $testMethodNames; do
#      echo -e "suite.addTest(new CompletionTestPerformer(\"$method\"));" >>$output;
#   done;
#   echo -e "return suite;\n}" >>$output;

   echo -e "}" >>$output;

}

grep -v <config.cfg "^#" | go
