// Path: runAs-common/src/main/java/jetbrains/buildServer/runAs/common/Constants.java
// public class Constants {
//     // Plugin's ids
//     public static final String BUILD_FEATURE_TYPE = "runAs-build-feature";
//     public static final String RUN_AS_TOOL_NAME = "runAs";
// 
//     // Parameter names
//     public static final String USER = "teamcity.runAs.username";
//     public static final String PASSWORD = "secure:teamcity.runAs.password";
//     public static final String CONFIG_PASSWORD = "teamcity.runAs.password";
//     public static final String ADDITIONAL_ARGS = "teamcity.runAs.additionalCommandLine";
//     public static final String RUN_AS_ENABLED = "teamcity.agent.runAs.enabled";
//     public static final String CREDENTIALS_PROFILE_ID = "teamcity.runAs.profileId";
//     public static final String WINDOWS_INTEGRITY_LEVEL = "teamcity.runAs.windowsIntegrityLlevel";
//     public static final String LOGGING_LEVEL = "teamcity.runAs.loggingLevel";
//     public static final String ALLOW_CUSTOM_CREDENTIALS = "teamcity.runAs.allowCustomCredentials";
//     public static final String ALLOW_PROFILE_ID_FROM_SERVER = "teamcity.runAs.allowProfileIdFromServer";
//     public static final String CREDENTIALS_DIRECTORY = "teamcity.runAs.configDir";
//     public static final String RUN_AS_UI_ENABLED = "teamcity.runAs.ui.enabled";
//     public static final String RUN_AS_UI_STEPS_ENABLED = "teamcity.runAs.ui.steps.enabled";
//     public static final String RUN_AS_LOG_ENABLED = "teamcity.runAs.log.enabled";
//     public static final String RUN_AS_ACL = "teamcity.runAs.acl";
//     public static final String RUN_AS_ACL_DEFAULTS_ENABLED = "teamcity.runAs.acl.defaults.enabled";
// }


import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.assertj.core.api.BDDAssertions.then;
import com.intellij.execution.ExecutionException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import jetbrains.buildServer.agent.ToolProvider;
import jetbrains.buildServer.agent.ToolProvidersRegistry;
import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor;
import jetbrains.buildServer.runAs.common.Constants;
import org.jetbrains.annotations.NotNull;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.api.Invocation;
import org.jmock.lib.action.CustomAction;
    myCtx = new Mockery();
    myPluginDescriptor = myCtx.mock(PluginDescriptor.class);
    myToolProvidersRegistry = myCtx.mock(ToolProvidersRegistry.class);
  }

  @Test
  public void shouldGetPath() throws IOException, ExecutionException {
    // Given
    final File pluginRootDir = new File("plugin");
    final File binPath = new File(pluginRootDir, RunAsToolProvider.BIN_PATH);

    final List<ToolProvider> toolProviders = new ArrayList<ToolProvider>();
    myCtx.checking(new Expectations() {{
      oneOf(myPluginDescriptor).getPluginRoot();
      will(returnValue(pluginRootDir));

      oneOf(myToolProvidersRegistry).registerToolProvider(with(any(ToolProvider.class)));
      will(new CustomAction("registerToolProvider") {
        @Override
        public Object invoke(final Invocation invocation) throws Throwable {
          toolProviders.add((ToolProvider)invocation.getParameter(0));
          return null;
        }
      });
    }});

    // When
    createInstance();

    final ToolProvider toolProvider = toolProviders.get(0);
// Path: runAs-common/src/main/java/jetbrains/buildServer/runAs/common/Constants.java
// public class Constants {
//     // Plugin's ids
//     public static final String BUILD_FEATURE_TYPE = "runAs-build-feature";
//     public static final String RUN_AS_TOOL_NAME = "runAs";
// 
//     // Parameter names
//     public static final String USER = "teamcity.runAs.username";
//     public static final String PASSWORD = "secure:teamcity.runAs.password";
//     public static final String CONFIG_PASSWORD = "teamcity.runAs.password";
//     public static final String ADDITIONAL_ARGS = "teamcity.runAs.additionalCommandLine";
//     public static final String RUN_AS_ENABLED = "teamcity.agent.runAs.enabled";
//     public static final String CREDENTIALS_PROFILE_ID = "teamcity.runAs.profileId";
//     public static final String WINDOWS_INTEGRITY_LEVEL = "teamcity.runAs.windowsIntegrityLlevel";
//     public static final String LOGGING_LEVEL = "teamcity.runAs.loggingLevel";
//     public static final String ALLOW_CUSTOM_CREDENTIALS = "teamcity.runAs.allowCustomCredentials";
//     public static final String ALLOW_PROFILE_ID_FROM_SERVER = "teamcity.runAs.allowProfileIdFromServer";
//     public static final String CREDENTIALS_DIRECTORY = "teamcity.runAs.configDir";
//     public static final String RUN_AS_UI_ENABLED = "teamcity.runAs.ui.enabled";
//     public static final String RUN_AS_UI_STEPS_ENABLED = "teamcity.runAs.ui.steps.enabled";
//     public static final String RUN_AS_LOG_ENABLED = "teamcity.runAs.log.enabled";
//     public static final String RUN_AS_ACL = "teamcity.runAs.acl";
//     public static final String RUN_AS_ACL_DEFAULTS_ENABLED = "teamcity.runAs.acl.defaults.enabled";
// }


// Path: runAs-agent/src/test/java/jetbrains/buildServer/runAs/agent/RunAsToolProviderTest.java
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.assertj.core.api.BDDAssertions.then;
import com.intellij.execution.ExecutionException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import jetbrains.buildServer.agent.ToolProvider;
import jetbrains.buildServer.agent.ToolProvidersRegistry;
import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor;
import jetbrains.buildServer.runAs.common.Constants;
import org.jetbrains.annotations.NotNull;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.api.Invocation;
import org.jmock.lib.action.CustomAction;

    myCtx = new Mockery();
    myPluginDescriptor = myCtx.mock(PluginDescriptor.class);
    myToolProvidersRegistry = myCtx.mock(ToolProvidersRegistry.class);
  }

  @Test
  public void shouldGetPath() throws IOException, ExecutionException {
    // Given
    final File pluginRootDir = new File("plugin");
    final File binPath = new File(pluginRootDir, RunAsToolProvider.BIN_PATH);

    final List<ToolProvider> toolProviders = new ArrayList<ToolProvider>();
    myCtx.checking(new Expectations() {{
      oneOf(myPluginDescriptor).getPluginRoot();
      will(returnValue(pluginRootDir));

      oneOf(myToolProvidersRegistry).registerToolProvider(with(any(ToolProvider.class)));
      will(new CustomAction("registerToolProvider") {
        @Override
        public Object invoke(final Invocation invocation) throws Throwable {
          toolProviders.add((ToolProvider)invocation.getParameter(0));
          return null;
        }
      });
    }});

    // When
    createInstance();

    final ToolProvider toolProvider = toolProviders.get(0);
    final String toolPath = toolProvider.getPath(Constants.RUN_AS_TOOL_NAME);