private Process CreateProcess()
        {
            var dummyNodeJSProcessFactory          = new NodeJSProcessFactory(null);
            ProcessStartInfo dummyProcessStartInfo = dummyNodeJSProcessFactory.CreateStartInfo(_dummyLongRunningScript);

            return(dummyNodeJSProcessFactory.CreateProcess(dummyProcessStartInfo));
        }
        public void EscapeCommandLineArg_EscapesCommandLineArgs(string dummyArg, string expectedResult)
        {
            // Arrange
            NodeJSProcessFactory testSubject = CreateNodeJSProcessFactory();

            // Act
            string result = testSubject.EscapeCommandLineArg(dummyArg);

            // Assert
            Assert.Equal(expectedResult, result);
        }
        private Process CreateNodeJSProcess()
        {
            // Get server script
            var    embeddedResourcesService = new EmbeddedResourcesService();
            string serverScript             = embeddedResourcesService.ReadAsString(typeof(HttpNodeJSService), HttpNodeJSService.SERVER_SCRIPT_NAME);

            // Create process
            var nodeJSProcessFactory          = new NodeJSProcessFactory(null);
            ProcessStartInfo processStartInfo = nodeJSProcessFactory.CreateStartInfo(serverScript);

            return(nodeJSProcessFactory.CreateProcess(processStartInfo));
        }
        public void CreateStartInfo_CreatesStartInfo()
        {
            // Arrange
            const string dummyNodeServerScript         = "dummyNodeServerScript";
            const string dummyNodeAndV8Options         = "dummyNodeAndV8Options";
            const int    dummyPort                     = 123; // Arbitrary
            const string dummyProjectPath              = "dummyProjectPath";
            const string dummyEnvironmentVariable      = "dummyEnvironmentVariable";
            const string dummyEnvironmentVariableValue = "dummyEnvironmentVariableValue";
            var          dummyEnvironmentVariables     = new Dictionary <string, string> {
                { dummyEnvironmentVariable, dummyEnvironmentVariableValue }
            };
            var dummyNodeJSProcessOptions = new NodeJSProcessOptions
            {
                NodeAndV8Options     = dummyNodeAndV8Options,
                Port                 = dummyPort,
                ProjectPath          = dummyProjectPath,
                EnvironmentVariables = dummyEnvironmentVariables
            };
            Mock <IOptions <NodeJSProcessOptions> > mockOptionsAccessor = _mockRepository.Create <IOptions <NodeJSProcessOptions> >();

            mockOptionsAccessor.Setup(o => o.Value).Returns(dummyNodeJSProcessOptions);
            NodeJSProcessFactory testSubject = CreateNodeJSProcessFactory(mockOptionsAccessor.Object);

            // Act
            ProcessStartInfo result = testSubject.CreateStartInfo(dummyNodeServerScript);

            // Assert
            int currentProcessPid = Process.GetCurrentProcess().Id;

            Assert.Equal($"{dummyNodeAndV8Options} -e \"{dummyNodeServerScript}\" -- --parentPid {currentProcessPid} --port {dummyPort}", result.Arguments);
            Assert.False(result.UseShellExecute);
            Assert.True(result.RedirectStandardInput);
            Assert.True(result.RedirectStandardOutput);
            Assert.True(result.RedirectStandardError);
            Assert.Equal(dummyProjectPath, result.WorkingDirectory);
            result.Environment.TryGetValue(dummyEnvironmentVariable, out string resultEnvironmentVariableValue);
            Assert.NotNull(resultEnvironmentVariableValue);
            Assert.Equal(dummyEnvironmentVariableValue, resultEnvironmentVariableValue);
        }