void CreateTestProject ()
		{
			testProject = ProjectHelper.CreateTestProject ();
			var solution = new FakeSolution {
				BaseDirectory = @"c:\projects\MyProject\".ToNativePath ()
			};
			testProject.ParentSolution = solution;
		}
		FakeDotNetProject LoadSolutionWithOneProject ()
		{
			solution = new FakeSolution ();
			projectService.OpenSolution = solution;
			var project = new FakeDotNetProject ();
			projectService.OpenProjects.Add (project);
			solution.Projects.Add (project);
			projectService.RaiseSolutionLoadedEvent ();

			return project;
		}
		FakeDotNetProject LoadSolutionWithOneProject ()
		{
			solutionCount++;
			string fileName = String.Format (@"d:\projects\MySolution\MySolution{0}.sln", solutionCount);
			solution = new FakeSolution (fileName);
			projectService.OpenSolution = solution;
			var project = new FakeDotNetProject ();
			projectService.OpenProjects.Add (project);
			solution.Projects.Add (project);
			projectService.RaiseSolutionLoadedEvent (solution);

			return project;
		}
		void CreateUpdatedPackagesInWorkspace ()
		{
			updatedPackagesInWorkspace = new TestableUpdatedNuGetPackagesInWorkspace ();
			taskRunner = updatedPackagesInWorkspace.TaskRunner;
			packageManagementEvents = updatedPackagesInWorkspace.PackageManagementEvents;
			solution = new FakeSolution ();

			var metadataResourceProvider = new FakePackageMetadataResourceProvider ();
			packageMetadataResource = metadataResourceProvider.PackageMetadataResource;
			var source = new PackageSource ("http://test.com");
			var providers = new INuGetResourceProvider[] {
				metadataResourceProvider
			};
			var sourceRepository = new SourceRepository (source, providers);
			taskRunner.SolutionManager.SourceRepositoryProvider.Repositories.Add (sourceRepository);
		}
		public void GetRepository_OpenSolution_ReturnsRepositoryForSolution ()
		{
			CreateSolution ();
			var fakeSolution = new FakeSolution (@"d:\projects\MyProject\MySolution.sln");
			fakeProjectService.OpenSolution = fakeSolution;

			ISolutionPackageRepository repository = solution.GetRepository ();

			Assert.IsNotNull (repository);
			Assert.AreEqual (fakeSolutionPackageRepositoryFactory.SolutionPassedToCreateSolutionPackageRepository, fakeSolution);
			Assert.AreEqual (fakeSolutionPackageRepositoryFactory.FakeSolutionPackageRepository, repository);
		}
		public void FileName_SolutionHasFileName_ReturnsSolutionFileName ()
		{
			CreateSolution ();
			string expectedFileName = @"d:\projects\myproject\Project.sln".ToNativePath ();
			var solution = new FakeSolution (expectedFileName);
			fakeProjectService.OpenSolution = solution;

			string fileName = this.solution.FileName;

			Assert.AreEqual (expectedFileName, fileName);
		}
		void OpenSolution (string fileName)
		{
			var solution = new FakeSolution (fileName);
			projectService.OpenSolution = solution;
		}
		public async Task GetUpdatedPackages_SecondSolutionOpenedWhilstCheckingForUpdatesForFirstSolution_UpdatesFoundForProjectsInBothSolutions ()
		{
			CreateUpdatedPackagesInWorkspace ();
			FakeNuGetProject project = AddNuGetProjectToSolution ();
			project.AddPackageReference ("MyPackage", "1.0");
			packageMetadataResource.AddPackageMetadata ("MyPackage", "1.1");
			packageMetadataResource.AddPackageMetadata ("AnotherPackage", "1.2");
			var firstDotNetProject = dotNetProject;
			FakeDotNetProject secondDotNetProject = null;
			taskRunner.AfterCheckForUpdatesAction = () => {
				if (secondDotNetProject == null) {
					solution = new FakeSolution ();
					FakeNuGetProject anotherProject = AddNuGetProjectToSolution ();
					anotherProject.AddPackageReference ("AnotherPackage", "0.1");
					secondDotNetProject = dotNetProject;
					updatedPackagesInWorkspace.CheckForUpdates (solution);
				}
			};
			await CheckForUpdates ();
			// Wait for second solution checks.
			await taskRunner.CheckForUpdatesTask;

			var updatedPackagesForProjectInFirstSolution = updatedPackagesInWorkspace.GetUpdatedPackages (firstDotNetProject);
			var updatedPackagesForProjectInSecondSolution = updatedPackagesInWorkspace.GetUpdatedPackages (secondDotNetProject);

			Assert.AreEqual (1, updatedPackagesForProjectInFirstSolution.GetPackages ().Count ());
			Assert.AreEqual ("MyPackage", updatedPackagesForProjectInFirstSolution.GetPackages ().First ().Id);
			Assert.AreEqual ("1.1", updatedPackagesForProjectInFirstSolution.GetPackages ().First ().Version.ToString ());
			Assert.AreEqual (1, updatedPackagesForProjectInSecondSolution.GetPackages ().Count ());
			Assert.AreEqual ("AnotherPackage", updatedPackagesForProjectInSecondSolution.GetPackages ().First ().Id);
			Assert.AreEqual ("1.2", updatedPackagesForProjectInSecondSolution.GetPackages ().First ().Version.ToString ());
		}
		void UnloadSolution (FakeSolution solutionToUnload)
		{
			projectService.RaiseSolutionUnloadedEvent (solutionToUnload);
		}
		public void ProjectModified_TwoSolutionsLoadedFirstSolutionUnloadedProjectTargetFrameworkChangedInFirstAndSecondSolution_EventFiresForProjectInOpenSolutionOnly ()
		{
			CreateProjectTargetFrameworkMonitor ();
			FakeDotNetProject firstProject = LoadSolutionWithOneProject ();
			FakeSolution firstSolution = new FakeSolution (solution.FileName);
			projectService.OpenProjects.Clear ();
			FakeDotNetProject secondProject = LoadSolutionWithOneProject ();
			CaptureProjectTargetFrameworkChangedEvents ();
			UnloadSolution (firstSolution);

			firstProject.RaiseModifiedEvent (firstProject, targetFrameworkPropertyName);
			secondProject.RaiseModifiedEvent (secondProject, targetFrameworkPropertyName);

			Assert.AreEqual (1, eventArgs.Count);
			Assert.AreEqual (secondProject, eventArgs [0].Project);
		}
		void CreateSolution (string fileName)
		{
			solution = new FakeSolution (fileName);
		}
		void CreateTestProject ()
		{
			var solution = new FakeSolution (@"c:\projects\Test\MyProject\MySolution.sln");
			solution.BaseDirectory = @"c:\projects\Test\MyProject";
			project = new FakeProject ();
			project.ParentSolution = solution;
		}