/* * Copyright (C) 2013, Robin Stocker and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at * https://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.lib; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; public class RefDatabaseConflictingNamesTest { private RefDatabase refDatabase = new RefDatabase() { @Override public Map getRefs(String prefix) throws IOException { if (ALL.equals(prefix)) { Map existing = new HashMap<>(); existing.put("refs/heads/a/b", null /* not used */); existing.put("refs/heads/q", null /* not used */); return existing; } return Collections.emptyMap(); } @Override public Ref peel(Ref ref) throws IOException { return null; } @Override public RefUpdate newUpdate(String name, boolean detach) throws IOException { return null; } @Override public RefRename newRename(String fromName, String toName) throws IOException { return null; } @Override public boolean isNameConflicting(String name) throws IOException { return false; } @Override public Ref exactRef(String name) throws IOException { return null; } @Override public List getAdditionalRefs() throws IOException { return null; } @Override public void create() throws IOException { // Not needed } @Override public void close() { // Not needed } }; @Test public void testGetConflictingNames() throws IOException { // new references cannot replace an existing container assertConflictingNames("refs", "refs/heads/a/b", "refs/heads/q"); assertConflictingNames("refs/heads", "refs/heads/a/b", "refs/heads/q"); assertConflictingNames("refs/heads/a", "refs/heads/a/b"); // existing reference is not conflicting assertNoConflictingNames("refs/heads/a/b"); // new references are not conflicting assertNoConflictingNames("refs/heads/a/d"); assertNoConflictingNames("refs/heads/master"); // existing reference must not be used as a container assertConflictingNames("refs/heads/a/b/c", "refs/heads/a/b"); assertConflictingNames("refs/heads/q/master", "refs/heads/q"); } private void assertNoConflictingNames(String proposed) throws IOException { assertTrue("expected conflicting names to be empty", refDatabase .getConflictingNames(proposed).isEmpty()); } private void assertConflictingNames(String proposed, String... conflicts) throws IOException { Set expected = new HashSet<>(Arrays.asList(conflicts)); assertEquals(expected, new HashSet<>(refDatabase.getConflictingNames(proposed))); } }