Exemplo n.º 1
0
        public void GetSkippedBlocks_IfSingleElifDirectiveWithElifDirectiveFalse_SkippedBlockIncludesElifBlock()
        {
            File.WriteAllText(sourceFilePath,
                              @"#define X 1
#define Y 0
#define Z 0
#if X 
#define foo x*y
#elif Z + 0
#define foo x+y
#elif Y
#define foo x/y
#elif Z
#define foo x-y
#endif
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();

                var skippedBlock = skippedBlocks.First();
                Assert.AreEqual(6, skippedBlock.Item1);
                Assert.AreEqual(12, skippedBlock.Item2);
            }
        }
Exemplo n.º 2
0
        public void GetSkippedBlocks_TwoIfBlocksBothFalse_SkippedBlockIncludesBothBlocks()
        {
            File.WriteAllText(sourceFilePath,
                              @"#if 0
#define foo x+y
#endif
#if 0
#define foo x-y
#endif
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock  = skippedBlocks.First();
                Assert.AreEqual(1, skippedBlock.Item1);
                Assert.AreEqual(3, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(1);
                Assert.AreEqual(4, skippedBlock.Item1);
                Assert.AreEqual(6, skippedBlock.Item2);
            }
        }
Exemplo n.º 3
0
        public void GetSkippedBlocks_IfMultipleElifDirectiveWithIfDirectiveFalseAndSecondElifDirectiveTrue_SkippedBlockIncludesSecondElifBlock()
        {
            File.WriteAllText(sourceFilePath,
                              @"#define X 0
#define Y 0
#define Z 2
#if X 
#define foo x*y
#elif Y
#define foo x/y
#elif Z
#define foo x-y
#endif
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock  = skippedBlocks.First();
                Assert.AreEqual(4, skippedBlock.Item1);
                Assert.AreEqual(8, skippedBlock.Item2);
            }
        }
Exemplo n.º 4
0
        public void GetSkippedBlocks_IfDefinedBlockWithDefinedMacro_SkippedBlockIncludesIfDefinedBlock()
        {
            File.WriteAllText(sourceFilePath,
                              @"#if defined(__GNUC__)
#  include <avr/io.h>
#elif defined(__ICCAVR__)
#  include <ioavr.h>
#  include <intrinsics.h>
#else
#  error Unsupported compiler.
#endif");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock  = skippedBlocks.First();
                Assert.AreEqual(4, skippedBlock.Item1);
                Assert.AreEqual(5, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(1);
                Assert.AreEqual(7, skippedBlock.Item1);
                Assert.AreEqual(7, skippedBlock.Item2);
            }
        }
Exemplo n.º 5
0
        void AssertSkippedBlocksMatch(ClangAdapter adapter, IEnumerable <Tuple <int, int> > expected)
        {
            var preprocessor            = adapter.GetPreprocessor();
            var skippedBlockLineNumbers = preprocessor.GetSkippedBlockLineNumbers();

            Assert.AreEqual(expected.Count(), skippedBlockLineNumbers.Count());

            for (int i = 0; i < expected.Count(); ++i)
            {
                Assert.AreEqual(expected.ElementAt(i), skippedBlockLineNumbers.ElementAt(i));
            }
        }
Exemplo n.º 6
0
 public void ExpandMacro_MacroDefinitionIncludesAnotherMacro_ExpansionExpandsInnerMacro()
 {
     File.WriteAllText(sourceFilePath, @"
     #define x 2
     #define foo x*y
     ");
     var adapter = new ClangAdapter(sourceFilePath);
     adapter.Process(null);
     var preprocessor = adapter.GetPreprocessor();
     {
         Assert.AreEqual("2*y", preprocessor.ExpandMacro("foo"));
     }
 }
Exemplo n.º 7
0
        public void ExpandMacro_MacroDefinitionIncludesAnotherMacro_ExpansionExpandsInnerMacro()
        {
            File.WriteAllText(sourceFilePath, @"
#define x 2
#define foo x*y
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                Assert.AreEqual("2*y", preprocessor.ExpandMacro("foo"));
            }
        }
Exemplo n.º 8
0
        public void GetSkippedBlocks_IfDefinedBlockWithUndefinedMacro_SkippedBlockIncludesIfDefinedBlock()
        {
            File.WriteAllText(sourceFilePath,
                              @"#if defined(OOLALALA)
#  include <avr/io.h>
#endif");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock  = skippedBlocks.First();
                Assert.AreEqual(1, skippedBlock.Item1);
                Assert.AreEqual(3, skippedBlock.Item2);
            }
        }
Exemplo n.º 9
0
 public void GetSkippedBlocks_IfBlockWithMultiplePreprocessorDefinitions_SkippedBlockIncludesAllLines()
 {
     File.WriteAllText(sourceFilePath,
     @"#if 0
     #define foo x+y
     #define fat boo
     #define fal laf
     #endif
     ");
     var adapter = new ClangAdapter(sourceFilePath);
     adapter.Process(null);
     var preprocessor = adapter.GetPreprocessor();
     {
         var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
         var skippedBlock = skippedBlocks.First();
         Assert.AreEqual(2, skippedBlock.Item1);
         Assert.AreEqual(4, skippedBlock.Item2);
     }
 }
Exemplo n.º 10
0
        public void GetSkippedBlocks_IfBlockWithMultiplePreprocessorDefinitions_SkippedBlockIncludesAllLines()
        {
            File.WriteAllText(sourceFilePath,
                              @"#if 0
#define foo x+y
#define fat boo
#define fal laf
#endif
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock  = skippedBlocks.First();
                Assert.AreEqual(1, skippedBlock.Item1);
                Assert.AreEqual(5, skippedBlock.Item2);
            }
        }
Exemplo n.º 11
0
 public void GetSkippedBlocks_IfBlockWithMultiplePreprocessorDefinitionsIsTrue_SkippedBlockIsEmpty()
 {
     File.WriteAllText(sourceFilePath,
     @"#if 1
     #define foo x+y
     #define fat boo
     #define fal laf
     #endif
     int x = 20;
     #if 1
     #define foo x+y
     #define fat boo
     #define fal laf
     #endif
     ");
     var adapter = new ClangAdapter(sourceFilePath);
     adapter.Process(null);
     var preprocessor = adapter.GetPreprocessor();
     {
         var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
         Assert.IsFalse(skippedBlocks.Any());
     }
 }
Exemplo n.º 12
0
        public void GetSkippedBlocks_IfElseBlockWithElseBlockExcludedAndCodeTypedBeforeBlock_SkippedBlockIncludesExcludedCode()
        {
            var mainCode =
                @"#if BLAH
#define foo x+y
#define bar x-y
#else
#define fal laf
#endif";

            File.WriteAllText(sourceFilePath, mainCode);
            var adapter = new ClangAdapter(sourceFilePath);

            var preprocessor = adapter.GetPreprocessor();

            adapter.Process(mainCode);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            var initialText = "#define BLAH 0" + Environment.NewLine + mainCode;

            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            var laterText = "#define BLAH 2" + Environment.NewLine + mainCode;

            adapter.Process(laterText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(6, 6) });

            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            adapter.Process(laterText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(6, 6) });

            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });
        }
Exemplo n.º 13
0
        public void GetSkippedBlocks_IfBlockWithMultiplePreprocessorDefinitionsIsTrue_SkippedBlockIsEmpty()
        {
            File.WriteAllText(sourceFilePath,
                              @"#if 1
#define foo x+y
#define fat boo
#define fal laf
#endif
int x = 20;
#if 1
#define foo x+y
#define fat boo
#define fal laf
#endif
");
            var adapter = new ClangAdapter(sourceFilePath);

            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                Assert.IsFalse(skippedBlocks.Any());
            }
        }
Exemplo n.º 14
0
 public void GetSkippedBlocks_IfDefinedBlockWithUndefinedMacro_SkippedBlockIncludesIfDefinedBlock()
 {
     File.WriteAllText(sourceFilePath,
     @"#if defined(OOLALALA)
     #  include <avr/io.h>
     #endif");
     var adapter = new ClangAdapter(sourceFilePath);
     adapter.Process(null);
     var preprocessor = adapter.GetPreprocessor();
     {
         var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
         var skippedBlock = skippedBlocks.First();
         Assert.AreEqual(2, skippedBlock.Item1);
         Assert.AreEqual(2, skippedBlock.Item2);
     }
 }
Exemplo n.º 15
0
        public void GetSkippedBlocks_IfElseBlockWithElseBlockExcludedAndCodeTypedBeforeBlock_SkippedBlockIncludesExcludedCode()
        {
            var mainCode =
            @"#if BLAH
            #define foo x+y
            #define bar x-y
            #else
            #define fal laf
            #endif";
            File.WriteAllText(sourceFilePath, mainCode);
            var adapter = new ClangAdapter(sourceFilePath);

            var preprocessor = adapter.GetPreprocessor();
            adapter.Process(mainCode);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            var initialText = "#define BLAH 0" + Environment.NewLine + mainCode;
            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            var laterText = "#define BLAH 2" + Environment.NewLine + mainCode;
            adapter.Process(laterText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(6, 6) });

            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });

            adapter.Process(laterText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(6, 6) });

            adapter.Process(initialText);
            AssertSkippedBlocksMatch(adapter, new[] { Tuple.Create(3, 4) });
        }
Exemplo n.º 16
0
        public void GetSkippedBlocks_IfDefinedBlockWithDefinedMacro_SkippedBlockIncludesIfDefinedBlock()
        {
            File.WriteAllText(sourceFilePath,
            @"#if defined(__GNUC__)
            #  include <avr/io.h>
            #elif defined(__ICCAVR__)
            #  include <ioavr.h>
            #  include <intrinsics.h>
            #else
            #  error Unsupported compiler.
            #endif");
            var adapter = new ClangAdapter(sourceFilePath);
            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock = skippedBlocks.First();
                Assert.AreEqual(4, skippedBlock.Item1);
                Assert.AreEqual(5, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(1);
                Assert.AreEqual(7, skippedBlock.Item1);
                Assert.AreEqual(7, skippedBlock.Item2);

            }
        }
Exemplo n.º 17
0
 public void GetSkippedBlocks_IfMultipleElifDirectiveWithIfDirectiveFalseAndSecondElifDirectiveTrue_SkippedBlockIncludesSecondElifBlock()
 {
     File.WriteAllText(sourceFilePath,
     @"#define X 0
     #define Y 0
     #define Z 2
     #if X
     #define foo x*y
     #elif Y
     #define foo x/y
     #elif Z
     #define foo x-y
     #endif
     ");
     var adapter = new ClangAdapter(sourceFilePath);
     adapter.Process(null);
     var preprocessor = adapter.GetPreprocessor();
     {
         var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
         var skippedBlock = skippedBlocks.First();
         Assert.AreEqual(4, skippedBlock.Item1);
         Assert.AreEqual(8, skippedBlock.Item2);
     }
 }
Exemplo n.º 18
0
        void AssertSkippedBlocksMatch(ClangAdapter adapter, IEnumerable<Tuple<int, int>> expected)
        {
            var preprocessor = adapter.GetPreprocessor();
            var skippedBlockLineNumbers = preprocessor.GetSkippedBlockLineNumbers();

            Assert.AreEqual(expected.Count(), skippedBlockLineNumbers.Count());

            for (int i = 0; i < expected.Count(); ++i)
            {
                Assert.AreEqual(expected.ElementAt(i), skippedBlockLineNumbers.ElementAt(i));
            }
        }
Exemplo n.º 19
0
        public void GetSkippedBlocks_TwoIfBlocksBothFalse_SkippedBlockIncludesBothBlocks()
        {
            File.WriteAllText(sourceFilePath,
            @"#if 0
            #define foo x+y
            #endif
            #if 0
            #define foo x-y
            #endif
            ");
            var adapter = new ClangAdapter(sourceFilePath);
            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();
                var skippedBlock = skippedBlocks.First();
                Assert.AreEqual(2, skippedBlock.Item1);
                Assert.AreEqual(2, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(1);
                Assert.AreEqual(5, skippedBlock.Item1);
                Assert.AreEqual(5, skippedBlock.Item2);
            }
        }
Exemplo n.º 20
0
        public void GetSkippedBlocks_IfSingleElifDirectiveWithElifDirectiveFalse_SkippedBlockIncludesElifBlock()
        {
            File.WriteAllText(sourceFilePath,
            @"#define X 1
            #define Y 0
            #define Z 0
            #if X
            #define foo x*y
            #elif Z + 0
            #define foo x+y
            #elif Y
            #define foo x/y
            #elif Z
            #define foo x-y
            #endif
            ");
            var adapter = new ClangAdapter(sourceFilePath);
            adapter.Process(null);
            var preprocessor = adapter.GetPreprocessor();
            {
                var skippedBlocks = preprocessor.GetSkippedBlockLineNumbers();

                var skippedBlock = skippedBlocks.First();
                Assert.AreEqual(7, skippedBlock.Item1);
                Assert.AreEqual(7, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(1);
                Assert.AreEqual(9, skippedBlock.Item1);
                Assert.AreEqual(9, skippedBlock.Item2);

                skippedBlock = skippedBlocks.ElementAt(2);
                Assert.AreEqual(11, skippedBlock.Item1);
                Assert.AreEqual(11, skippedBlock.Item2);
            }
        }