/*
 * JBoss, by Red Hat.
 * Copyright 2010, Red Hat, Inc., and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.jboss.seam.forge.shell.test.plugins.builtin;

import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.forge.project.Resource;
import org.jboss.seam.forge.shell.Shell;
import org.jboss.seam.forge.test.AbstractShellTest;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.io.File;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;

/**
 * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
 */
@RunWith(Arquillian.class)
public class ChangeDirectoryPluginTest extends AbstractShellTest
{
   @Test
   public void testTildeAliasesHomeDir() throws Exception
   {
      File home = new File(System.getProperty("user.home")).getAbsoluteFile();

      Shell shell = getShell();
      Resource<?> currentDirectory = shell.getCurrentResource();
      assertNotSame(home, currentDirectory.getFullyQualifiedName());

      shell.execute("cd ~");

      currentDirectory = shell.getCurrentResource();
      assertEquals(home, currentDirectory.getFullyQualifiedName());
   }

   @Test
   public void testDotMeansSameDirectory() throws Exception
   {
      Shell shell = getShell();
      shell.execute("cd ~");
      Resource<?> currentDirectory = shell.getCurrentResource();

      shell.execute("cd ./");

      Resource<?> newDir = shell.getCurrentResource();
      assertEquals(currentDirectory.getFullyQualifiedName(), newDir.getFullyQualifiedName());
   }

   @Test
   public void testDoubleDotMeansParentDirectory() throws Exception
   {
      Shell shell = getShell();
      shell.execute("cd ~");

      Resource<?> parentDir = shell.getCurrentResource().getParent();

      shell.execute("cd ../");

      Resource<?> newDir = shell.getCurrentResource();
      assertEquals(newDir.getFullyQualifiedName(), parentDir.getFullyQualifiedName());
   }

   @Test
   public void testReturnToLastDirectory() throws Exception
   {
      Shell shell = getShell();
      shell.execute("cd ~");

      Resource<?> base = shell.getCurrentResource();

      shell.execute("cd ../");
      shell.execute("cd -");

      Resource<?> newDir = shell.getCurrentResource();
      assertEquals(base, newDir);
   }

   @Test
   public void testAbsolutePath() throws Exception
   {
      Shell shell = getShell();
      shell.execute("cd ~");

      Resource<?> currentDirectory = shell.getCurrentResource();
      Resource<?> parent = currentDirectory.getParent();

      String parentPath = parent.getFullyQualifiedName();
      
      shell.execute("cd " + parentPath);

      Resource<?>  newDir = shell.getCurrentResource();
      assertEquals(newDir.getFullyQualifiedName(), parent.getFullyQualifiedName());
   }

}

@@ -1838,24 +1838,42 @@
 NotSame(home
+.getAbsolutePath()
 , currentDir
@@ -2012,16 +2012,34 @@
 als(home
+.getAbsolutePath()
 , curren

fix to test