| /******************************************************************************* |
| * Copyright (c) 2013, 2016 Tomasz Zarna and others. |
| * 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: |
| * Tomasz Zarna <tzarna@gmail.com> - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.releng.tests; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.File; |
| import java.text.ParseException; |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IProjectDescription; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.egit.core.op.ConnectProviderOperation; |
| import org.eclipse.jgit.api.Git; |
| import org.eclipse.jgit.lib.Constants; |
| import org.eclipse.jgit.lib.PersonIdent; |
| import org.eclipse.jgit.lib.Repository; |
| import org.eclipse.jgit.util.FileUtils; |
| import org.eclipse.releng.tools.git.GitCopyrightAdapter; |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| public class GitCopyrightAdapterTest extends LocalDiskRepositoryTest { |
| |
| private static final IProgressMonitor NULL_MONITOR = new NullProgressMonitor(); |
| |
| private static final String PROJECT_NAME = "Project"; |
| |
| private static final String FILE1_NAME = "Foo.java"; |
| |
| private static final String FILE2_NAME = "Bar.java"; |
| |
| private Repository db; |
| |
| private File trash; |
| |
| private File gitDir; |
| |
| private IProject project; |
| |
| private IFile file1; |
| |
| @Override |
| @Before |
| public void setUp() throws Exception { |
| super.setUp(); |
| db = createWorkRepository(); |
| trash = db.getWorkTree(); |
| gitDir = new File(trash, Constants.DOT_GIT); |
| project = createProject(PROJECT_NAME); |
| file1 = project.getFile(FILE1_NAME); |
| connect(); |
| } |
| |
| @Override |
| @After |
| public void tearDown() throws Exception { |
| if (project.exists()) |
| project.delete(true, true, NULL_MONITOR); |
| if (gitDir.exists()) |
| FileUtils.delete(gitDir, FileUtils.RECURSIVE | FileUtils.RETRY); |
| super.tearDown(); |
| } |
| |
| @Test |
| public void testLastModifiedYear() throws Exception { |
| final Git git = new Git(db); |
| try { |
| git.add().addFilepattern(PROJECT_NAME + "/" + FILE1_NAME).call(); |
| final PersonIdent committer2011 = new PersonIdent(committer, getDateForYear(2011)); |
| git.commit().setMessage("old commit").setCommitter(committer2011).call(); |
| git.add().addFilepattern(PROJECT_NAME + "/" + FILE2_NAME).call(); |
| git.commit().setMessage("new commit").call(); |
| } finally { |
| git.close(); |
| } |
| |
| final GitCopyrightAdapter adapter = new GitCopyrightAdapter( |
| new IResource[] { project }); |
| adapter.initialize(NULL_MONITOR); |
| final int lastModifiedYear = adapter.getLastModifiedYear(file1, |
| NULL_MONITOR); |
| |
| Assert.assertEquals(2011, lastModifiedYear); |
| } |
| |
| @Test |
| public void testCopyrightUpdateComment() throws Exception { |
| final Git git = new Git(db); |
| try { |
| git.add().addFilepattern(PROJECT_NAME + "/" + FILE1_NAME).call(); |
| git.commit().setMessage("copyright update").call(); |
| |
| } finally { |
| git.close(); |
| } |
| final GitCopyrightAdapter adapter = new GitCopyrightAdapter( |
| new IResource[] { project }); |
| adapter.initialize(NULL_MONITOR); |
| final int lastModifiedYear = adapter.getLastModifiedYear(file1, |
| NULL_MONITOR); |
| |
| Assert.assertEquals(0, lastModifiedYear); |
| } |
| |
| private IProject createProject(String name) throws Exception { |
| final IProject project = ResourcesPlugin.getWorkspace().getRoot() |
| .getProject(name); |
| if (project.exists()) |
| project.delete(true, null); |
| final IProjectDescription desc = ResourcesPlugin.getWorkspace() |
| .newProjectDescription(name); |
| desc.setLocation(new Path(new File(db.getWorkTree(), name).getPath())); |
| project.create(desc, null); |
| project.open(null); |
| |
| final IFile file1 = project.getFile(FILE1_NAME); |
| file1.create( |
| new ByteArrayInputStream("Hello, world".getBytes(project |
| .getDefaultCharset())), false, null); |
| |
| final IFile file2 = project.getFile(FILE2_NAME); |
| file2.create( |
| new ByteArrayInputStream("Hi there".getBytes(project |
| .getDefaultCharset())), false, null); |
| return project; |
| } |
| |
| private void connect() throws CoreException { |
| new ConnectProviderOperation(project, gitDir).execute(null); |
| } |
| |
| private Date getDateForYear(int year) throws ParseException { |
| final SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); |
| return formatter.parse(Integer.toString(year) + "/6/30"); |
| } |
| |
| } |