Пример #1
0
        public void FindUnreferencedAssemblies_UnreferencedAssemblies_WithNullInUnrefList()
        {
            var catalog = Substitute.For <IApiCatalogLookup>();

            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(s_unreferencedAssemblies[0])).Returns(true);

            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations);

            var specifiedUserAssemblies = new List <AssemblyInfo>()
            {
                new AssemblyInfo()
                {
                    FileVersion = "", AssemblyIdentity = "MyAssembly"
                }
            };
            var listWithNulls = s_unreferencedAssemblies.Concat(new List <string>()
            {
                null
            }).ToList();

            var unreferencedAssms = engine.FindUnreferencedAssemblies(listWithNulls, specifiedUserAssemblies).ToList();

            // 0 missing assembly since Microsoft.CSharp is a fx assembly and we specified MyAssembly
            Assert.Empty(unreferencedAssms);
        }
        public static void ComputeAssembliesToRemove_PackageFound()
        {
            // Arrange
            var userNuGetPackage = GetAssemblyInfo("NugetPackageAssembly", "2.0.5.0", isExplicitlySpecified: false);
            var inputAssemblies  = new[]
            {
                GetAssemblyInfo("TestUserAssembly", "2.0.5.0", isExplicitlySpecified: true),
                userNuGetPackage,
                GetAssemblyInfo("TestUserLibrary", "5.0.0", isExplicitlySpecified: true),
            };

            var targets        = new[] { Windows81, NetStandard16 };
            var packageId      = "SomeNuGetPackage";
            var packageVersion = "2.0.1";
            var engine         = new AnalysisEngine(Substitute.For <IApiCatalogLookup>(), Substitute.For <IApiRecommendations>(), Substitute.For <IPackageFinder>());

            var nugetPackageResult = new[]
            {
                new NuGetPackageInfo(packageId, new Dictionary <FrameworkName, string>()
                {
                    { Windows81, packageVersion }, { NetStandard16, packageVersion }
                }, userNuGetPackage.AssemblyIdentity)
            };

            // Act
            var assemblies = engine.ComputeAssembliesToRemove(inputAssemblies, targets, nugetPackageResult);

            // Assert
            Assert.Single(assemblies);
            Assert.Equal(assemblies.First(), userNuGetPackage.AssemblyIdentity);
        }
Пример #3
0
        public async Task TestDiffFileComparePerformance(int maxBytesScan)
        {
            var file1 = "./Asset/Autoruns.zip";
            var file2 = "./Asset/VMMap.zip";

            const int iterations = 100;
            var       engine     = new AnalysisEngine(null, null)
            {
                MaxBytesScan = maxBytesScan
            };
            var total = 0L;

            for (var i = 0; i < iterations; i++)
            {
                var stopwatch = Stopwatch.StartNew();
                var result    = await engine.AreFilesEqualAsync(file1, file2);

                stopwatch.Stop();

                total += stopwatch.ElapsedMilliseconds;
                Assert.False(result);
            }

            _output.WriteLine($"MaxBytesScan={maxBytesScan}: in average it took {total / iterations}ms.");
        }
Пример #4
0
        private static async Task OnDocumentAnalyzed(AnalysisEngine engine, Options options, DocumentConditionalRegionInfo info, CancellationToken cancellationToken)
        {
            if (options.Edit)
            {
                var fileInfo = new FileInfo(info.Document.FilePath);
                if (fileInfo.IsReadOnly || !fileInfo.Exists)
                {
                    Console.WriteLine("warning: skipping document '{0}' because it {1}.",
                                      info.Document.FilePath, fileInfo.IsReadOnly ? "is read-only" : "does not exist");
                    return;
                }

                var document = await engine.RemoveUnnecessaryRegions(info, cancellationToken);

                document = await engine.SimplifyVaryingPreprocessorExpressions(document, cancellationToken);

                var text = await document.GetTextAsync(cancellationToken);

                using (var file = File.Open(document.FilePath, FileMode.Truncate, FileAccess.Write))
                {
                    var writer = new StreamWriter(file, text.Encoding);
                    text.Write(writer, cancellationToken);
                    await writer.FlushAsync();
                }
            }
        }
Пример #5
0
 private static void PrintSymbolInfo(AnalysisEngine engine)
 {
     Console.WriteLine("Symbols");
     Console.WriteLine("  {0,5} unique symbol(s) specified: {1}", engine.SpecifiedSymbols.Count(), string.Join(";", engine.SpecifiedSymbols));
     Console.WriteLine("  {0,5} unique symbol(s) visited: {1}", engine.VisitedSymbols.Count(), string.Join(";", engine.VisitedSymbols));
     Console.WriteLine("  {0,5} specified symbol(s) unvisited: {1}", engine.UnvisitedSymbols.Count(), string.Join(";", engine.UnvisitedSymbols));
 }
Пример #6
0
        private void Process()
        {
            AnalysisEngine engine = new AnalysisEngine(selectedVehicle.Model,
                                                       EngineFinished, OnError);

            engine.Start();
        }
Пример #7
0
 static void Analyze()
 {
     using (Operation programOp = L.Begin("File and analysis operations"))
     {
         using (Operation engineOp = L.Begin("Initialising analysis engine"))
         {
             Engine = new AnalysisEngine(EngineOptions, Console.Out);
             if (!Engine.Initialised)
             {
                 Exit(ExitResult.ANALYSIS_ENGINE_INIT_ERROR);
             }
             else
             {
                 engineOp.Complete();
             }
         }
         if (Engine.Analyze())
         {
             programOp.Complete();
             Exit(ExitResult.SUCCESS);
         }
         else
         {
             Exit(ExitResult.ANALYSIS_ERROR);
         }
     }
 }
Пример #8
0
        public void ShowRetargettingIssuesTrueShouldReturnRuntimeAndRetargettingIssues()
        {
            var catalog         = Substitute.For <IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsForShowRetargetting(2, 3);
            var testData        = GenerateTestData(catalog);
            var engine          = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(".NET Framework, Version = v4.5");

            // ShowRetargettingIssues
            IEnumerable <BreakingChangeDependency> result = engine.FindBreakingChanges(targets: new[] { framework },
                                                                                       dependencies: testData,
                                                                                       assembliesToIgnore: null,
                                                                                       breakingChangesToSuppress: null,
                                                                                       submittedAssemblies: Array.Empty <string>(),
                                                                                       showRetargettingIssues: true);

            Assert.Equal(5, result.Count());

            //verify 1, 2, 3, 4 and 5 are in the list
            int expectedID = 1;

            foreach (BreakingChangeDependency bcd in result)
            {
                Assert.Equal(expectedID.ToString(), bcd.Break.Id);
                expectedID++;
            }
        }
        public static void ComputeAssembliesToRemove_AssemblyFlagNotSet()
        {
            // Arrange
            var userNuGetPackage = GetAssemblyInfo("NugetPackageAssembly", "2.0.5.0");
            var inputAssemblies  = new[] { userNuGetPackage };

            var targets        = new[] { Windows81, NetStandard16 };
            var packageId      = "SomeNuGetPackage";
            var packageVersion = "2.0.1";
            var engine         = new AnalysisEngine(Substitute.For <IApiCatalogLookup>(), Substitute.For <IApiRecommendations>(), Substitute.For <IPackageFinder>());

            var nugetPackageResult = new[]
            {
                new NuGetPackageInfo(packageId,
                                     new Dictionary <FrameworkName, string>()
                {
                    { Windows81, packageVersion },
                    { NetStandard16, packageVersion }
                },
                                     userNuGetPackage.AssemblyIdentity)
            };

            var assemblies = engine.ComputeAssembliesToRemove(inputAssemblies, targets, nugetPackageResult);

            Assert.Empty(assemblies);
        }
        public static AnalysisResult Analyze(string testClassString)
        {
            Compilation compilation = CompilationHelper.Create(testClassString);

            AnalysisEngine engine = new AnalysisEngine();

            return engine.Analyze(compilation.SyntaxTrees[0],compilation.GetSemanticModel(compilation.SyntaxTrees[0]));
        }
Пример #11
0
        void _barlisttracker_GotNewBar(string sym, int interval)
        {
            //int idx = Array.IndexOf(_symbols, sym);
            int idx = _symbols.IndexOf(sym);

            if (_isactive && _issymbolactive[idx])
            {
                BarList bl = _barlisttracker[sym, interval];

                double[] closes = Calc.Decimal2Double(bl.Close());
                // when NewBar is triggered, the latest bar only has one tick
                closes = closes.Take(closes.Length - 1).ToArray();

                SMAResult result = AnalysisEngine.SMA(closes, _barslookback);

                if (result.Values.Count == 0)           // Not enough bars
                {
                    return;
                }

                // check
                if (!_waittobefilled[idx])
                {
                    double sma = result.Values.Last();
                    if (_positiontracker[sym].isFlat)
                    {
                        // if our current price is above SMA
                        if (closes.Last() > sma)
                        {
                            SendDebug("Cross above SMA, buy");
                            SendOrder(new MarketOrder(sym, _tradesize));
                            _waittobefilled[idx] = true;
                        }
                        // if our current price is below SMA
                        else if (closes.Last() < sma)
                        {
                            SendDebug("Cross below SMA, sell");
                            SendOrder(new MarketOrder(sym, -_tradesize));
                            _waittobefilled[idx] = true;
                        }
                    }
                    else if ((_positiontracker[sym].isLong && (closes.Last() < sma)) ||
                             (_positiontracker[sym].isShort && (closes.Last() > sma)))
                    {
                        SendDebug("Counter trend, exit.");
                        SendOrder(new MarketOrderFlat(_positiontracker[sym]));
                        _waittobefilled[idx] = true;
                    }

                    // this way we can debug our indicators during development
                    // indicators are sent in the same order as they are named above
                    if (_waittobefilled[idx])
                    {
                        SendIndicators(new string[] { "Time: " + _currenttime.ToString(), " SMA:" + sma.ToString("F2", System.Globalization.CultureInfo.InvariantCulture) });
                    }
                }
            }
        }
Пример #12
0
 private static void FindDifferences(TraceFile traceFileA, TraceFile traceFileB)
 {
     if (traceFileA != null && traceFileB != null)
     {
         traceFileA.LoadTraceFile();
         traceFileB.LoadTraceFile();
         AnalysisEngine.FindDifferences(traceFileA, traceFileB);
         AnalysisEngine.FindDifferences(traceFileB, traceFileA);
     }
 }
        public void FindUnreferencedAssemblies_SpecifiedAssembliesNull()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);

            var result = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, null).ToList();

            Assert.NotNull(result);
        }
Пример #14
0
        public void FindUnreferencedAssemblies_SpecifiedAssembliesNull()
        {
            var catalog         = Substitute.For <IApiCatalogLookup>();
            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations);

            var result = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, null).ToList();

            Assert.NotNull(result);
        }
Пример #15
0
        protected void Verify(string source, string expected, bool runFormatter = true)
        {
            var inputSolution    = CreateSolution(new[] { source });
            var expectedSolution = CreateSolution(new[] { expected });

            var engine         = AnalysisEngine.FromProjects(inputSolution.Projects, alwaysIgnoredSymbols: new[] { "VARYING" });
            var regionInfo     = engine.GetConditionalRegionInfo().Result.Single();
            var actualSolution = engine.RemoveUnnecessaryRegions(regionInfo).Result.Project.Solution;

            AssertSolutionEqual(expectedSolution, actualSolution);
        }
        public void FindUnreferencedAssemblies_NoUnreferencedAssemblies()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);

            var specifiedUserAssemblies = s_unreferencedAssemblies.Select(ua => new AssemblyInfo() { AssemblyIdentity = ua, FileVersion = "0.0.0.0" }).ToList();
            var unreferencedAssms = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, specifiedUserAssemblies).ToList();

            // We don't expect to have any unreferenced assemblies.
            Assert.Empty(unreferencedAssms);
        }
        protected void Verify(string source, string expected)
        {
            var inputSolution    = CreateSolution(new[] { source });
            var expectedSolution = CreateSolution(new[] { expected });

            var engine = AnalysisEngine.FromProjects(inputSolution.Projects, alwaysIgnoredSymbols: new[] { "varying" });

            var document       = inputSolution.Projects.Single().Documents.Single();
            var actualSolution = engine.SimplifyVaryingPreprocessorExpressions(document).Result.Project.Solution;

            AssertSolutionEqual(expectedSolution, actualSolution);
        }
Пример #18
0
        private static async Task RunAsync(AnalysisEngine engine, Options options, CancellationToken cancellationToken)
        {
            var regionInfos = await engine.GetConditionalRegionInfo(cancellationToken);

            PrintConditionalRegionInfo(options, regionInfos);

            if (options.PrintSymbolInfo)
            {
                Console.WriteLine();
                PrintSymbolInfo(engine);
            }
        }
        public void CalculateCorrelationUsingValidValues_returnsExpected()
        {
            ITweetProvider tweetProvider = new InMemoryTweetProvider();
            IStockProvider stockProvider = new InMemoryStockProvider();

            AnalysisEngine engine = new AnalysisEngine(tweetProvider, stockProvider);

            float expected = 1.0F;
            var   actual   = engine.CalculateCorrelation("TEST");

            Assert.AreEqual(expected, actual);
        }
        public void FindUnreferencedAssemblies_UnreferencedAssemblies_2()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(s_unreferencedAssemblies[0])).Returns(true);

            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);

            var unreferencedAssms = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, Enumerable.Empty<AssemblyInfo>()).ToList();

            // 1 missing assembly since Microsoft.CSharp is a FX assembly 
            Assert.Equal(1, unreferencedAssms.Count);
        }
Пример #21
0
        public void BreakingChangesNotFullFramework()
        {
            var catalog         = Substitute.For <IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsWithFixedEntry();
            var testData        = GenerateTestData(catalog);
            var engine          = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(".NET Core Framework,Version=4.5.1");

            var breakingChanges = engine.FindBreakingChanges(new[] { framework }, testData, null, null, Array.Empty <string>()).ToList();

            Assert.Empty(breakingChanges);
        }
        private async Task AnalyzeData(double Temperature, double Cph, double Cdo, double Cbod5, double Ccod, double Cnh4n, double Cno2n, double Cno3n, double Css, double Ccl, double Ccb)
        {
            Console.WriteLine("----------------------------------------------------------");
            var Is = AnalysisEngine.CalculateSimpleIndices(Temperature, Cph, Cdo, Cbod5, Ccod, Cnh4n, Cno2n, Cno3n, Css, Ccl, Ccb);

            Console.WriteLine(Is.ToJSONString());
            var Ws = AnalysisEngine.GetWeightCoefficients(Temperature, Is);

            Console.WriteLine(Ws.ToJSONString());
            OverallIndex = AnalysisEngine.CalculateOverallIndex(Is, Ws);
            Console.WriteLine("Overall Index: " + OverallIndex.ToString("F5"));
            Level = AnalysisEngine.GetLevel(Temperature, OverallIndex);
            Console.WriteLine("Level: " + Level.ToString("D"));
        }
        public static void TestGetNugetPackageInfo()
        {
            // Arrange
            var nugetPackageAssembly = GetAssemblyInfo("NugetPackageAssembly", "2.0.5.0", isExplicitlySpecified: false);
            var inputAssemblies      = new[]
            {
                GetAssemblyInfo("TestUserAssembly", "2.0.5.0", isExplicitlySpecified: true),
                nugetPackageAssembly,
                GetAssemblyInfo("TestUserLibrary", "5.0.0", isExplicitlySpecified: true),
            };
            var targets       = new[] { Windows80, Net11, NetStandard16 };
            var packageFinder = Substitute.For <IPackageFinder>();

            var packageId = "TestNuGetPackage";
            var nugetPackageWin80Version       = "1.3.4"; // supported version of the package
            var nugetPackageNetStandardVersion = "10.0.8";

            var packagesList = new[]
            {
                new NuGetPackageInfo(packageId, new Dictionary <FrameworkName, string>()
                {
                    { Windows80, nugetPackageWin80Version },
                    { NetStandard16, nugetPackageNetStandardVersion },
                })
            };

            packageFinder.TryFindPackages(nugetPackageAssembly.AssemblyIdentity, targets, out var packages)
            .Returns(x =>
            {
                // return this value in `out var packages`
                x[2] = packagesList.ToImmutableList();
                return(true);
            });

            var engine = new AnalysisEngine(Substitute.For <IApiCatalogLookup>(), Substitute.For <IApiRecommendations>(), packageFinder);

            // Act
            var nugetPackageResult = engine.GetNuGetPackagesInfoFromAssembly(inputAssemblies.Select(x => x.AssemblyIdentity), targets).ToArray();

            // Assert
            Assert.Single(nugetPackageResult);

            Assert.Equal(nugetPackageResult[0].SupportedVersions[Windows80], nugetPackageWin80Version);
            Assert.Equal(nugetPackageResult[0].SupportedVersions[NetStandard16], nugetPackageNetStandardVersion);

            // We did not have any packages that supported .NET Standard 2.0
            Assert.True(!nugetPackageResult[0].SupportedVersions.TryGetValue(Net11, out var value) || string.IsNullOrEmpty(value));

            Assert.Equal(nugetPackageResult[0].AssemblyInfo, nugetPackageAssembly.AssemblyIdentity);
        }
Пример #24
0
 private static void FindAddressFrequency(TraceFile traceFile)
 {
     if (traceFile == null)
     {
         foreach (var currentTraceFile in traceFiles)
         {
             AnalysisEngine.FindAddressFrequency(currentTraceFile);
         }
     }
     else
     {
         AnalysisEngine.FindAddressFrequency(traceFile);
     }
 }
Пример #25
0
        public void FindUnreferencedAssemblies_UnreferencedAssemblies_2()
        {
            var catalog = Substitute.For <IApiCatalogLookup>();

            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(s_unreferencedAssemblies[0])).Returns(true);

            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations);

            var unreferencedAssms = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, Enumerable.Empty <AssemblyInfo>()).ToList();

            // 1 missing assembly since Microsoft.CSharp is a FX assembly
            Assert.Equal(1, unreferencedAssms.Count);
        }
        public void FindUnreferencedAssemblies_UnreferencedAssemblies_1()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(s_unreferencedAssemblies[0])).Returns(true);

            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);

            var specifiedUserAssemblies = new[] { new AssemblyInfo { FileVersion = "", AssemblyIdentity = "MyAssembly" } };
            var unreferencedAssms = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, specifiedUserAssemblies).ToList();

            // 0 missing assembly since Microsoft.CSharp is a FX assembly and we specified MyAssembly
            Assert.Empty(unreferencedAssms);
        }
Пример #27
0
        public void FindUnreferencedAssemblies_NoUnreferencedAssemblies()
        {
            var catalog         = Substitute.For <IApiCatalogLookup>();
            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations);

            var specifiedUserAssemblies = s_unreferencedAssemblies.Select(ua => new AssemblyInfo()
            {
                AssemblyIdentity = ua, FileVersion = "0.0.0.0"
            }).ToList();
            var unreferencedAssms = engine.FindUnreferencedAssemblies(s_unreferencedAssemblies, specifiedUserAssemblies).ToList();

            // We don't expect to have any unreferenced assemblies.
            Assert.Empty(unreferencedAssms);
        }
Пример #28
0
        public async static void Start()
        {
            analysisEngine = new AnalysisEngine();
            analysisEngine.CandleRecieved     += AnalysisManager_CandleRecieved;
            analysisEngine.SignalRecieved     += AnalysisManager_SignalRecieved;
            analysisEngine.HeikinAshiRecieved += AnalysisManager_HeikinAshiRecieved;
            Logger.OnLog += Logger_OnLog;

            connection = new HubConnectionBuilder()
                         .WithUrl(serverURL, HttpTransportType.WebSockets | HttpTransportType.LongPolling)
                         .Build();

            await connection.StartAsync();

            analysisEngine.Start();
        }
Пример #29
0
        public static void FindUnreferencedAssemblies_UnreferencedAssemblies_1()
        {
            var catalog = Substitute.For <IApiCatalogLookup>();

            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(UnreferencedAssemblies[0])).Returns(true);

            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations, null);

            var specifiedUserAssemblies = new[] { new AssemblyInfo {
                                                      FileVersion = string.Empty, AssemblyIdentity = "MyAssembly"
                                                  } };
            var unreferencedAssms = engine.FindUnreferencedAssemblies(UnreferencedAssemblies, specifiedUserAssemblies).ToList();

            // 0 missing assembly since Microsoft.CSharp is a FX assembly and we specified MyAssembly
            Assert.Empty(unreferencedAssms);
        }
Пример #30
0
        public void FindMembersNotInTargets_2()
        {
            // No member information passed through.
            var testData = new Dictionary <MemberInfo, ICollection <AssemblyInfo> >();
            var targets  = new List <FrameworkName>()
            {
                new FrameworkName("Windows Phone, version=8.1")
            };
            var catalog = Substitute.For <IApiCatalogLookup>();

            GenerateTestData(catalog);

            var recommendations = Substitute.For <IApiRecommendations>();
            var engine          = new AnalysisEngine(catalog, recommendations);
            var notInTarget     = engine.FindMembersNotInTargets(targets, Array.Empty <string>(), testData);

            Assert.Equal(0, notInTarget.Count);
        }
Пример #31
0
        public void BreakingChangeIgnoreSelection()
        {
            var catalog         = Substitute.For <IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsWithFixedEntry();
            var testData        = GenerateTestData(catalog);
            var engine          = new AnalysisEngine(catalog, recommendations);

            var framework  = new FrameworkName(".NET Framework, Version = v4.5.1");
            var framework2 = new FrameworkName(".NET Framework, Version = v4.5.2");

            // Vanilla
            var result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1" }));

            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Empty ignore targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Empty ignore targets with multiple targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Ignore a different target
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.2" }));
            Assert.Equal(0, result.Count());

            // Ignore some but not all targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1" }));
            Assert.Equal(0, result.Count());

            // Ignore all targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1", ".NET Framework,Version=v4.5.2" }));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Ignore different assembly
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(true, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm2, Version=2.0.0.0", result.FirstOrDefault().AssemblyIdentity);
        }
        public void BreakingChangeIgnoreSelection()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsWithFixedEntry();
            var testData = GenerateTestData(catalog);
            var engine = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(".NET Framework, Version = v4.5.1");
            var framework2 = new FrameworkName(".NET Framework, Version = v4.5.2");

            // Vanilla
            var result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1" }));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Empty ignore targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Empty ignore targets with multiple targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Ignore a different target
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.2" }));
            Assert.Equal(0, result.Count());

            // Ignore some but not all targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1" }));
            Assert.Equal(0, result.Count());

            // Ignore all targets
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework, framework2 }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(false, new[] { ".NET Framework,Version=v4.5.1", ".NET Framework,Version=v4.5.2" }));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm1, Version=1.0.0.0", result.FirstOrDefault().AssemblyIdentity);

            // Ignore different assembly
            result = engine.FindBreakingChangeSkippedAssemblies(new[] { framework }, testData.SelectMany(kvp => kvp.Value).Distinct(), GenerateIgnoreAssemblies(true, new string[0]));
            Assert.Equal(1, result.Count());
            Assert.Equal("userAsm2, Version=2.0.0.0", result.FirstOrDefault().AssemblyIdentity);
        }
        private async Task TestEngine()
        {
            // January
            Console.WriteLine("----------------------January----------------------");
            double Temperature = 10.0, PH = 7.1, DO = 13.86, BOD5 = 3.42, COD = 2.68, NH4N = 0.27, NO2N = 0.03, NO3N = 6.7, SS = 24.67, CL = 15.33, CB = 235;
            var    Is = AnalysisEngine.CalculateSimpleIndices(Temperature, PH, DO, BOD5, COD, NH4N, NO2N, NO3N, SS, CL, CB);

            Console.WriteLine(Is.ToJSONString());
            var Ws = AnalysisEngine.GetWeightCoefficients(Temperature, Is);

            Console.WriteLine(Ws.ToJSONString());
            var OverallIndex = AnalysisEngine.CalculateOverallIndex(Is, Ws);

            Console.WriteLine("Overall Index: " + OverallIndex.ToString("F5"));
            var Level = AnalysisEngine.GetLevel(Temperature, OverallIndex);

            Console.WriteLine("Level: " + Level.ToString("D"));

            // May
            Console.WriteLine("----------------------May----------------------");
            Temperature = 20.0; PH = 7.27; DO = 9.95; BOD5 = 2.41; COD = 2.18; NH4N = 0.35; NO2N = 0.02; NO3N = 07.9; SS = 21.33; CL = 24.67; CB = 796.67;
            Is          = AnalysisEngine.CalculateSimpleIndices(Temperature, PH, DO, BOD5, COD, NH4N, NO2N, NO3N, SS, CL, CB);
            Console.WriteLine(Is.ToJSONString());
            Ws = AnalysisEngine.GetWeightCoefficients(Temperature, Is);
            Console.WriteLine(Ws.ToJSONString());
            OverallIndex = AnalysisEngine.CalculateOverallIndex(Is, Ws);
            Console.WriteLine("Overall Index: " + OverallIndex.ToString("F5"));
            Level = AnalysisEngine.GetLevel(Temperature, OverallIndex);
            Console.WriteLine("Level: " + Level.ToString("D"));

            // July
            Console.WriteLine("----------------------July----------------------");
            Temperature = 30.0; PH = 7.23; DO = 8.69; BOD5 = 2.37; COD = 2.4; NH4N = 0.28; NO2N = 0.04; NO3N = 9; SS = 27.33; CL = 23.33; CB = 773.33;
            Is          = AnalysisEngine.CalculateSimpleIndices(Temperature, PH, DO, BOD5, COD, NH4N, NO2N, NO3N, SS, CL, CB);
            Console.WriteLine(Is.ToJSONString());
            Ws = AnalysisEngine.GetWeightCoefficients(Temperature, Is);
            Console.WriteLine(Ws.ToJSONString());
            OverallIndex = AnalysisEngine.CalculateOverallIndex(Is, Ws);
            Console.WriteLine("Overall Index: " + OverallIndex.ToString("F5"));
            Level = AnalysisEngine.GetLevel(Temperature, OverallIndex);
            Console.WriteLine("Level: " + Level.ToString("D"));
        }
Пример #34
0
        internal ControlFlowGraphVertex(AnalysisEngine engine, SourceRoutineSymbol routine, BoundBlock block)
        {
            this.Engine      = engine;
            this.routine     = routine;
            this.block       = block;
            this.File        = routine.ContainingFile.SyntaxTree.FilePath;
            this.Vid         = this.block.Ordinal + this.File.GetHashCode();
            this.BlockName   = this.block.DebugDisplay;
            this.Kind        = this.block.Kind.ToString();
            this.RoutineName = this.routine.Name;
            this.Statements  = this.block.Statements != null ? block.Statements.Count : 0;
            LangElement l = PhylDiagnosingVisitor.PickFirstSyntaxNode(this.block);

            if (l != null)
            {
                Tuple <int, int> pos = engine.GetLineFromTokenPosition(l.Span.Start, this.File);
                this.Line   = pos.Item1;
                this.Column = pos.Item2;
            }
        }
Пример #35
0
        private static void TestBreakingChange(Version version, IApiRecommendations recommendations, bool noBreakingChangesExpected, IEnumerable <AssemblyInfo> assembliesToIgnore, IEnumerable <string> breakingChangesToSuppress)
        {
            var catalog  = Substitute.For <IApiCatalogLookup>();
            var testData = GenerateTestData(catalog);
            var engine   = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(AnalysisEngine.FullFrameworkIdentifier + ",Version=" + version);

            var breakingChanges = engine.FindBreakingChanges(new[] { framework }, testData, assembliesToIgnore, breakingChangesToSuppress, Array.Empty <string>()).ToList();

            if (noBreakingChangesExpected)
            {
                Assert.Empty(breakingChanges);
            }
            else
            {
                Assert.Equal(1, breakingChanges.Count);
                Assert.Equal("5", breakingChanges.First().Break.Id);
            }
        }
        private void Verify(string source, Tristate[] expectedStates, string[] preprocessorSymbolsA = null, string[] preprocessorSymbolsB = null)
        {
            if (preprocessorSymbolsA == null)
            {
                preprocessorSymbolsA = s_defaultPreprocessorSymbolsA;
            }
            if (preprocessorSymbolsB == null)
            {
                preprocessorSymbolsB = s_defaultPreprocessorSymbolsB;
            }

            var projectA = CreateSolution(new[] { source }).Projects.Single();
            var engine   = AnalysisEngine.FromProjects(
                new[] { projectA },
                symbolConfigurations: new[] { preprocessorSymbolsA, preprocessorSymbolsB });

            var regionInfo = engine.GetConditionalRegionInfo().Result.Single();
            var regions    = regionInfo.Chains.SelectMany(c => c.Regions).ToArray();

            Array.Sort(regions);

            Assert.Equal(expectedStates.Length, regions.Length);

            // Make sure the state of each region is what we expect
            for (int i = 0; i < expectedStates.Length; i++)
            {
                var expectedState = expectedStates[i];
                var region        = regions[i];
                if (expectedState != region.State)
                {
                    Assert.False(true, string.Format("The state of the region on line {0} is {1}, expected {2}: {3}",
                                                     region.Location.GetLineSpan().StartLinePosition.Line,
                                                     region.State,
                                                     expectedState,
                                                     region.StartDirective.ToFullString()));
                }
            }
        }
        public void FindMembersNotInTargets_AllNull()
        {
            var engine = new AnalysisEngine(null, null);

            engine.FindMembersNotInTargets(null, null, null);
        }
        public void FindMembersNotInTargetsWithSuppliedAssembly()
        {
            var testData = new Dictionary<MemberInfo, ICollection<AssemblyInfo>>();

            var userAsm1 = new AssemblyInfo() { AssemblyIdentity = "userAsm1, Version=1.0.0.0", FileVersion = "1.0.0.0" };
            var userAsm2 = new AssemblyInfo() { AssemblyIdentity = "userAsm2, Version=2.0.0.0", FileVersion = "2.0.0.0" };
            var userAsm3 = new AssemblyInfo() { AssemblyIdentity = "userAsm3, Version=3.0.0.0", FileVersion = "3.0.0.0" };
            var mi1 = new MemberInfo() { DefinedInAssemblyIdentity = "System.Drawing, Version=1.0.136.0, PublicKeyToken=b03f5f7f11d50a3a", MemberDocId = "T:System.Drawing.Color" };
            var mi2 = new MemberInfo() { DefinedInAssemblyIdentity = "System.Data, Version=1.0.136.0, PublicKeyToken=b77a5c561934e089", MemberDocId = "T:System.Data.SqlTypes.SqlBoolean" };
            var mi3 = new MemberInfo() { DefinedInAssemblyIdentity = "userAsm1, Version=1.0.0.0", MemberDocId = "T:MyType" };

            var usedIn1 = new HashSet<AssemblyInfo>() { userAsm1, userAsm2 };
            testData.Add(mi1, usedIn1);

            var usedIn2 = new HashSet<AssemblyInfo>() { userAsm2, userAsm3 };
            testData.Add(mi2, usedIn2);
            testData.Add(mi3, usedIn2);

            var targets = new List<FrameworkName>() { new FrameworkName("Windows Phone, version=8.1") };

            var catalog = Substitute.For<IApiCatalogLookup>();
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi1.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi2.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkMember(mi1.MemberDocId).Returns(true);
            catalog.IsFrameworkMember(mi2.MemberDocId).Returns(true);

            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);
            var notInTarget = engine.FindMembersNotInTargets(targets, new[] { mi1.DefinedInAssemblyIdentity }, testData);

            Assert.Equal(1, notInTarget.Count);
        }
        public void FindMembersNotInTargets_2()
        {
            // No member information passed through.
            var testData = new Dictionary<MemberInfo, ICollection<AssemblyInfo>>();
            var targets = new List<FrameworkName>() { new FrameworkName("Windows Phone, version=8.1") };
            var catalog = Substitute.For<IApiCatalogLookup>();

            GenerateTestData(catalog);

            var recommendations = Substitute.For<IApiRecommendations>();
            var engine = new AnalysisEngine(catalog, recommendations);
            var notInTarget = engine.FindMembersNotInTargets(targets, Array.Empty<string>(), testData);

            Assert.Equal(0, notInTarget.Count);
        }
        public void FindUnreferencedAssemblies_AllNulls()
        {
            var engine = new AnalysisEngine(null, null);

            engine.FindUnreferencedAssemblies(null, null).ToList();
        }
        public void BreakingChangesNotFullFramework()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsWithFixedEntry();
            var testData = GenerateTestData(catalog);
            var engine = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(".NET Core Framework,Version=4.5.1");

            var breakingChanges = engine.FindBreakingChanges(new[] { framework }, testData, null, null, Array.Empty<string>()).ToList();

            Assert.Empty(breakingChanges);
        }
        public void ShowRetargettingIssuesTrueShouldReturnRuntimeAndRetargettingIssues()
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var recommendations = GenerateTestRecommendationsForShowRetargetting(2, 3);
            var testData = GenerateTestData(catalog);
            var engine = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(".NET Framework, Version = v4.5");

            // ShowRetargettingIssues
            IEnumerable<BreakingChangeDependency> result = engine.FindBreakingChanges(targets: new[] { framework },
                                                                                      dependencies: testData,
                                                                                      assembliesToIgnore: null,
                                                                                      breakingChangesToSuppress: null,
                                                                                      submittedAssemblies: Array.Empty<string>(),
                                                                                      showRetargettingIssues: true);

            Assert.Equal(5, result.Count());

            //verify 1, 2, 3, 4 and 5 are in the list
            int expectedID = 1;
            foreach (BreakingChangeDependency bcd in result)
            {
                Assert.Equal(expectedID.ToString(), bcd.Break.Id);
                expectedID++;
            }
        }
        private static void TestBreakingChange(Version version, IApiRecommendations recommendations, bool noBreakingChangesExpected, IEnumerable<AssemblyInfo> assembliesToIgnore, IEnumerable<string> breakingChangesToSuppress)
        {
            var catalog = Substitute.For<IApiCatalogLookup>();
            var testData = GenerateTestData(catalog);
            var engine = new AnalysisEngine(catalog, recommendations);

            var framework = new FrameworkName(AnalysisEngine.FullFrameworkIdentifier + ",Version=" + version);

            var breakingChanges = engine.FindBreakingChanges(new[] { framework }, testData, assembliesToIgnore, breakingChangesToSuppress, Array.Empty<string>()).ToList();

            if (noBreakingChangesExpected)
            {
                Assert.Empty(breakingChanges);
            }
            else
            {
                Assert.Equal(1, breakingChanges.Count);
                Assert.Equal("5", breakingChanges.First().Break.Id);
            }
        }