/*******************************************************************************
 * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Marc R. Hoffmann - initial API and implementation
 *    
 *******************************************************************************/
package org.jacoco.core.internal.analysis;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;

import org.junit.Before;
import org.junit.Test;

/**
 * Unit tests for {@link StringPool}.
 */
public class StringPoolTest {

	private StringPool pool;

	@Before
	public void setup() {
		pool = new StringPool();
	}

	@Test
	public void testGetStringNull() {
		assertNull(pool.get((String) null));
	}

	@Test
	public void testGetString() {
		final String a = pool.get(new String("JaCoCo"));
		final String b = pool.get(new String("JaCoCo"));

		assertEquals("JaCoCo", a);
		assertEquals("JaCoCo", b);
		assertSame(a, b);
	}

	@Test
	public void testGetArrayNull() {
		assertNull(pool.get((String[]) null));
	}

	@Test
	public void testGetEmptyArray() {
		final String[] arr1 = pool.get(new String[0]);
		final String[] arr2 = pool.get(new String[0]);

		assertEquals(0, arr1.length);
		assertSame(arr1, arr2);
	}

	@Test
	public void testGetArray() {
		final String[] arr1 = pool.get(new String[] { new String("JaCoCo") });
		final String[] arr2 = pool.get(new String[] { new String("JaCoCo") });

		assertEquals(1, arr1.length);
		assertEquals("JaCoCo", arr1[0]);
		assertSame(arr1[0], arr2[0]);
	}

}
