package edu.umd.cs.findbugs.ml;

import java.util.Collection;

import junit.framework.Assert;
import junit.framework.TestCase;

public class SplitCamelCaseIdentifierTest extends TestCase {
	SplitCamelCaseIdentifier splitter;
	SplitCamelCaseIdentifier splitter2;
	SplitCamelCaseIdentifier splitterLong;
	SplitCamelCaseIdentifier allLower;
	SplitCamelCaseIdentifier allUpper;
	SplitCamelCaseIdentifier capitalized;


	@Override
	protected void setUp() throws Exception {
		splitter = new SplitCamelCaseIdentifier("displayGUIWindow");
		splitter2 = new SplitCamelCaseIdentifier("DisplayGUIWindow");
		splitterLong = new SplitCamelCaseIdentifier("nowIsTheWINTEROfOURDiscontent");
		allLower = new SplitCamelCaseIdentifier("foobar");
		allUpper = new SplitCamelCaseIdentifier("NSA");
		capitalized = new SplitCamelCaseIdentifier("Maryland");
	}

	public void testSplit() {
		Collection<String> words = splitter.split();
		checkContents(words, new String[]{"display","gui","window"});
	}

	public void testSplit2() {
		Collection<String> words = splitter2.split();
		checkContents(words, new String[]{"display","gui","window"});
	}

	public void testSplitLong() {
		Collection<String> words = splitterLong.split();
		checkContents(words, new String[]{"now","is","the","winter","of","our","discontent"});
	}

	public void testAllLower() {
		Collection<String> words = allLower.split();
		checkContents(words, new String[]{"foobar"});
	}

	public void testAllUpper() {
		Collection<String> words = allUpper.split();
		checkContents(words, new String[]{"nsa"});
	}

	public void testCapitalized() {
		Collection<String> words = capitalized.split();
		checkContents(words, new String[]{"maryland"});
	}

	private void checkContents(Collection<String> words, String[] expected) {
		Assert.assertEquals( expected.length, words.size());
		for (String anExpected : expected) {
			Assert.assertTrue(words.contains(anExpected));
		}
	}
}
