/*
 * 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.gwt.dev;

import junit.framework.TestCase;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

/**
 * Base class for argument processor testing.
 */
public abstract class ArgProcessorTestBase extends TestCase {

  protected static void assertProcessFailure(ArgProcessorBase argProcessor,
      String stringContainedInErrorMessage, String[] args) {
    PrintStream oldErrStream = System.err;
    ByteArrayOutputStream myErrStream = new ByteArrayOutputStream();
    try {
      System.setErr(new PrintStream(myErrStream, true));
      assertFalse(argProcessor.processArgs(args));
    } finally {
      System.err.flush();
      System.setErr(oldErrStream);
    }
    String outputString = new String(myErrStream.toByteArray()).split("[\n\r]")[0];
    assertFalse(outputString.isEmpty());

    assertTrue("\"" + stringContainedInErrorMessage + "\" is not part of the error message: \""
        + outputString + "\"", outputString.contains(stringContainedInErrorMessage));
  }

  protected static void assertProcessSuccess(ArgProcessorBase argProcessor,
      String... args) {
    PrintStream oldErrStream = System.err;
    ByteArrayOutputStream myErrStream = new ByteArrayOutputStream();
    try {
      System.setErr(new PrintStream(myErrStream, true));
      if (!argProcessor.processArgs(args)) {
        fail(new String(myErrStream.toByteArray()));
      }
      assertEquals(0, myErrStream.size());
    } finally {
      System.setErr(oldErrStream);
    }
  }
}
