import sun.misc.*;
import java.io.*;

/** A class to test the encoders and decoders using a hard coded string
	Tested encoders and decoders are:
		- BASE64, UC, UU
	HexDumpEncoder doesn't have a corresponding decoder
*/
public class EnDecodeTest {
   public static void main(String[] args) throws IOException {

	// text to encode and decode
      String originalText = "Hi There, please encode and decode me";
	// turn the string into a byte array
      byte[] originalBytes = originalText.getBytes();

	// create all the encoders and decoders for later use
      BASE64Encoder b64E = new BASE64Encoder();
      BASE64Decoder b64D = new BASE64Decoder();
      UCEncoder ucE = new UCEncoder();
      UCDecoder ucD = new UCDecoder();
      UUEncoder uuE = new UUEncoder();
      UUDecoder uuD = new UUDecoder();
      HexDumpEncoder hxE = new HexDumpEncoder();

      System.out.println("Orignl *" + originalText + "*");
      System.out.println("========================================================");

      // do base 64 stuff
      System.out.println();
      String b64Enc = b64E.encodeBuffer(originalBytes);
      System.out.println("Base64 *" + b64Enc + "*");

      String b64Dec = new String(b64D.decodeBuffer(b64Enc));
      System.out.println("Decode *" + b64Dec + "*");

      // do UC stuff
      System.out.println();
      String ucEnc = ucE.encodeBuffer(originalBytes);
      System.out.println("UCEnc  *" + ucEnc + "*");

      String ucDec = new String(ucD.decodeBuffer(ucEnc));
      System.out.println("Decode *" + ucDec + "*");

      // do UU stuff
      System.out.println();
      String uuEnc = uuE.encodeBuffer(originalBytes);
      System.out.println("UUEnc  *" + uuEnc + "*");

	// this will fail under jdk1.1.1 and higher - uncomment if you want to test
      //String uuDec = new String(uuD.decodeBuffer(uuEnc));
      //System.out.println("Decode *" + uuDec + "*");

      // do HexDump stuff
      System.out.println();
      String hxEnc = hxE.encodeBuffer(originalBytes);
      System.out.println("HexEnc *" + hxEnc + "*");

   }
}