Exemple #1
0
 public Documenter(IFileLoader fl, ISourceCodeParser dp, IDocGenerator gen, IOutputWriter ow, ILogger <Documenter> logger)
 {
     this.loader     = fl;
     this.parser     = dp;
     this.generator  = gen;
     this.writer     = ow;
     this.OutputDocs = null;
     this.logger     = logger;
 }
Exemple #2
0
 public Befunge93Context(ISourceCodeParser parser) : base(SupportedCommands, parser)
 {
     for (var i = 0; i < _field.GetLength(0); i++)
     {
         for (var j = 0; j < _field.GetLength(1); j++)
         {
             _field[i, j] = ' ';
         }
     }
 }
 private void CreateParser(ISourceCodeParser codeParser)
 {
     if (customLogger == null)
     {
         var logger = Mock.Of <ILogger>();
         _parser = new Parser(codeParser, logger);
     }
     else
     {
         _parser = new Parser(codeParser, customLogger);
     }
 }
Exemple #4
0
        /// <summary>
        /// Tests whether a class diagram generated from <paramref name="inputCode"/> contains all <paramref name="expectedLines"/>.
        /// (It's order does not matter)
        /// <para>This test method does not confirm that generated diagram constains unexpected lines.</para>
        /// <para>It searches expected texts with ignoring space characters.</para>
        /// </summary>
        /// <param name="parser">Parser to parse <paramref name="inputCode"/></param>
        /// <param name="inputCode">Input source code text to generate a class diagram</param>
        /// <param name="expectedLines">Text lines which is expected to be included in a generated class diagram</param>
        /// <param name="expectedIgnoreLines">Text lines which is expected to be included as commented line in a generated class diagram</param>
        /// <param name="accessFilter">Access level filter</param>
        /// <param name="excludedClasses">Class names to be excluded in a diagram (actually they are included as commented lines in a diagram)</param>
        private static void TestcaseGenerate(ISourceCodeParser parser,
                                             string inputCode,
                                             IEnumerable <string> expectedLines,
                                             IEnumerable <string> expectedIgnoreLines = null,
                                             Modifier accessFilter = Modifiers.AllAccessLevels,
                                             IEnumerable <string> excludedClasses = null)
        {
            var title = "test_title";

            var classes   = parser.Parse(inputCode);
            var relations = RelationFactory.CreateFromClasses(classes);

            var diag = PumlClassDiagramGenerator.Generate(title, classes, relations, accessFilter, excludedClasses);

            diag = Regex.Replace(diag, "\\s+", string.Empty);

            var emptyDiag      = PumlClassDiagramGenerator.Generate(title, null, null);
            var emptyDiagLines = emptyDiag.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                                 .Select(s => Regex.Replace(s, "\\s+", string.Empty));

            var allExpLines = expectedLines
                              .Concat(emptyDiagLines)           // To check common lines
                              .Concat(expectedIgnoreLines?.Select(s => CommentSymbol + s) ?? Enumerable.Empty <string>())
                              .Select(s => Regex.Replace(s, "\\s+", string.Empty));

            foreach (var line in allExpLines)
            {
                // It is OK, if one of patterns generated from a expected line matches a part of input code.
                var patterns       = CreatePatterns(line);
                var matchedPattern = patterns.Where(p => diag.IndexOf(p) >= 0).FirstOrDefault();

                if (matchedPattern == null)
                {
                    Console.WriteLine(diag);
                    AssertEx.Fail($"Expected '{line}' is contained in a generated class diagram"
                                  + $", but actual diagram does not contain it.");
                }

                diag = diag.Remove(diag.IndexOf(matchedPattern), matchedPattern.Length);
            }

            // Remove comment symbol attached to bracket.
            diag = diag.Replace($"{CommentSymbol}{{", "{").Replace($"{CommentSymbol}}}", "}");

            // If all texts are checked, diag is expected to contain only symbols.
            Regex.IsMatch(diag, "^[\\s{}]*$").IsTrue($"Unexpected lines are contained {diag}");
        }
 protected FungeFamilyLanguage(FungeContext executionContext, CommandProducer commandProducer, ISourceCodeParser parser)
 {
     _executionContext = executionContext;
     _commandProducer  = commandProducer;
     _parser           = parser;
 }
Exemple #6
0
 public Befunge_93(CommandProducer commandProducer, ISourceCodeParser parser) : base(new Befunge93Context(parser), commandProducer)
 {
 }
Exemple #7
0
 protected FungeContext(HashSet <char> supportedCommands1, ISourceCodeParser parser)
 {
     _stacks.Push(new Stack <int>());
     _supportedCommands = supportedCommands1;
     Parser             = parser;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="parser">Parser to parse this language's source codes</param>
 /// <param name="extension">File extension of this language</param>
 /// <param name="cmdValues">Command argument values that specifies this language</param>
 public Language(ISourceCodeParser parser, string extension, IEnumerable <string> cmdValues)
 {
     this.Parser    = parser;
     this.Extension = extension;
     this.CmdValues = cmdValues.Select(s => s.ToLower());
 }
        /// <summary>
        /// Generates a class diagram.
        /// </summary>
        /// <param name="title">Title of class diagram</param>
        /// <param name="filePaths">Source code paths</param>
        /// <param name="parser">Parser to parse source codes</param>
        /// <param name="accessLevel">Access level of members written to a class diagram</param>
        /// <param name="excludedClasses">A collection of class names not to be written to a class diagram</param>
        /// <returns>Class diagram described in PlantUML</returns>
        private static string GenerateClassDiagram(string title, IEnumerable <string> filePaths, ISourceCodeParser parser, Modifier accessLevel, IEnumerable <string> excludedClasses)
        {
            var classes = new List <ClassInfo>();

            foreach (var file in filePaths)
            {
                try
                {
                    var content = File.ReadAllText(file);
                    classes.AddRange(parser.Parse(content));
                }
                catch
                {
                    Console.Error.WriteLine($"Skipped (could not open file) : {file}");
                }
            }

            Console.WriteLine($"Parsed classes ... {classes.Count}");

            var relations = RelationFactory.CreateFromClasses(classes);

            return(PumlClassDiagramGenerator.Generate(title ?? string.Empty, classes, relations, accessLevel, excludedClasses));
        }
Exemple #10
0
 public Parser(ISourceCodeParser codeParser, ILogger logger, int threadCount = 8)
 {
     this.codeParser = codeParser;
     this.logger     = logger;
     this.semaphore  = new SemaphoreSlim(threadCount, threadCount);
 }
Exemple #11
0
 public ParserContext SetStratagy(ISourceCodeParser parseStrategy)
 {
     this.parser = parseStrategy ?? throw new ArgumentNullException("parseStrategy is null");
     return(this);
 }
Exemple #12
0
 public ParserContext(ISourceCodeParser parseStrategy)
 {
     this.parser = parseStrategy;
 }