/**
 * Logback: the reliable, generic, fast and flexible logging framework.
 * Copyright (C) 1999-2013, QOS.ch. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
 */
package ch.qos.logback.core.util;

import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import org.junit.Test;


/**
 * Unit tests for {@link StringCollectionUtil}.
 *
 * @author Carl Harris
 */
public class StringCollectionUtilTest {

  @Test
  public void testRetainMatchingWithNoPatterns() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.retainMatching(values);
    assertTrue(values.contains("A"));
  }

  @Test
  public void testRetainMatchingWithMatchingPattern() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.retainMatching(values, "A");
    assertTrue(values.contains("A"));
  }

  @Test
  public void testRetainMatchingWithNoMatchingPattern() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.retainMatching(values, "B");
    assertTrue(values.isEmpty());
  }

  @Test
  public void testRemoveMatchingWithNoPatterns() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.removeMatching(values);
    assertTrue(values.contains("A"));
  }

  @Test
  public void testRemoveMatchingWithMatchingPattern() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.removeMatching(values, "A");
    assertTrue(values.isEmpty());
  }

  @Test
  public void testRemoveMatchingWithNoMatchingPattern() throws Exception {
    Collection<String> values = stringToList("A");
    StringCollectionUtil.removeMatching(values, "B");
    assertTrue(values.contains("A"));
  }

  @SuppressWarnings("unchecked")
  private List<String> stringToList(String... values) {
    List<String> result = new ArrayList<String>(values.length);
    result.addAll(Arrays.asList(values));
    return result;
  }

}
