Example #1
0
        public void GetNearestFramework_Invalid()
        {
            // Arrange
            var target       = GetToolsService();
            var inputPackage = new[] { "portable-net45+net-cf", "portable-win8+net-cf" };
            var input        = new GetNearestFrameworkInput
            {
                Project = "net451",
                Package = string.Join("\n", inputPackage)
            };

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Invalid, output.InputStatus);
            Assert.Equal(2, output.Invalid.Count);
            Assert.Equal(inputPackage[0], output.Invalid[0]);
            Assert.Equal(inputPackage[1], output.Invalid[1]);
            Assert.True(output.IsProjectValid);
            Assert.False(output.IsPackageValid);
            Assert.Equal(GetFrameworkShortFolderName(input.Project), output.Project.ShortFolderName);
            Assert.Equal(0, output.Package.Count);
            Assert.Null(output.Nearest);
        }
Example #2
0
        public void GetNearestFramework_InvalidAndIncompatible()
        {
            // Arrange
            var target       = GetToolsService();
            var inputPackage = new[] { "netstandard1.6", "portable-net45+net-cf" };
            var input        = new GetNearestFrameworkInput
            {
                Project = "net45",
                Package = string.Join("\n", inputPackage)
            };

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Valid, output.InputStatus);
            Assert.Equal(1, output.Invalid.Count);
            Assert.Equal(inputPackage[1], output.Invalid[0]);
            Assert.True(output.IsProjectValid);
            Assert.True(output.IsPackageValid);
            Assert.Equal(GetFrameworkShortFolderName(input.Project), output.Project.ShortFolderName);
            Assert.Equal(1, output.Package.Count);
            var outputFramework = output.Package.First();

            Assert.Equal(inputPackage[0], outputFramework.Input);
            Assert.Equal(GetFrameworkShortFolderName(inputPackage[0]), outputFramework.Framework.ShortFolderName);
            Assert.False(outputFramework.IsCompatible);
            Assert.Null(output.Nearest);
        }
Example #3
0
        public void GetNearestFramework_MissingProject()
        {
            // Arrange
            var target       = GetToolsService();
            var inputPackage = new[] { "net45" };
            var input        = new GetNearestFrameworkInput
            {
                Project = null,
                Package = string.Join("\n", inputPackage)
            };

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Missing, output.InputStatus);
            Assert.Empty(output.Invalid);
            Assert.False(output.IsProjectValid);
            Assert.True(output.IsPackageValid);
            Assert.Null(output.Project);
            Assert.Equal(1, output.Package.Count);
            var outputFramework = output.Package.First();

            Assert.Equal(inputPackage[0], outputFramework.Input);
            Assert.Equal(GetFrameworkShortFolderName(inputPackage[0]), outputFramework.Framework.ShortFolderName);
            Assert.False(outputFramework.IsCompatible);
            Assert.Null(output.Nearest);
        }
Example #4
0
        public void GetNearestFramework_Mixed()
        {
            // Arrange
            var target       = GetToolsService();
            var inputPackage = new[] { "net40", "net45", "netstandard1.6", "portable-net45+net-cf" };
            var input        = new GetNearestFrameworkInput
            {
                Project = "net451",
                Package = string.Join("\n", inputPackage)
            };

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Valid, output.InputStatus);
            Assert.Equal(1, output.Invalid.Count);
            Assert.Equal(inputPackage[3], output.Invalid[0]);
            Assert.True(output.IsProjectValid);
            Assert.True(output.IsPackageValid);
            Assert.Equal(GetFrameworkShortFolderName(input.Project), output.Project.ShortFolderName);
            Assert.Equal(3, output.Package.Count);

            var outputFrameworkA = output.Package.ElementAt(0);

            Assert.Equal(inputPackage[0], outputFrameworkA.Input);
            Assert.Equal(GetFrameworkShortFolderName(inputPackage[0]), outputFrameworkA.Framework.ShortFolderName);
            Assert.True(outputFrameworkA.IsCompatible);

            var outputFrameworkB = output.Package.ElementAt(1);

            Assert.Equal(inputPackage[1], outputFrameworkB.Input);
            Assert.Equal(GetFrameworkShortFolderName(inputPackage[1]), outputFrameworkB.Framework.ShortFolderName);
            Assert.True(outputFrameworkB.IsCompatible);

            var outputFrameworkC = output.Package.ElementAt(2);

            Assert.Equal(inputPackage[2], outputFrameworkC.Input);
            Assert.Equal(GetFrameworkShortFolderName(inputPackage[2]), outputFrameworkC.Framework.ShortFolderName);
            Assert.False(outputFrameworkC.IsCompatible);

            Assert.Same(outputFrameworkB, output.Nearest);
        }
Example #5
0
        public void GetNearestFramework_NullInput()
        {
            // Arrange
            var target = GetToolsService();
            GetNearestFrameworkInput input = null;

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Missing, output.InputStatus);
            Assert.Empty(output.Invalid);
            Assert.False(output.IsProjectValid);
            Assert.False(output.IsPackageValid);
            Assert.Null(output.Project);
            Assert.Empty(output.Package);
            Assert.Null(output.Nearest);
        }
Example #6
0
        public void GetNearestFramework_MissingPackage()
        {
            // Arrange
            var target = GetToolsService();
            var input  = new GetNearestFrameworkInput
            {
                Project = "net45",
                Package = null
            };

            // Act
            var output = target.GetNearestFramework(input);

            // Assert
            Assert.Same(input, output.Input);
            Assert.Equal(InputStatus.Missing, output.InputStatus);
            Assert.Empty(output.Invalid);
            Assert.True(output.IsProjectValid);
            Assert.False(output.IsPackageValid);
            Assert.Equal(GetFrameworkShortFolderName(input.Project), output.Project.ShortFolderName);
            Assert.Empty(output.Package);
            Assert.Null(output.Nearest);
        }
Example #7
0
        public async Task <IActionResult> GetNearestFramework([FromRoute] string nuGetVersion, [FromQuery] GetNearestFrameworkInput input, CancellationToken token)
        {
            var redirect = GetVersionRedirect();

            if (redirect != null)
            {
                return(redirect);
            }

            var toolsService = await _toolsFactory.GetServiceAsync(nuGetVersion, token);

            if (toolsService == null)
            {
                return(NotFound());
            }

            var output          = toolsService.GetNearestFramework(input);
            var versionedOutput = await GetSelectedVersionOutputAsync(toolsService, output, token);

            return(View(versionedOutput));
        }
Example #8
0
        public GetNearestFrameworkOutput GetNearestFramework(GetNearestFrameworkInput input)
        {
            var outputFrameworks = new List <OutputFramework>();
            var invalid          = new List <string>();
            var output           = new GetNearestFrameworkOutput
            {
                InputStatus = InputStatus.Missing,
                Package     = outputFrameworks,
                Invalid     = invalid,
                Input       = input
            };

            if (input == null)
            {
                return(output);
            }

            var projectMissing = string.IsNullOrWhiteSpace(input.Project);
            var packageMissing = string.IsNullOrWhiteSpace(input.Package);

            var project = default(TFramework);

            if (!projectMissing)
            {
                try
                {
                    project               = _frameworkLogic.Parse(input.Project);
                    output.Project        = project;
                    output.IsProjectValid = true;
                }
                catch (Exception)
                {
                    output.IsProjectValid = false;
                }
            }

            if (!packageMissing)
            {
                using (var reader = new StringReader(input.Package))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        line = line.Trim();
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }

                        try
                        {
                            var framework = _frameworkLogic.Parse(line);
                            var pair      = new OutputFramework
                            {
                                Input        = line,
                                Framework    = framework,
                                IsCompatible = false
                            };

                            if (output.Project != null)
                            {
                                pair.IsCompatible = _frameworkLogic.IsCompatible(project, framework);
                            }

                            outputFrameworks.Add(pair);
                        }
                        catch (Exception)
                        {
                            invalid.Add(line);
                        }
                    }
                }

                output.IsPackageValid = output.Package.Any();
            }

            if (!projectMissing && !packageMissing)
            {
                if (output.IsProjectValid && output.IsPackageValid)
                {
                    output.InputStatus = InputStatus.Valid;

                    var frameworks = output.Package.Select(x => (TFramework)x.Framework).ToArray();
                    var nearest    = _frameworkLogic.GetNearest(project, frameworks);
                    if (nearest != null)
                    {
                        output.Nearest = output.Package.First(x => x.Framework.Equals(nearest));
                    }
                }
                else
                {
                    output.InputStatus = InputStatus.Invalid;
                }
            }

            return(output);
        }