package hudson.model; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Mockito.*; /** * @author: <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a> */ public class ItemsTest { private static ItemGroup root; private static ItemGroup foo; private static ItemGroup foo_bar; @BeforeClass public static void itemGroups() { root = mock(ItemGroup.class); when(root.getFullName()).thenReturn(""); foo = mock(ItemGroup.class); when(foo.getFullName()).thenReturn("foo"); foo_bar = mock(ItemGroup.class); when(foo_bar.getFullName()).thenReturn("foo/bar"); } @Test public void getCanonicalName() { assertEquals("foo", Items.getCanonicalName(root, "foo")); assertEquals("foo", Items.getCanonicalName(root, "/foo")); assertEquals("foo/bar", Items.getCanonicalName(root, "foo/bar")); assertEquals("foo/bar", Items.getCanonicalName(foo, "bar")); assertEquals("bar", Items.getCanonicalName(foo, "/bar")); assertEquals("bar", Items.getCanonicalName(foo, "../bar")); assertEquals("foo/bar", Items.getCanonicalName(foo, "./bar")); assertEquals("foo/bar/baz/qux", Items.getCanonicalName(foo_bar, "baz/qux")); assertEquals("foo/baz/qux", Items.getCanonicalName(foo_bar, "../baz/qux")); try { Items.getCanonicalName(root, ".."); fail(); } catch (IllegalArgumentException ex) { assertEquals("Illegal relative path '..' within context ''", ex.getMessage()); } try { Items.getCanonicalName(foo, "../.."); fail(); } catch (IllegalArgumentException ex) { assertEquals("Illegal relative path '../..' within context 'foo'", ex.getMessage()); } try { Items.getCanonicalName(root, "foo/../.."); fail(); } catch (IllegalArgumentException ex) { assertEquals("Illegal relative path 'foo/../..' within context ''", ex.getMessage()); } } @Test public void computeRelativeNamesAfterRenaming() { assertEquals("meu,bu,zo", Items.computeRelativeNamesAfterRenaming("ga", "meu", "ga,bu,zo", root )); assertEquals("ga,bu,zo", Items.computeRelativeNamesAfterRenaming("ga", "meu", "ga,bu,zo", foo_bar )); assertEquals("meu,bu,zo", Items.computeRelativeNamesAfterRenaming("foo/ga", "foo/meu", "ga,bu,zo", foo )); assertEquals("/meu,/bu,/zo", Items.computeRelativeNamesAfterRenaming("ga", "meu", "/ga,/bu,/zo", root )); assertEquals("/meu,/bu,/zo", Items.computeRelativeNamesAfterRenaming("ga", "meu", "/ga,/bu,/zo", foo_bar )); assertEquals("../meu,../bu,../zo", Items.computeRelativeNamesAfterRenaming("ga", "meu", "../ga,../bu,../zo", foo )); assertEquals("../qux/ga,bu,zo", Items.computeRelativeNamesAfterRenaming("foo/baz", "foo/qux", "../baz/ga,bu,zo", foo_bar )); assertEquals("foo-renamed,foo_bar", Items.computeRelativeNamesAfterRenaming("foo", "foo-renamed", "foo,foo_bar", root )); // Handle moves too: assertEquals("../nue/dir/j", Items.computeRelativeNamesAfterRenaming("dir", "nue/dir", "../dir/j", foo)); assertEquals("../dir/j", Items.computeRelativeNamesAfterRenaming("nue/dir", "dir", "../nue/dir/j", foo)); assertEquals("../top2/dir/j", Items.computeRelativeNamesAfterRenaming("top1/dir", "top2/dir", "../top1/dir/j", foo)); assertEquals("nue/dir/j", Items.computeRelativeNamesAfterRenaming("dir", "nue/dir", "dir/j", root)); assertEquals("dir/j", Items.computeRelativeNamesAfterRenaming("nue/dir", "dir", "nue/dir/j", root)); assertEquals("top2/dir/j", Items.computeRelativeNamesAfterRenaming("top1/dir", "top2/dir", "top1/dir/j", root)); assertEquals("/nue/dir/j", Items.computeRelativeNamesAfterRenaming("dir", "nue/dir", "/dir/j", foo)); assertEquals("/dir/j", Items.computeRelativeNamesAfterRenaming("nue/dir", "dir", "/nue/dir/j", foo)); assertEquals("/top2/dir/j", Items.computeRelativeNamesAfterRenaming("top1/dir", "top2/dir", "/top1/dir/j", foo)); assertEquals("sister", Items.computeRelativeNamesAfterRenaming("fooq", "foo", "sister", foo)); assertEquals("/foo/sister", Items.computeRelativeNamesAfterRenaming("fooq", "foo", "/fooq/sister", foo)); } @Test public void getRelativeNameFrom() { assertEquals("foo", Items.getRelativeNameFrom("foo", "")); assertEquals("foo/bar", Items.getRelativeNameFrom("foo/bar", "")); assertEquals("../bar", Items.getRelativeNameFrom("bar", "foo")); assertEquals("../baz", Items.getRelativeNameFrom("foo/baz", "foo/bar")); assertEquals("bar", Items.getRelativeNameFrom("foo/bar", "foo")); assertEquals(".", Items.getRelativeNameFrom("foo/bar", "foo/bar")); assertEquals("../..", Items.getRelativeNameFrom("foo", "foo/bar/baz")); assertEquals("bar/baz", Items.getRelativeNameFrom("foo/bar/baz", "foo")); assertEquals("../quux/hey", Items.getRelativeNameFrom("foo/bar/quux/hey", "foo/bar/baz")); } }