text: //
  // Getdown - application installer, patcher and launcher
  // Copyright (C) 2004-2018 Getdown authors
  // https://github.com/threerings/getdown/blob/master/LICENSE
  
  package com.threerings.getdown.data;
  
  import java.io.File;
  import java.io.IOException;
  import java.nio.file.Path;
  import java.util.Arrays;
  
  import org.junit.*;
  import org.junit.rules.TemporaryFolder;
  import org.junit.runner.RunWith;
  import static org.junit.Assert.assertEquals;
  
  import org.mockito.Mock;
  import org.mockito.runners.MockitoJUnitRunner;
  import static org.mockito.Mockito.when;
  
  @RunWith(MockitoJUnitRunner.class)
  public class PathBuilderTest
  {
      @Before public void setupFilesAndResources () throws IOException
      {
          _firstJarFile = _appdir.newFile("a.jar");
          _secondJarFile = _appdir.newFile("b.jar");
  
          when(_firstJar.getFinalTarget()).thenReturn(_firstJarFile);
          when(_secondJar.getFinalTarget()).thenReturn(_secondJarFile);
          when(_application.getActiveCodeResources()).thenReturn(Arrays.asList(_firstJar, _secondJar));
          when(_application.getAppDir()).thenReturn(_appdir.getRoot());
      }
  
      @Test public void shouldBuildDefaultClassPath () throws IOException
      {
          ClassPath classPath = PathBuilder.buildDefaultClassPath(_application);
          String expectedClassPath = _firstJarFile.getAbsolutePath() + File.pathSeparator +
              _secondJarFile.getAbsolutePath();
          assertEquals(expectedClassPath, classPath.asArgumentString());
      }
  
      @Test public void shouldBuildCachedClassPath () throws IOException
      {
          when(_application.getDigest(_firstJar)).thenReturn("first");
          when(_application.getDigest(_secondJar)).thenReturn("second");
          when(_application.getCodeCacheRetentionDays()).thenReturn(1);
  
          Path firstCachedJarFile = _appdir.getRoot().toPath().
              resolve(PathBuilder.CODE_CACHE_DIR).resolve("fi").resolve("first.jar");
  
          Path secondCachedJarFile = _appdir.getRoot().toPath().
              resolve(PathBuilder.CODE_CACHE_DIR).resolve("se").resolve("second.jar");
  
          String expectedClassPath = firstCachedJarFile.toAbsolutePath() + File.pathSeparator +
              secondCachedJarFile.toAbsolutePath();
  
          ClassPath classPath = PathBuilder.buildCachedClassPath(_application);
          assertEquals(expectedClassPath, classPath.asArgumentString());
      }
  
      @Mock protected Application _application;
      @Mock protected Resource _firstJar;
      @Mock protected Resource _secondJar;
  
      protected File _firstJarFile, _secondJarFile;
  
      @Rule public TemporaryFolder _appdir = new TemporaryFolder();
  }
  