Пример #1
0
        public async Task <CodeAnalysisResult> Analyse(TestingCode code)
        {
            var tempFolder = Path.Combine(Configuration.TempFolderPath, Guid.NewGuid().ToString());

            await CreateDirectoryForAnalysis(code, tempFolder);

            ExecutableCode executableCode = _codeFactory.GetExecutableCode(code);

            Command executionCommand = GetCompilationCommand(executableCode, tempFolder);

            Command analysisCommand = ModifyCommandForAnalysis(executionCommand);

            ContainerExecutionResult containerExecutionResult = await _executor.ExecuteAsync(analysisCommand);

            CodeAnalysisResult codeAnalysis = new CodeAnalysisResult();

            if (containerExecutionResult.Result == ExecutionResult.Success)
            {
                codeAnalysis = AnalyseOutput(containerExecutionResult);
            }

            Directory.Delete(tempFolder, true);

            return(codeAnalysis);
        }
Пример #2
0
        protected virtual async Task CreateDirectoryForAnalysis(TestingCode code, string tempFolder)
        {
            Directory.CreateDirectory(tempFolder);

            await File.WriteAllTextAsync(
                Path.Combine(tempFolder, Configuration.FileName + code.Language.GetExtension()), code.Text);
        }
Пример #3
0
        private ExecutableCode GetCodeType <T>(TestingCode code) where T : ExecutableCode
        {
            var executableCode = _serviceProvider.GetRequiredService <T>();

            _mapper.Map(code, executableCode);

            return(executableCode);
        }
        public void SetUp()
        {
            _mockStack = Substitute.For <IStackTraceView>();
            _mockCode  = Substitute.For <ICodeView>();

            _code = new TestingCode(_mockStack, _mockCode);

            return;
        }
        public void SetUp()
        {
            _mockStack = Substitute.For<IStackTraceView>();
            _mockCode = Substitute.For<ICodeView>();

            _code = new TestingCode(_mockStack, _mockCode);

            return;
        }
Пример #6
0
        public Task <CodeExecutionResult> ExecuteCodeAsync(TestingCode code)
        {
            var results = new[]
            {
                GetErrorResult(),
                GetSuccessResult()
            };

            return(Task.FromResult(results[Random.Next(results.Length)]));
        }
Пример #7
0
        public async Task <CodeTestingResult> TestCode(TestingCode code)
        {
            var result = new CodeTestingResult
            {
                CodeAnalysisResult = await _codeAnalysisApi.AnalyzeCodeAsync(code),
                Score = (byte)Random.Next(1, 100 + 1)
            };

            if (result.CodeAnalysisResult.IsSuccessful)
            {
                result.CodeExecutionResult = await _codeExecutionApi.ExecuteCodeAsync(code);
            }

            return(result);
        }
Пример #8
0
        public void SetUp()
        {
            Panel fakeStackControl = new Panel();
            Panel fakeCodeControl  = new Panel();

            _mockStack = new DynamicMock(typeof(IStackTraceView));
            _mockCode  = new DynamicMock(typeof(ICodeView));

            _mockStack.SetReturnValue("ToControl", fakeStackControl);
            _mockCode.SetReturnValue("ToControl", fakeCodeControl);

            _code = new TestingCode(
                (IStackTraceView)_mockStack.MockInstance,
                (ICodeView)_mockCode.MockInstance);

            return;
        }
        public void SetUp()
        {
            Panel fakeStackControl = new Panel();
            Panel fakeCodeControl = new Panel();

            _mockStack = new DynamicMock(typeof(IStackTraceView));
            _mockCode = new DynamicMock(typeof(ICodeView));

            _mockStack.SetReturnValue("ToControl", fakeStackControl);
            _mockCode.SetReturnValue("ToControl", fakeCodeControl);

            _code = new TestingCode(
                (IStackTraceView)_mockStack.MockInstance,
                (ICodeView)_mockCode.MockInstance);

            return;
        }
Пример #10
0
        public ExecutableCode GetExecutableCode(TestingCode code)
        {
            switch (code.Language)
            {
            case Language.Js:
                return(GetCodeType <JavaScriptCode>(code));

            case Language.Php:
                return(GetCodeType <PhpCode>(code));

            case Language.Pascal:
                return(GetCodeType <PascalCode>(code));

            case Language.CPlusPlus:
                return(GetCodeType <CPlusPlusCode>(code));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #11
0
        public CodeAnalyzer GetCodeAnalyzer(TestingCode code)
        {
            switch (code.Language)
            {
            case Language.Unspecified:
                throw new ArgumentException($"Programming language is unspecified", nameof(code));

            case Language.Js:
                return(_serviceProvider.GetRequiredService <JavaScriptCodeAnalyzer>());

            case Language.Php:
                return(_serviceProvider.GetRequiredService <PhpCodeAnalyzer>());

            case Language.Pascal:
                return(_serviceProvider.GetRequiredService <PascalCodeAnalyzer>());

            case Language.CPlusPlus:
                return(_serviceProvider.GetRequiredService <CPlusPlusCodeAnalyzer>());

            default:
                throw new NotImplementedException("Current programming language is not supported yet");
            }
        }
Пример #12
0
        public async Task <CodeTestingResult> GetCodeQuality(TestingCode code)
        {
            var codeAnalyzer = _codeAnalyzerFactory.GetCodeAnalyzer(code);

            var codeAnalysisResult = await codeAnalyzer.Analyse(code);

            var codeTestingResult = new CodeTestingResult
            {
                CodeAnalysisResult = codeAnalysisResult
            };

            if (!codeAnalysisResult.IsSuccessful)
            {
                return(codeTestingResult);
            }

            var executableCode = _executableCodeFactory.GetExecutableCode(code);

            codeTestingResult.CodeExecutionResult = await _codeExecutor.ExecuteAsync(executableCode);

            codeTestingResult.Score = GetFinalScore(codeTestingResult, code.Language);

            return(codeTestingResult);
        }
Пример #13
0
 public async Task <CodeAnalysisResult> AnalyzeCodeAsync(TestingCode code) =>
 await PostToApi <CodeAnalysisResult>(_codeAnalysisApiPath, code);
Пример #14
0
        public async Task <CodeAnalysisResult> AnalyzeCodeAsync([FromBody] TestingCode code)
        {
            CodeAnalyzer codeAnalyzer = _codeAnalyzerFactory.GetCodeAnalyzer(code);

            return(await codeAnalyzer.Analyse(code));
        }
        protected override async Task CreateDirectoryForAnalysis(TestingCode code, string tempFolder)
        {
            await base.CreateDirectoryForAnalysis(code, tempFolder);

            Configuration.EsLintFolder.CopyFolderTo(tempFolder);
        }
Пример #16
0
 public Task <CodeAnalysisResult> AnalyzeCodeAsync(TestingCode code)
 {
     return(Task.FromResult(GetCodeAnalysisResult()));
 }
        public async Task <CodeExecutionResult> ExecuteCodeAsync(TestingCode code)
        {
            var executableCode = _codeFactory.GetExecutableCode(code);

            return(await _codeExecutor.ExecuteAsync(executableCode));
        }
 public Task <CodeTestingResult> TestCode([FromBody] TestingCode code) =>
 _codeQualityRater.GetCodeQuality(code);
Пример #19
0
 public async Task <CodeExecutionResult> ExecuteCodeAsync(TestingCode code) =>
 await PostToApi <CodeExecutionResult>(_codeExecutionApiPath, code);
Пример #20
0
 public async Task <CodeTestingResult> TestCode(TestingCode code) =>
 await PostToApi <CodeTestingResult>(_codeTesterApiPath, code);