public UpdatePackageAction CreateUpdatePackageAction ()
		{
			var action = new FakeUpdatePackageAction (this);
			FakeUpdatePackageActionsCreated.Add (action);
			return action;
		}
		FakeUpdatePackageAction CreateFakeUpdateAction ()
		{
			fakeUpdateAction = new FakeUpdatePackageAction (project);
			return fakeUpdateAction;
		}
		FakePackage UpdatePackageWithNoPackageOperations (bool updateDependencies, bool allowPrereleaseVersions)
		{
			FakePackage package = CreateFakePackage ();
			var updateAction = new FakeUpdatePackageAction ();
			updateAction.Operations = new List<PackageOperation> ();
			updateAction.UpdateDependencies = updateDependencies;
			updateAction.AllowPrereleaseVersions = allowPrereleaseVersions;
			packageManager.UpdatePackage (package, updateAction);
			return package;
		}
		FakePackage UpdatePackageWithPackageOperations (PackageOperation operation)
		{
			var operations = new PackageOperation[] {
				operation
			};
			FakePackage package = CreateFakePackage ();
			var updateAction = new FakeUpdatePackageAction ();
			updateAction.Operations = operations;
			updateAction.UpdateDependencies = true;
			packageManager.UpdatePackage (package, updateAction);
			return package;
		}
		FakePackage UpdatePackageWithNoPackageOperations ()
		{
			FakePackage package = CreateFakePackage ();
			var updateAction = new FakeUpdatePackageAction ();
			updateAction.Operations = new List<PackageOperation> ();
			updateAction.UpdateDependencies = true;
			packageManager.UpdatePackage (package, updateAction);
			return package;
		}
		public void UpdatePackage_OldPackageReferenceIsRemovedOnUpdatingButAnotherProjectStillReferencesThePackage_OldPackageIsNotUninstalled ()
		{
			CreatePackageManager ();
			var fakeProjectManager = new FakeProjectManager ();
			packageManager.ProjectManager = fakeProjectManager;
			FakePackage installedPackage = fakeSolutionSharedRepository.AddFakePackageWithVersion ("MyPackage-Core", "1.0");
			FakePackage updatedPackage = fakeFeedSourceRepository.AddFakePackageWithVersion ("MyPackage", "1.1");
			var eventArgs = new PackageOperationEventArgs (installedPackage, null, null);
			RaisePackageRemovedEventWhenPackageReferenceUpdated (fakeProjectManager, updatedPackage, eventArgs);
			var updateAction = new FakeUpdatePackageAction {
				Operations = new List<PackageOperation> (),
				UpdateDependencies = false
			};
			fakeSolutionSharedRepository.PackageIdsReferences.Add ("MyPackage-Core");

			packageManager.UpdatePackage (updatedPackage, updateAction);

			Assert.IsTrue (fakeSolutionSharedRepository.FakePackages.Contains (installedPackage));
		}
		public void UpdatePackage_TwoOldPackageReferencesAreRemovedOnUpdating_BothOldPackagesAreUninstalled ()
		{
			CreatePackageManager ();
			var fakeProjectManager = new FakeProjectManager ();
			packageManager.ProjectManager = fakeProjectManager;
			FakePackage installedPackage1 = fakeSolutionSharedRepository.AddFakePackageWithVersion ("MyPackage-Core", "1.0");
			FakePackage installedPackage2 = fakeSolutionSharedRepository.AddFakePackageWithVersion ("MyPackage", "1.0");
			FakePackage updatedPackage = fakeFeedSourceRepository.AddFakePackageWithVersion ("MyPackage", "1.1");
			var eventArgs1 = new PackageOperationEventArgs (installedPackage1, null, null);
			var eventArgs2 = new PackageOperationEventArgs (installedPackage2, null, null);
			RaisePackageRemovedEventWhenPackageReferenceUpdated (fakeProjectManager, updatedPackage, eventArgs1, eventArgs2);
			var updateAction = new FakeUpdatePackageAction {
				Operations = new List<PackageOperation> (),
				UpdateDependencies = false
			};

			packageManager.UpdatePackage (updatedPackage, updateAction);

			Assert.IsFalse (fakeSolutionSharedRepository.FakePackages.Contains (installedPackage2));
			Assert.IsFalse (fakeSolutionSharedRepository.FakePackages.Contains (installedPackage1));
		}