示例#1
0
        public void TestFileStructureRule()
        {
            var project = new Project
            {
                Name = "TestProject1",
                Path = @"D:\",
            };
            var context = new ExamContext(project);
            var rule = new FileStructureRule { Template = "default.xml", IsEnabled = true, Name = "FileStructureRule", Description = "FileStructureRule Description" };

            rule.Exam(context);

            Assert.IsTrue(context.Outputs.Count > 0);
            Assert.IsTrue(context.Results.Count > 0);
        }
        public void Update(Project project, Action<Project, Exception> onComplete)
        {
            var exception = null as Exception;

            try
            {
                SaveProject(project, overrideExist: true);
            }
            catch (Exception xe)
            {
                exception = xe;
            }

            if (onComplete != null)
            {
                onComplete.Invoke(project, exception);
            }
        }
        public void Delete(Project project, Action<bool, Exception> onComplete)
        {
            var exception = null as Exception;

            try
            {
                SaveProject(project, delete: true);
            }
            catch (Exception xe)
            {
                exception = xe;
            }

            if (onComplete != null)
            {
                onComplete.Invoke(exception == null, exception);
            }
        }
        public void Create(Project project, Action<Project, Exception> onComplete)
        {
            var exception = null as Exception;

            try
            {
                SaveProject(project);
            }
            catch (Exception xe)
            {
                exception = xe;
            }

            if (onComplete != null)
            {
                onComplete.Invoke(project, exception);
            }
        }
示例#5
0
        /// <summary>
        /// Program entry point.
        /// </summary>
        /// <example>
        /// -r "f:\_E_\SolutionTool" -t default.xml -b "./output/$(Configuration)/" -i "f:\_E_\jb-cl\inspectcode.exe" -l slntool.log
        /// </example>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Debug.Listeners.Add(new ConsoleTraceListener());

            var options = new Options();
            var parser = new Parser();

            if (!Parser.Default.ParseArguments(args, options))
            {
                return;
            }

            Console.WriteLine("Begin checking " + options.Repository);

            var pathOfRepository = Path.GetFullPath(options.Repository);
            var pathOfTemplate = Path.GetFullPath(options.Template);

            if (!Directory.Exists(pathOfRepository))
            {
                Console.WriteLine("Repository directory does not exist: [" + options.Repository + "]");
            }
            if (!File.Exists(pathOfTemplate))
            {
                Console.WriteLine("Template File does not exist: [" + options.Repository + "]");
            }
            else
            {
                var di = new DirectoryInfo(pathOfRepository);
                var fi = new DirectoryInfo(pathOfTemplate);
                var project = new Project { Name = di.Name, Path = pathOfRepository, CreateTime = DateTime.Now, };
                var ruleSet = new RuleSet
                {
                    new FileStructureRule
                    {
                        Name = "File Structure Rule",
                        IsEnabled = true,
                        Template = fi.Name,
                    },
                    new OutputPathRule
                    {
                        Name = "Output Path Rule",
                        IsEnabled = true,
                        Path = options.OutputBuildPath,
                    },
                };

                if (!string.IsNullOrWhiteSpace(options.InspectCodeExePath))
                {
                    ruleSet.Add(new CodeAnalysisRule
                    {
                        Name = "Code Analysis Rule",
                        IsEnabled = true,
                        Path = options.InspectCodeExePath,
                    });
                }

                var ruleRunner = new RuleRunner();

                project.RuleSet = ruleSet;
                ruleRunner.RunProject(project, (report,log) =>
                {
                    if (report != null)
                    {
                        Console.WriteLine(report.GetText());
                    }

                    if (!string.IsNullOrWhiteSpace(options.LogFile))
                    {
                        var logFile = Path.GetFullPath(options.LogFile);

                        using (var sw = File.AppendText(logFile))
                        {
                            sw.Write(report.GetText());
                        }
                    }
                });
            }

            Console.WriteLine("Checking is done. ");

            Console.ReadKey();
        }
        private Exception SaveProject(Project project, bool overrideExist = false, bool delete = false)
        {
            if (project.CreateTime == DateTime.MinValue)
                project.CreateTime = DateTime.Now;

            if (!Directory.Exists(_dir))
            {
                Directory.CreateDirectory(_dir);
            }

            var path = Path.Combine(_dir, project.Name + ".xml");
            var exception = null as Exception;

            if (delete && File.Exists(path))
            {
                File.Delete(path);
            }
            else if (File.Exists(path) && !overrideExist)
            {
                throw new Exception("Project [" + project.Name + "] already exists. ");
            }
            else
            {
                if (overrideExist)
                {
                    File.Delete(path);
                }

                using (var fs = XmlWriter.Create(path))
                {
                    var xs = new XmlSerializer(typeof(Project));

                    xs.Serialize(fs, project);
                }

                list.Insert(0, project);
            }

            return exception;
        }
 void OnCreateComplete(Project project, Exception ex)
 {
     if (ex != null)
     {
         _shellService.MessageService.Show(ex.Message);
     }
     else
     {
         _shellService.Host.Close(CloseResult.Success | CloseResult.RefreshParent);
     }
 }
        private void Init()
        {
            //throw new NotImplementedException();
            Project = new Project() {};

            _ruleManager.LoadRuleSet(OnRuleSetLoaded);
        }
示例#9
0
        public void RunProject(Project project, Action<Report, RunLogItem> onComplete)
        {
            var log = new RunLogItem();

            log.Start = DateTime.Now;
            log.Project = project.Name;

            if (project == null)
            {
                throw new ArgumentException();
            }

            if (project.RuleSet == null)
            {
                throw new Exception("RuleSet is not specified. ");
            }

            var context = new ExamContext(project);

            foreach (var i in project.RuleSet)
            {
                try
                {
                    i.Exam(context);
                }
                catch (Exception e)
                {
                    context.WriteOutput(i.Name, new Output
                    {
                        Summary = e.Message,
                        Details = new List<string>
                        {
                            e.ToString(),
                        },
                    });
                    context.AddResult(new ExamResult()
                    {
                        RuleName = i.Name,
                        Status = ActionStatus.Failed,
                    });
                    context.AddViolation(new Violation
                    {
                        RuleName = i.Name,
                        Description = e.Message,
                    });
                    continue;
                }
            }

            var report = context.GenerateReport();

            var path = SaveReportToFile(report);

            log.End = DateTime.Now;
            log.Status = report.Status;
            log.Report = path;
            log.Rules = project.RuleSet.Count;

            list.Insert(0, log);

            SaveRunlog(log);

            if (onComplete != null)
            {
                onComplete.Invoke(report, log);
            }
        }
示例#10
0
 public void Exam(Project project, Action<ExamResult> onComplete)
 {
 }