/*
 * Copyright 2012-present Facebook, 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.facebook.buck.cli;

import static org.junit.Assert.assertSame;

import com.facebook.buck.util.Verbosity;

import org.junit.Test;

/**
 * Unit test for {@link VerbosityParser}.
 */
public class VerbosityParserTest {

  @Test
  public void testVerbosity() {
    assertSame(VerbosityParser.DEFAULT_VERBOSITY, VerbosityParser.parse());
    assertSame(VerbosityParser.DEFAULT_VERBOSITY, VerbosityParser.parse("-v"));
    assertSame(VerbosityParser.DEFAULT_VERBOSITY, VerbosityParser.parse("--verbose"));

    assertSame(Verbosity.COMMANDS_AND_OUTPUT, VerbosityParser.parse("--verbose", "5"));

    assertSame(Verbosity.COMMANDS, VerbosityParser.parse("-v", "2"));

    assertSame(Verbosity.COMMANDS, VerbosityParser.parse("build", "-v", "2", "--num-threads", "4"));
  }
}
