/*******************************************************************************
 * Copyright (c) 2000, 2016 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Sergey Prigogin, Google
 *******************************************************************************/
package org.eclipse.cdt.ui.tests.text;

import org.eclipse.cdt.internal.ui.text.CWordIterator;

import junit.framework.Test;
import junit.framework.TestSuite;

public class CWordIteratorTest extends BreakIteratorTest {

	public static Test suite() {
		return new TestSuite(CWordIteratorTest.class);
	}

	/*
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		fBreakIterator = new CWordIterator();
	}

	public void testNext1() {
		assertNextPositions("word word", new int[] { 5, 9 });
	}

	public void testNext2() {
		assertNextPositions("wordWord word", new int[] { 4, 9, 13 });
	}

	public void testNextSpace() {
		assertNextPositions(" word ", new int[] { 1, 6 });
	}

	public void testNextParen() {
		assertNextPositions("word(params)", new int[] { 4, 5, 11, 12 });
	}

	public void testNextLn() {
		String s = "word \n" + "  word2";
		assertNextPositions(s, new int[] { 5, 6, 8, 13 });
	}

	public void testMultiNextLn() {
		String s = "word \n" + "\n" + "\n" + "  word2";
		assertNextPositions(s, new int[] { 5, 6, 7, 8, 10, 15 });
	}

	public void testMultiNextLn2() {
		String s = "word \r\n" + "\r\n" + "\r\n" + "  word2";
		assertNextPositions(s, new int[] { 5, 7, 9, 11, 13, 18 });
	}

	public void testNextCamelCaseWord() {
		String s = "   _isURLConnection_pool   ";
		assertNextPositions(s, new int[] { 3, 4, 6, 9, 20, 27 });
	}

	public void testPrevious1() {
		String s = "word word";
		assertPreviousPositions(s, new int[] { 0, 5 });
	}

	public void testPrevious2() {
		String s = "wordWord word";
		assertPreviousPositions(s, new int[] { 0, 4, 9 });
	}

	public void testPreviousSpace() {
		String s = " word ";
		assertPreviousPositions(s, new int[] { 1 });
	}

	public void testPreviousParen() {
		String s = "word(params)";
		assertPreviousPositions(s, new int[] { 0, 4, 5, 11 });
	}

	public void testPreviousLn() {
		String s = "word \n" + "  word2";
		assertPreviousPositions(s, new int[] { 0, 5, 6, 8 });
	}

	public void testMultiPreviousLn() {
		String s = "word \n" + "\n" + "\n" + "  word2";
		assertPreviousPositions(s, new int[] { 0, 5, 6, 7, 8, 10 });
	}

	public void testMultiPreviousLn2() {
		String s = "word \r\n" + "\r\n" + "\r\n" + "  word2";
		assertPreviousPositions(s, new int[] { 0, 5, 7, 9, 11, 13 });
	}

	public void testPreviousCamelCaseWord() {
		String s = "   _isURLConnection_pool   ";
		assertPreviousPositions(s, new int[] { 0, 3, 4, 6, 9, 20 });
	}

}
