blob: bfec48bc0cf706559fd00f0d35b09c847e28bc4f [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2011, Robin Stocker <robin@nibor.org>
* Copyright (C) 2013, Michael Keppler <michael.keppler@gmx.de>
* Copyright (C) 2015, Thomas Wolf <thomas.wolf@paranor.ch>
*
* All rights reserved. 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
*******************************************************************************/
package org.eclipse.egit.ui.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.egit.core.test.TestProject;
import org.junit.Test;
/**
* Tests for {@link CommonUtils}.
*/
public class CommonUtilsTest {
@Test
public void sortingShouldWorkForEasyStrings() {
assertSortedLike("", "");
assertSortedLike("", "a");
assertSortedLike("a", "asdf");
assertSortedLike("aaa", "bbb");
assertSortedLike("1", "2");
}
@Test
public void sortingShouldWorkForEqualAndEmptyStrings() {
assertEquals(0, CommonUtils.STRING_ASCENDING_COMPARATOR.compare("", ""));
assertEquals(0,
CommonUtils.STRING_ASCENDING_COMPARATOR.compare("a", "a"));
assertTrue(CommonUtils.STRING_ASCENDING_COMPARATOR.compare("", "a") < 0);
assertTrue(CommonUtils.STRING_ASCENDING_COMPARATOR.compare("a", "") > 0);
}
@Test
public void sortingShouldWorkForNumbers() {
assertSortedLike("2", "10", "100");
}
@Test
public void sortingShouldWorkForMixedParts() {
assertSortedLike("v1c", "v2b", "v10a");
assertSortedLike("asdf", "asdf2", "asdf10");
assertSortedLike("1_1", "1_10");
assertSortedLike("project-1-0-0-final", "project-1-0-1-beta");
assertSortedLike("1-a", "01-b");
assertSortedLike("1", "asdf-2", "asdf-10", "b20");
}
@Test
public void sortingShouldWorkForBigNumbers() {
assertSortedLike("100000000", "100000000000", "100000000000");
}
@Test
public void sortingShouldIgnoreLeadingZeros() {
assertSortedLike("00001", "2", "3");
assertSortedLike("a-01", "a-002");
assertNotEquals(0,
CommonUtils.STRING_ASCENDING_COMPARATOR.compare("01", "1"));
assertNotEquals(0,
CommonUtils.STRING_ASCENDING_COMPARATOR.compare("1", "01"));
assertTrue(CommonUtils.STRING_ASCENDING_COMPARATOR.compare("01x", "1") > 0);
assertTrue(CommonUtils.STRING_ASCENDING_COMPARATOR.compare("01", "1x") < 0);
}
@Test
public void sortingShouldIgnoreCase() {
assertSortedLike("a", "b", "z");
assertSortedLike("a", "B", "c", "D");
assertNotEquals(0,
CommonUtils.STRING_ASCENDING_COMPARATOR.compare("b1", "B1"));
}
/**
* Assert that sorting the given strings keeps the same order as passed.
*
* @param inputs
*/
private void assertSortedLike(String... inputs) {
List<String> expected = Arrays.asList(inputs);
List<String> tmp = new ArrayList<>(expected);
Collections.shuffle(tmp, new Random(1));
Collections.sort(tmp, CommonUtils.STRING_ASCENDING_COMPARATOR);
assertEquals(expected, tmp);
List<String> expectedWithoutDuplicates = new ArrayList<>(
new LinkedHashSet<>(expected));
List<String> shuffeled = new ArrayList<>(expected);
Collections.shuffle(shuffeled, new Random(1));
TreeSet<String> sortedSet = new TreeSet<>(
CommonUtils.STRING_ASCENDING_COMPARATOR);
sortedSet.addAll(shuffeled);
assertEquals(expectedWithoutDuplicates,
new ArrayList<>(sortedSet));
}
@Test
public void testResourceCompare() throws Exception {
// we just want to test that we can call the JFace resource name
// comparator which itself is tested by JFace
TestProject p = new TestProject();
p.createFolder("test");
IFile f1 = p.createFile("test/z.txt", "z".getBytes("UTF-8"));
IFile f2 = p.createFile("test/d.txt", "d".getBytes("UTF-8"));
IFile f3 = p.createFile("test/a.txt", "a".getBytes("UTF-8"));
List<IResource> expected = Arrays
.asList(new IResource[] { f3, f2,
f1 });
List<IResource> tmp = new ArrayList<>(expected);
Collections.shuffle(tmp, new Random(1));
Collections.sort(tmp, CommonUtils.RESOURCE_NAME_COMPARATOR);
assertEquals(expected, tmp);
// Clean up our mess
IProgressMonitor monitor = new NullProgressMonitor();
f1.delete(false, monitor);
f2.delete(false, monitor);
f3.delete(false, monitor);
p.getProject().getFolder("test").delete(false, monitor);
p.getProject().delete(false, monitor);
}
@Test
public void testFooterOffsetNoFooter() {
assertEquals(-1, CommonUtils.getFooterOffset(""));
assertEquals(-1, CommonUtils.getFooterOffset("line 1"));
assertEquals(-1, CommonUtils.getFooterOffset("line 1\nFoobar"));
assertEquals(-1, CommonUtils.getFooterOffset("line 1\n\nFoobar"));
assertEquals(-1, CommonUtils.getFooterOffset("line 1\nFoo:bar"));
assertEquals(-1, CommonUtils.getFooterOffset("line 1\n_\nFoo:bar"));
}
@Test
public void testFooterOffset() {
assertEquals(8, CommonUtils.getFooterOffset("line 1\n\nFoo:bar"));
assertEquals(8, CommonUtils.getFooterOffset("line 1\n\nFoo:bar "));
assertEquals(8, CommonUtils.getFooterOffset("line 1\n\nFoo:bar\n "));
assertEquals(8, CommonUtils.getFooterOffset("line 1\n\nFoo:bar\n \n"));
assertEquals(8, CommonUtils
.getFooterOffset("line 1\n\nFoo:bar\nFoobar: barbar"));
assertEquals(8, CommonUtils
.getFooterOffset("line 1\n\nFoo:bar\nFoobar: barbar "));
assertEquals(8, CommonUtils
.getFooterOffset("line 1\n\nFoo:bar\nFoobar: barbar\n "));
assertEquals(10,
CommonUtils.getFooterOffset("line 1\n \nFoo:bar\n \n"));
assertEquals(17, CommonUtils
.getFooterOffset("line 1\n\nFoo:bar\n\nFoobar: barbar\n "));
}
}