Ejemplo n.º 1
0
        public void SingleItemStored()
        {
            SortedListener l = new SortedListener(1, new List <string>());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 3, 0), null);
            //l.OnMetric("Foo::Bar", 3, "a.cpp", 1, 1);

            Assert.AreEqual("Foo::Bar", l.Metrics[0].Unit);
            Assert.AreEqual(3, l.Metrics[0].CCM);
        }
Ejemplo n.º 2
0
        public void TestIgnoresMetricBelowThreshold()
        {
            SortedListener l = new SortedListener(2, new List <string>(), 10);

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 3, null), null);
            l.OnMetric(new ccMetric("b.cpp", "Foo::Bar2", 10, null), null);

            Assert.AreEqual(1, l.Metrics.Count);
            Assert.AreEqual(10, l.Metrics[0].CCM);
        }
Ejemplo n.º 3
0
        public void CanContainMultipleMetricsWithSameCCM()
        {
            SortedListener l = new SortedListener(2, new List <string>());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 3, 0), null);
            l.OnMetric(new ccMetric("b.cpp", "Foo::Bar2", 3, 0), null);

            Assert.AreEqual(2, l.Metrics.Count);

            Assert.AreEqual(3, l.Metrics[0].CCM);
            Assert.AreEqual(3, l.Metrics[1].CCM);
        }
Ejemplo n.º 4
0
        public void TestNoMetricsLeftAfterClear()
        {
            SortedListener l = new SortedListener(2, new List <string>());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 3, 0), null);
            l.OnMetric(new ccMetric("b.cpp", "Foo::Bar2", 3, 0), null);

            Assert.AreEqual(2, l.Metrics.Count);

            l.Clear();

            Assert.AreEqual(0, l.Metrics.Count);
        }
Ejemplo n.º 5
0
        public void TestExcludes()
        {
            List <string> ignores = new List <string>();

            ignores.Add("Foo");
            ignores.Add("Bar");

            SortedListener l = new SortedListener(3, ignores);

            l.OnMetric(new ccMetric("a.cpp", "Foo(int j)", 2, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Bar(double d, X& x)", 3, 0), null);

            Assert.AreEqual(0, l.Metrics.Count); // should all have been filtered away
        }
Ejemplo n.º 6
0
        public void TestFileWithTabAfterEndif()
        {
            string         filename = "FileWithTabAfterEndIf.c"; // this is deployed through local.testsettings
            SortedListener listener = new SortedListener(10, new List <string>(), 0);

            using (StreamReader stream = new StreamReader(filename))
            {
                FileAnalyzer analyzer = new FileAnalyzer(stream, listener, null, true, filename);
                analyzer.Analyze();

                Assert.AreEqual(1, listener.Metrics.Count);

                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "Foo"));
            }
        }
Ejemplo n.º 7
0
        public void MultiItemsAreSorted()
        {
            SortedListener l = new SortedListener(3, new List <string>());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar3", 3, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar1", 1, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar7", 7, 0), null);

            Assert.AreEqual("Foo::Bar7", l.Metrics[0].Unit);
            Assert.AreEqual(7, l.Metrics[0].CCM);

            Assert.AreEqual("Foo::Bar3", l.Metrics[1].Unit);
            Assert.AreEqual(3, l.Metrics[1].CCM);

            Assert.AreEqual("Foo::Bar1", l.Metrics[2].Unit);
            Assert.AreEqual(1, l.Metrics[2].CCM);
        }
Ejemplo n.º 8
0
        public void TestCStyleFuncDecl()
        {
            string         filename = "cstylefuncs.c"; // this is deployed through local.testsettings
            SortedListener listener = new SortedListener(10, new List <string>());

            using (StreamReader stream = new StreamReader(filename))
            {
                FileAnalyzer analyzer = new FileAnalyzer(stream, listener, null, true, filename);
                analyzer.Analyze();

                Assert.AreEqual(3, listener.Metrics.Count);

                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "added"));
                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "new_cfg_record"));
                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "edit_cfg_record"));
            }
        }
Ejemplo n.º 9
0
        public void TestTypescriptFileIsCorrectlyParsed()
        {
            string         filename = "TypeScript.ts"; // this is deployed through local.testsettings
            SortedListener listener = new SortedListener(10, new List <string>());

            using (StreamReader stream = new StreamReader(filename))
            {
                FileAnalyzer analyzer = new FileAnalyzer(stream, listener, null, false, filename);
                analyzer.Analyze();

                Assert.AreEqual(3, listener.Metrics.Count);

                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "Sayings::Greeter::greet()"));
                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "Sayings::Greeter::constructor(message:string)"));
                Assert.IsNotNull(IntegrationTests.GetByName(listener.Metrics, "button.onclick()"));
            }
        }
Ejemplo n.º 10
0
        private static bool CCM(byte[] bytes, ref CodeMetrics metrics)
        {
            // create container for the metrics
            var listenter = new SortedListener(
                numMetrics: 30,
                ignores: new List <string>(),
                threshold: 0
                );

            // analyze
            using (var stream = new MemoryStream(bytes))
            {
                var reader = new StreamReader(stream);

                // analyze
                try
                {
                    var analyzer = new FileAnalyzer(
                        filestream: reader,
                        listenter,
                        context: null,
                        suppressMethodSignatures: false,
                        filename: "foo.cs"
                        );

                    analyzer.Analyze();

                    // consider the metrics in listener
                    foreach (var m in listenter.Metrics)
                    {
                        System.Diagnostics.Debug.WriteLine($"{m.Unit} {m.CCM} {m}");
                        metrics.CCM += m.CCM;
                        metrics.Methods++;
                    }
                }
                catch (Exception e)
                {
                    metrics.CCM = Single.MaxValue;
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 11
0
        public void TestMultipleItemsSameName()
        {
            SortedListener l = new SortedListener(10, new List <string> ());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 3, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 1, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar", 7, 0), null);

            Assert.AreEqual(l.Metrics.Count, 3);

            Assert.AreEqual("Foo::Bar", l.Metrics[0].Unit);
            Assert.AreEqual(7, l.Metrics[0].CCM);

            Assert.AreEqual("Foo::Bar", l.Metrics[1].Unit);
            Assert.AreEqual(3, l.Metrics[1].CCM);

            Assert.AreEqual("Foo::Bar", l.Metrics[2].Unit);
            Assert.AreEqual(1, l.Metrics[2].CCM);
        }
Ejemplo n.º 12
0
        public void ExhaustedBufferHasCorrectItems()
        {
            SortedListener l = new SortedListener(3, new List <string>());

            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar3", 3, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar1", 1, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar7", 7, 0), null);
            l.OnMetric(new ccMetric("a.cpp", "Foo::Bar9", 9, 0), null);

            Assert.AreEqual(l.Metrics.Count, 3);

            Assert.AreEqual("Foo::Bar9", l.Metrics[0].Unit);
            Assert.AreEqual(9, l.Metrics[0].CCM);

            Assert.AreEqual("Foo::Bar7", l.Metrics[1].Unit);
            Assert.AreEqual(7, l.Metrics[1].CCM);

            Assert.AreEqual("Foo::Bar3", l.Metrics[2].Unit);
            Assert.AreEqual(3, l.Metrics[2].CCM);
        }
Ejemplo n.º 13
0
        private void RunFunctionAndUpdateUI(Function function)
        {
            try
            {
                lock (this.syncLock)
                {
                    this.listener = new SortedListener(GetNumMetrics(), new List <string>());

                    //
                    // setup semaphore for multi processing
                    //
                    this.sempahore = new Semaphore(this.numWorkingThreads, this.numWorkingThreads);

                    //
                    // clear old items
                    //
                    this.listView.Items.Clear();
                    this.listener.Clear();

                    function();

                    //
                    // wait for completion of possible background workers
                    for (int i = 0; i < this.numWorkingThreads; ++i)
                    {
                        this.sempahore.WaitOne();
                    }

                    UpdateUI(this.listener.Metrics);

                    //
                    // cleanup
                    this.sempahore.Close();
                    this.sempahore = null;
                }
            }
            catch (Exception)
            {
            }
        }
        public static CyclomaticComplexityMetric CalculateMetric(Stream stream, string filePath, bool disposeStream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            var listener = new SortedListener(1000, new List <string>(), 0);

            try
            {
                var fileAnalyzer = new FileAnalyzer(new StreamReader(stream), listener, null, false, filePath);
                fileAnalyzer.Analyze();
            }
            finally
            {
                if (disposeStream)
                {
                    stream.Dispose();
                }
            }

            var ccmMetrics = listener.Metrics.Select(g => g.CCM).ToList();

            if (!ccmMetrics.Any())
            {
                return(null);
            }

            return(new CyclomaticComplexityMetric
            {
                CCMMax = ccmMetrics.Max(),
                CCMAvg = ccmMetrics.Average(),
                CCMMd = ccmMetrics.Median()
            });
        }
Ejemplo n.º 15
0
        public void TestJavascriptFileContainsAllFunctions()
        {
            string         filename = "examples.js"; // this is deployed through local.testsettings
            SortedListener listener = new SortedListener(10, new List <string>());

            using (StreamReader stream = new StreamReader(filename))
            {
                FileAnalyzer analyzer = new FileAnalyzer(stream, listener, null, false, filename);
                analyzer.Analyze();

                Assert.AreEqual(10, listener.Metrics.Count);

                Assert.AreEqual(6, IntegrationTests.GetByName(listener.Metrics, "gcd(segmentA,segmentB)").CCM);
                Assert.AreEqual(2, IntegrationTests.GetByName(listener.Metrics, "function(monkey)").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "localFunction()").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "Some.Foo(args)").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "functionWithColon()").CCM);
                Assert.AreEqual(2, IntegrationTests.GetByName(listener.Metrics, "localFunction1()").CCM);
                Assert.AreEqual(4, IntegrationTests.GetByName(listener.Metrics, "outerFunction1()").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "localFunction2()").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "Monkey::feedMonkey()").CCM);
                Assert.AreEqual(1, IntegrationTests.GetByName(listener.Metrics, "afterMonkeyFeed()").CCM);
            }
        }
Ejemplo n.º 16
0
 public void Setup()
 {
     this.listener = new SortedListener(100, new List <string>());
 }
Ejemplo n.º 17
0
 private void Init()
 {
     this.threadCount     = Environment.ProcessorCount;
     this.threadSemaphore = new Semaphore(this.threadCount, this.threadCount);
     this.listener        = new SortedListener(this.configFile.NumMetrics, this.configFile.ExcludeFunctions, this.configFile.Threshold);
 }