/** * Copyright (c) 2010, 2012 Darmstadt University of Technology. * 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: * Marcel Bruch - initial API and implementation. */ package org.eclipse.recommenders.subwords.rcp.it; import static junit.framework.Assert.assertEquals; import static org.hamcrest.Matchers.is; import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import org.eclipse.recommenders.internal.subwords.rcp.LCSS; import org.junit.Ignore; import org.junit.Test; @SuppressWarnings({ "deprecation", "restriction" }) public class LCSSTest { @Test public void testOneWord() { assertEquals(1, LCSS.findSequences("", "").size()); assertEquals(0, LCSS.findSequences("", "a").size()); assertEquals(1, LCSS.findSequences("a", "").size()); assertEquals(1, LCSS.findSequences("a", "a").size()); assertEquals(0, LCSS.findSequences("a", "b").size()); assertEquals(2, LCSS.findSequences("aa", "a").size()); assertEquals(0, LCSS.findSequences("aa", "b").size()); assertEquals(1, LCSS.findSequences("aa", "aa").size()); assertEquals(0, LCSS.findSequences("aa", "ba").size()); assertEquals(1, LCSS.findSequences("aaa", "aaa").size()); assertEquals(4, LCSS.findSequences("aaaa", "aaa").size()); assertEquals(1, LCSS.findSequences("ab", "ab").size()); assertEquals(0, LCSS.findSequences("ab", "de").size()); assertEquals(1, LCSS.findSequences("abcd", "ab").size()); assertEquals(1, LCSS.findSequences("abcd", "bc").size()); assertEquals(1, LCSS.findSequences("abcd", "cd").size()); assertEquals(0, LCSS.findSequences("ab", "abcd").size()); assertEquals(0, LCSS.findSequences("bc", "abcd").size()); assertEquals(0, LCSS.findSequences("cd", "abcd").size()); assertEquals(1, LCSS.findSequences("abcd", "ab").size()); assertEquals(1, LCSS.findSequences("abcd", "abc").size()); assertEquals(1, LCSS.findSequences("abcd", "bcd").size()); assertEquals(1, LCSS.findSequences("xyz", "xy").size()); assertEquals(0, LCSS.findSequences("xy", "xyxy").size()); assertEquals(3, LCSS.findSequences("xyxy", "xy").size()); assertEquals(3, LCSS.findSequences("xyzabxy", "xy").size()); } @Test public void testMultipleWords() { assertEquals(1, LCSS.findSequences("aaBaaCaaDaa", "caa").size()); assertEquals(1, LCSS.findSequences("aaBaaCaaDaa", "cdaa").size()); assertEquals(2, LCSS.findSequences("aaBaaCaaDaa", "badaa").size()); // ba_* & b_a* assertEquals(1, LCSS.findSequences("initializeDialogUnits", "dial").size()); assertEquals(2, LCSS.findSequences("setDateData", "dat").size()); } @Test public void testBug001() { List<int[]> s = LCSS.findSequences("newLabeledStatement", "le"); assertEquals(2, s.size()); assertTrue(Arrays.equals(s.get(0), new int[] { 3, 6 })); assertTrue(Arrays.equals(s.get(1), new int[] { 3, 8 })); } @Test public void testPackages() { List<int[]> s = LCSS.findSequences("com.apple.coxcurrent", "comcon"); assertEquals(1, s.size()); } @Test public void testConstants() { List<int[]> s = LCSS.findSequences("DLM_IMG_HELP", "el"); assertEquals(0, s.size()); } @Test public void testUnderscore() { List<int[]> s = LCSS.findSequences("FF_HELP", "FF_"); assertEquals(1, s.size()); assertTrue(Arrays.equals(s.get(0), new int[] { 0, 1, 2 })); } @Test public void testTypeNames() { assertEquals(1, LCSS.findSequences("StringBuilder", "sb").size()); assertEquals(1, LCSS.findSequences("StringBuilder", "sbu").size()); assertEquals(0, LCSS.findSequences("String", "tri").size()); assertEquals(0, LCSS.findSequences("LinkedList", "inkedList").size()); assertEquals(1, LCSS.findSequences("ArrayList", "list").size()); } @Test public void testSubsequence01() { assertEquals(1, LCSS.findSequences("createTempFile", "tmp").size()); } @Ignore("Ignore for now as this bug is independent of change <https://git.eclipse.org/r/#/c/27289/>, which it blocks") @Test public void testBug436078() { assertThat(LCSS.containsSubsequence("ZipOutputStream", "Ziu"), is(true)); } }