diff --git a/data/resources/StringResources.de.resx b/data/resources/StringResources.de.resx index 70ce433b9d..026bebfe3b 100644 --- a/data/resources/StringResources.de.resx +++ b/data/resources/StringResources.de.resx @@ -408,9 +408,6 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S Klassendiagramm anzeigen - - Konsole löschen - Verlauf löschen diff --git a/data/resources/StringResources.es-mx.resx b/data/resources/StringResources.es-mx.resx index 088c8c17a5..88cfab51ab 100644 --- a/data/resources/StringResources.es-mx.resx +++ b/data/resources/StringResources.es-mx.resx @@ -409,9 +409,6 @@ Dejarán de funcionar después de desinstalar este complemento! ¿Esta seguro de Mostrar Diagrama de Clase - - Limpiar consola - Borrar Historial diff --git a/data/resources/StringResources.es.resx b/data/resources/StringResources.es.resx index 8aa1011786..c3886f0541 100644 --- a/data/resources/StringResources.es.resx +++ b/data/resources/StringResources.es.resx @@ -1679,6 +1679,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Cursiva + + Subrayado + Exportar colores de resaltado @@ -2077,6 +2080,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib Detener ejecución en la primera línea. + + Seleccione excepciones + Habilitar decompilador diff --git a/data/resources/StringResources.fr.resx b/data/resources/StringResources.fr.resx index 9497373199..5e2fc361d7 100644 --- a/data/resources/StringResources.fr.resx +++ b/data/resources/StringResources.fr.resx @@ -399,8 +399,8 @@ Ils ne fonctionneront plus si vous désinstallez cet Add-In! Souhaitez-vous cont Afficher le diagramme des classes - - Vider la console + + Effacer la console Effacer l'historique @@ -2619,6 +2619,69 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}? Fichier de r&essources Win32: + + Informations sur l'Assembly + + + Fichier Assembly.info introuvable. Veuillez vous assurer qu'il existe dans le projet. + + + Version: + + + Conforme CLS + + + Société: + + + Copyright: + + + Alias par défaut: + + + Description: + + + Version du fichier: + + + GUID: + + + Une valeur du fichier Assembly.info est incorrecte. + + + Version informelle: + + + Optimisation JIT + + + Suivi JIT + + + Rendre l'Assembly visible par COM: + + + Language neutre: + + + Nouveau GUID + + + Aucun + + + Produit: + + + Titre: + + + Trademark: + Avancé @@ -4835,6 +4898,12 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace Extension Visual Studio + + Activer l'analyse de App.xml + + + Editeur WPF + Appuyer sur "Alt" pour saisir un Conteneur diff --git a/data/resources/StringResources.it.resx b/data/resources/StringResources.it.resx index 5d152acac8..cfd311c3e3 100644 --- a/data/resources/StringResources.it.resx +++ b/data/resources/StringResources.it.resx @@ -409,9 +409,6 @@ Smetteranno di funzionare dopo la rimozione di questo Componente! Sei sicuro di Mostra Diagramma delle Classi - - Pulisci console - Cancella cronologia @@ -1836,7 +1833,7 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}? Errore parsing espressione regolare: - Trova &tutti + Trov&a tutti &Trova @@ -2244,10 +2241,10 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}? Cre&a copia di backup - Codifica file predefinita: + Codifica fil&e predefinita: - &Controlla modifiche esterne ai files + Controlla mo&difiche esterne ai files Carica @@ -2446,7 +2443,7 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}? Abilita &doppio buffer - Abilita c&artelle + Abilita &struttura Carattere @@ -2634,6 +2631,69 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}? File di R&isorsa Win32: + + Informazioni assembly + + + Il file delle informazioni dell'assembly non è stato trovato. Prego assicurarsi che il progetto contenga il file + + + Versione assembly: + + + Compatibile CLS + + + Società: + + + Copyright: + + + Alias predefinito: + + + Descrizione: + + + Versione File: + + + GUID: + + + Uno dei valori delle informazioni dell'assembly non è corretto. + + + Versione informativa: + + + Ottimizzazione JIT + + + Monitoraggio JIT + + + Rendi l'assembly visibile a COM + + + Linguaggio neutrale: + + + Nuovo GUID + + + Nessuna + + + Prodotto: + + + Titolo: + + + Marchio: + Avanzato @@ -4858,6 +4918,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Estensione Visual Studio + + Attiva l'analisi di App.xaml + + + Editor WPF + Premere "Alt" per entrare nel Contenitore @@ -5345,7 +5411,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Interrompi - Arresta su l'eccezione gestita ${ExceptionName} + Arresta su eccezione gestita ${ExceptionName} Continua @@ -6170,10 +6236,10 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Aggiorna bitmap ... - Cursore di aggiornamento ... + Aggiorna cursore ... - Icona di aggiornamento ... + Aggiorna icona ... Vuoi veramente cancellare la(e) risorsa(e) selezionata(e)? @@ -7449,7 +7515,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. Ferma il processo corrente e termina il debug. - Attiva/Disattiva BreakPoint + Commuta Breakpoint &Modifica @@ -7479,10 +7545,10 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. Mostra solo le &definizioni - Mostra &tutte le Cartelle + Commuta &tutte le Cartelle - Mo&stra cartella + Commu&ta cartella &Formato @@ -7668,7 +7734,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. &Mezzo - &Centro nella Form + &Centra nella Form &Orizzontalmente @@ -7695,7 +7761,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. Rendi &Uguali - Porta in &Sfondo + Porta su &Sfondo A&llinea Icone @@ -7749,7 +7815,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. &Incrementa - Rendi &Uguali + Rendi &Uguale &Aiuto @@ -7809,7 +7875,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati. Compila il progetto o il buffer corrente (quando nessun progetto è aperto)(salva automaticamente) - Devi interrompere il debugger generare il progetto. + Devi interrompere il debugger per generare il progetto. Vuoi fermare il debug? @@ -7843,7 +7909,7 @@ Vuoi fermare il debug? &Vai a... - Vai alla parentesi graffa + Vai alla parentesi graffa corrispondente Ricerca Incrementale @@ -7870,7 +7936,7 @@ Vuoi fermare il debug? Cerca per Problemi... - A&ttiva segnalibro + Commu&ta segnalibro Mette/toglie segnalibro alla linea corrente diff --git a/data/resources/StringResources.ru.resx b/data/resources/StringResources.ru.resx index 0b3c5b5e5a..8afb53be2d 100644 --- a/data/resources/StringResources.ru.resx +++ b/data/resources/StringResources.ru.resx @@ -405,9 +405,6 @@ Показать диаграмму классов - - Очистить консоль - Удалить историю @@ -454,7 +451,7 @@ Не удалось запустить Help Library Manager, так как каталог справки не выбран/не установлен. Пожалуйста, проверьте настройки (Инструменты -> Параметры -> Инструменты -> Microsoft Help Viewer). - Не удалось найти Help Library Manager. Для использования контекстной помощи в SharpDeveloper, необходимо скачать и установить Microsoft's Windows SDK 7.1. + Не удалось найти Help Library Manager. Для использования контекстной помощи в SharpDevelop, необходимо скачать и установить Microsoft Windows SDK 7.1. Не удалось найти Help Library Manager. Пожалуйста, удостоверьтесь в том, что он был корректно установлен. @@ -2589,6 +2586,69 @@ Файл ресурсов Win32: + + Данные сборки + + + Файл AssemblyInfo.cs не найден. Убедитесь в том, что проект содержит файл с данными сборки. + + + Версия сборки: + + + Соответствие спецификации CLS + + + Компания: + + + Копирайт: + + + Псевдоним: + + + Описание: + + + Версия файла: + + + GUID: + + + Одно из значений данных сборки указано неверно. + + + Информативная версия: + + + JIT-оптимизация + + + JIT-отслеживание + + + Сборка видима для COM + + + Нейтральный язык: + + + Новый GUID + + + не указано + + + Продукт: + + + Наименование: + + + Торговая марка: + Дополнительно @@ -2815,7 +2875,7 @@ Выберите строгое имя для файла ключа: - Подписывание ВОдинЩелчок + Подпись ClickOnce Подпись ClickOnce приложения пока не реализована. @@ -3807,6 +3867,12 @@ Невозможно создать PrintDocument + + Файл, защищённый от записи, уже существует в данном каталоге. + + + Для проекта данного типа не установлен обработчик. + Файл проекта не найден. @@ -4055,7 +4121,7 @@ Добавлять комментарий "TODO" в обработчики новых событий - Назначение свойств (работает быстрее для небольшого количества свойств, но значительно хуже для большого числа свойств) + Присваивание значений (подходит для небольшого количества свойств) Модель локализации по умолчанию @@ -4067,7 +4133,7 @@ Модель локализации - Рефлексия свойств (работает медленнее во время выполнения программы для небольшого количества свойств, но значительно лучше при большом числе свойств, особенно со значениями по умолчанию) + Рефлексия (подходит для большого числа свойств, особенно со значениями по умолчанию) Дизайнер форм @@ -4443,22 +4509,22 @@ Покрытие кода - Создать выходной XML файл + Создавать XML-файл с результатами - Пометить каждый тест + Отмечать каждый тест - Теневая копия + Теневое копирование сборок - Показать логотип + Показывать логотип - Показать прогресс + Показывать прогресс - Запустить тесты в отдельном потоке + Запускать тесты в отдельном потоке Запустить все тесты с покрытием кода @@ -5431,13 +5497,13 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Невозможно сделать шаг, так как отсутствует активная выбранная функция - Вы не можете переключиться на поток, с недоступным фреймом исполнения. + Вы не можете переключиться на поток с недоступным фреймом исполнения. Вы не можете переключать потоки пока включён отладчик. - Вы не можете переключиться на поток в декомпилированном коде, без включения декомпилятора. + Вы не можете переключиться на поток в декомпилированном коде без включения декомпилятора. Заморозить @@ -6028,7 +6094,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Нецифровой символ - Не пробельный символ + Непробельный символ Небуквенный символ @@ -6181,7 +6247,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Файлы проектов Visual Basic - XML файлы (*.xml) + XML-файлы (*.xml) Файлы схем XML (*.xsd) @@ -6259,10 +6325,10 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< Найти базовые символы - Найти полученные классы + Найти наследуемые классы - Найти полученные символы + Найти наследуемые символы Поиск ссылок... @@ -7025,10 +7091,10 @@ SharpDevelop 2 иначе компилировал ресурсы: имя рес Файл App.Config - Пустой XML файл + Пустой XML-файл - Создаёт пустой XML файл. + Создаёт пустой XML-файл. Создать пустую форму XML diff --git a/data/resources/StringResources.tr.resx b/data/resources/StringResources.tr.resx index e6ef635929..bc6416fde2 100644 --- a/data/resources/StringResources.tr.resx +++ b/data/resources/StringResources.tr.resx @@ -408,6 +408,9 @@ Eklenti kaldırıldıktan sonra çalışması durabilir! Devam etmek istediğini Sınıf Şemasını Göster + + Geçmişi sil + Bu işlem için TortoiseGit yüklü olmalıdır. @@ -525,6 +528,21 @@ Eklenti kaldırıldıktan sonra çalışması durabilir! Devam etmek istediğini Başlık + + Paket yönetim konsolu + + + Paketleri yönet... + + + Paketleri geri yükle + + + Paket kaynakları + + + Paket yönetimi + Sonuç @@ -1573,6 +1591,9 @@ Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya Parametreli anonim yöntem yerleştir. + + Kolonlar: + SharpDevelop Hakkında @@ -1594,6 +1615,12 @@ Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya Sürüm + + İşlemler: + + + Servisler: + son dosyalar @@ -1680,6 +1707,9 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz. İtalik + + Altı çizili + Renk vurgulamayı dışa aktar @@ -1984,6 +2014,12 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Önbelleği temizle + + Basılı karaktere bağlı kalarak seçili kod tamamlamayı ekle: + + + Sadece <Tab> veya <Enter> tuşuna basarak seçili kod tamamlama öğersi ekle. + Bir karakter eklendiğinde tamamlama listesini göster @@ -2005,6 +2041,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Kaydet + + İpucu ayarları + Araçipuçları linkler gitmeli @@ -2068,12 +2107,24 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Yürütmenin ilk satırında ara ver. + + İstisnaları seçiniz + Tekrar derlemeyi etkinleştir Düzenle ve Devam eti Etkinleştir + + Tam istisna adı + + + Hata ayıklayıcıyı duraklat + + + Hata ayıklayıcının durmasını istediğiniz istisna tiplerini seçiniz + İstisnalar @@ -2467,6 +2518,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Derlemenin oluşturulacağı dizini seçin. + + Servis referansları + Vurgu @@ -2662,6 +2716,12 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz? Yapılandırmayı değiştirmek mevcut değerleri kaydeder. Devam edilsin mi? + + Dosya isimleri: + + + Derledikten sonra çalıştır. + Hata Ayıkla @@ -2839,6 +2899,9 @@ Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içind Mevcut sınıfı kullan: + + Mümkünse hataları otomatik olarak düzelt + .NET Derleme Tarayıcısı @@ -3091,12 +3154,27 @@ Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içind Değiştir + + Yeniden başlat + Yeniden Dene Hepsini Seç + + Alt + + + Ctrl + + + Shift + + + Win + Küçük Simgeler @@ -3633,6 +3711,9 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye '{0}' türü bulunamıyor. Bir derleme bilgisi eksik olabilir mi? + + Kursorün bulunduğu pozisyonda tip tanımı veya tip üyesi bulunamadı + Seçilen eleman sınıfsız veya geçersiz bir üye, bu yüzden türetilmemiş semboller gösterilebilir. @@ -4936,6 +5017,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Derleme başarılı oldu. + + ${Name} projesinin derlenmesi desteklenmemektedir. + Derleme başladı. @@ -5197,6 +5281,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Kesme + + ${ExceptionName} öngörülen istisna durumunda duraklat + Devam @@ -5524,6 +5611,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Hata Ayıkla + + Metin çok uzun olduğundan kısaltılmıştır. + Projeler @@ -5587,6 +5677,24 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Görev Listesi + + Açık olan tüm dosyalarda + + + Sınıf/Modül + + + Dosya + + + Ad alanı + + + Proje + + + Çözüm + Araçlar @@ -5998,15 +6106,27 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Resmi güncelle... + + İmleci güncelle ... + + + İkonu güncelle ... + Seçili kaynağı silmek istediğinizden emin misiniz? Kaynağı sil + + Filtre: + Kaynak yüklenemiyor + + Kaynak dosyadan {0} yüklenemedi. + Hata: Kaynak kodu üreteci "{0}" kaynak dosyasını atladı, çünkü oluşturulan sınıf mevcut sınıf "{1}" ile çakışıyor. @@ -6019,6 +6139,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< İçerik + + Boolean giriş & ekle + Dosyaları ekle... @@ -6139,6 +6262,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< ${Name} Temel sınıfları + + ${Name} temel üyesidir + Bu işlem yerine getirilemez çünkü kaynak kodlarınızda hata var: @@ -6187,6 +6313,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< Temel sınıfları bul + + Temel semboleri bul + Türetilmiş sınıfları bul @@ -6491,6 +6620,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. Rapor Türü + + Temel rapor ayarları + Dosya Adı @@ -6530,6 +6662,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. Tablo Düzeni + + Sayfa düzeni + Veri Modeli Çek @@ -6545,9 +6680,18 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. Mevcut Alanlar + + Proje seçili değildir,lütfen alan adlarını giriniz + + + Seçili projedeki sınıflar + Sorgu Sonucunu Göster + + SharpReport sihirbazına hoşgeldiniz + Sekme Ekle @@ -7658,6 +7802,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı. Artan Aramayı Geri Al + + Sorunları araştır... + Yer imlerini ters çevir @@ -7773,6 +7920,9 @@ Başlatma hatası: Yeniden Düzenleme + + Tekrar formatla + Bölgeyi yorumlama diff --git a/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj b/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj index 22ac5f838c..c1929bd72d 100644 --- a/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj +++ b/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj @@ -44,6 +44,9 @@ + + DotnetDetection.cs + diff --git a/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs b/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs index e287193ed7..237fa49504 100644 --- a/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs +++ b/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs @@ -28,6 +28,7 @@ using System.Security.Cryptography; using System.Text; using System.Xml; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.SharpDevelop; using Microsoft.CSharp; using NUnit.Framework; @@ -209,6 +210,10 @@ namespace Debugger.Tests void StartTest(string testName, bool wait) { + if (!IsRuntimeCompatible()) { + Assert.Ignore(); + return; + } this.testName = testName; string exeFilename = CompileTest(testName); @@ -595,5 +600,13 @@ namespace Debugger.Tests // (see https://github.com/icsharpcode/SharpDevelop/issues/581) return true; } + + /// + /// Debugger Tests currently require .NET 4.6 + /// + protected static bool IsRuntimeCompatible() + { + return DotnetDetection.IsDotnet46Installed(); + } } } diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs index 653f5ad42a..3a72036b4e 100644 --- a/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs +++ b/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs @@ -92,6 +92,7 @@ namespace Debugger.Tests { Line="30" /> System.Configuration.dll (No symbols) + System.Core.dll (No symbols) System.Xml.dll (No symbols) Main 1\r\n Breakpoint_Tests.cs:29,4-29,49 diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs index b971fdb6f6..5bc0c7c07b 100644 --- a/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs +++ b/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs @@ -88,6 +88,7 @@ namespace Debugger.Tests { 5 0 0 0 48 0 65 0 6C 0 6C 0 6F 0 6 0 0 0 20 0 20 0 20 0 20 0 20 0 21 0 System.Configuration.dll (No symbols) + System.Core.dll (No symbols) System.Xml.dll (No symbols) Hello world!\r\n diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs index e511d620e9..b47e1cbf88 100644 --- a/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs +++ b/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs @@ -65,6 +65,7 @@ namespace Debugger.Tests { StackFrame_SetIP.exe (Has symbols) System.dll (No symbols) System.Configuration.dll (No symbols) + System.Core.dll (No symbols) System.Xml.dll (No symbols) 1\r\n StackFrame_SetIP.cs:28,4-28,40 diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs index fbeb228d6f..d755d62a49 100644 --- a/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs +++ b/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs @@ -38,6 +38,8 @@ namespace Debugger.Tests { [NUnit.Framework.Test] public void _HelloWorldTest() { + if (!IsRuntimeCompatible()) + NUnit.Framework.Assert.Ignore(); StartTest(); EndTest(); @@ -56,6 +58,7 @@ namespace Debugger.Tests { _HelloWorldTest.exe (Has symbols) System.dll (No symbols) System.Configuration.dll (No symbols) + System.Core.dll (No symbols) System.Xml.dll (No symbols) Hello world!\r\n _HelloWorldTest.cs:29,4-29,40 diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs index 45f8f1c523..39ea549108 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs @@ -204,5 +204,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes } public bool DevelopmentDependency { get; set; } + + public void ExtractContents(IFileSystem fileSystem, string extractPath) + { + throw new NotImplementedException(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs index 93dab21b5e..92a6db9125 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs @@ -62,6 +62,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets [Parameter] public FileConflictAction FileConflictAction { get; set; } + [Parameter] + public DependencyVersion? DependencyVersion { get; set; } + protected override void ProcessRecord() { ThrowErrorIfProjectNotOpen(); @@ -99,6 +102,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets action.IgnoreDependencies = IgnoreDependencies.IsPresent; action.AllowPrereleaseVersions = IncludePrerelease.IsPresent; action.PackageScriptRunner = this; + if (DependencyVersion.HasValue) { + action.DependencyVersion = DependencyVersion.Value; + } return action; } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs index 4c920e79ef..4ed8c94270 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs @@ -69,6 +69,10 @@ namespace ICSharpCode.PackageManagement.Cmdlets [Parameter] public FileConflictAction FileConflictAction { get; set; } + [Parameter(Mandatory = true, ParameterSetName = "Reinstall")] + [Parameter(ParameterSetName = "All")] + public SwitchParameter Reinstall { get; set; } + protected override void ProcessRecord() { ThrowErrorIfProjectNotOpen(); @@ -88,15 +92,31 @@ namespace ICSharpCode.PackageManagement.Cmdlets { if (HasPackageId()) { if (HasProjectName()) { - UpdatePackageInSingleProject(); + if (Reinstall) { + ReinstallPackageInSingleProject(); + } else { + UpdatePackageInSingleProject(); + } } else { - UpdatePackageInAllProjects(); + if (Reinstall) { + ReinstallPackageInAllProjects(); + } else { + UpdatePackageInAllProjects(); + } } } else { if (HasProjectName()) { - UpdateAllPackagesInProject(); + if (Reinstall) { + ReinstallAllPackagesInProject(); + } else { + UpdateAllPackagesInProject(); + } } else { - UpdateAllPackagesInSolution(); + if (Reinstall) { + ReinstallAllPackagesInSolution(); + } else { + UpdateAllPackagesInSolution(); + } } } } @@ -208,5 +228,93 @@ namespace ICSharpCode.PackageManagement.Cmdlets { return new PackageReference(Id, Version, null, null, false, false); } + + void ReinstallPackageInSingleProject() + { + IPackageManagementProject project = GetProject(); + IPackage package = FindPackageOrThrow(project); + ReinstallPackageInProject(project, package); + } + + IPackage FindPackageOrThrow(IPackageManagementProject project) + { + IPackage package = project.FindPackage(Id, null); + if (package != null) { + return package; + } + + throw CreatePackageNotFoundException(Id); + } + + static InvalidOperationException CreatePackageNotFoundException(string packageId) + { + string message = String.Format("Unable to find package '{0}'.", packageId); + throw new InvalidOperationException(message); + } + + void ReinstallPackageInProject(IPackageManagementProject project, IPackage package) + { + ReinstallPackageAction action = CreateReinstallPackageAction(project, package); + using (IDisposable operation = StartReinstallOperation(action)) { + action.Execute(); + } + } + + IDisposable StartReinstallOperation(ReinstallPackageAction action) + { + return action.Project.SourceRepository.StartReinstallOperation(action.PackageId); + } + + ReinstallPackageAction CreateReinstallPackageAction(IPackageManagementProject project, IPackage package) + { + ReinstallPackageAction action = project.CreateReinstallPackageAction(); + action.PackageId = package.Id; + action.PackageVersion = package.Version; + action.UpdateDependencies = UpdateDependencies; + action.AllowPrereleaseVersions = AllowPreleaseVersions || !package.IsReleaseVersion(); + action.PackageScriptRunner = this; + return action; + } + + void ReinstallAllPackagesInProject() + { + ReinstallAllPackagesInProject(GetProject()); + } + + void ReinstallAllPackagesInProject(IPackageManagementProject project) + { + // No need to update dependencies since all packages will be reinstalled. + IgnoreDependencies = true; + + foreach (IPackage package in project.GetPackages()) { + ReinstallPackageInProject(project, package); + } + } + + void ReinstallPackageInAllProjects() + { + bool foundPackage = false; + + IPackageRepository repository = GetActivePackageRepository(); + foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) { + IPackage package = project.FindPackage(Id, null); + if (package != null) { + foundPackage = true; + ReinstallPackageInProject(project, package); + } + } + + if (!foundPackage) { + throw CreatePackageNotFoundException(Id); + } + } + + void ReinstallAllPackagesInSolution() + { + IPackageRepository repository = GetActivePackageRepository(); + foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) { + ReinstallAllPackagesInProject(project); + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs index 8dbbe66d67..b435fc9150 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs @@ -335,5 +335,28 @@ namespace PackageManagement.Cmdlets.Tests fakeConsoleHost.AssertLoggerIsDisposed(); Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger); } + + [Test] + public void ProcessRecord_DependencyVersionSetToHighest_DependencyVersionUsedWhenInstallingPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + cmdlet.DependencyVersion = DependencyVersion.Highest; + + RunCmdlet(); + + DependencyVersion actualDependencyVersion = fakeProject.LastInstallPackageCreated.DependencyVersion; + Assert.AreEqual(DependencyVersion.Highest, actualDependencyVersion); + } + + [Test] + public void ProcessRecord_DependencyVersionNotSett_DependencyVersionSetToLowestWhenInstallingPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + + RunCmdlet(); + + DependencyVersion actualDependencyVersion = fakeProject.LastInstallPackageCreated.DependencyVersion; + Assert.AreEqual(DependencyVersion.Lowest, actualDependencyVersion); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs index e683100c35..88abaddb74 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs @@ -17,6 +17,8 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; +using System.Linq; using System.Management.Automation; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; @@ -179,6 +181,26 @@ namespace PackageManagement.Cmdlets.Tests return action; } + FakeReinstallPackageAction ReinstallPackageInSingleProjectAction { + get { return fakeProject.FakeReinstallPackageActionsCreated.First(); } + } + + List ReinstallPackageActionsCreated { + get { return fakeProject.FakeReinstallPackageActionsCreated; } + } + + FakePackage ProjectHasPackageInstalled(string packageId, string version) + { + return ProjectHasPackageInstalled(fakeProject, packageId, version); + } + + static FakePackage ProjectHasPackageInstalled(FakePackageManagementProject project, string packageId, string version) + { + FakePackage package = project.FakeLocalRepository.AddFakePackageWithVersion(packageId, version); + project.FakePackages.Add(package); + return package; + } + [Test] public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError() { @@ -846,5 +868,296 @@ namespace PackageManagement.Cmdlets.Tests fakeConsoleHost.AssertLoggerIsDisposed(); Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger); } + + [Test] + public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecified_ReinstallPackageActionIsExecuted() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("Test"); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3"); + + RunCmdlet(); + + Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted); + Assert.AreEqual(cmdlet, ReinstallPackageInSingleProjectAction.PackageScriptRunner); + Assert.AreEqual("Test", ReinstallPackageInSingleProjectAction.PackageId); + Assert.AreEqual(testPackage.Version, ReinstallPackageInSingleProjectAction.PackageVersion); + Assert.IsFalse(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions); + Assert.IsTrue(ReinstallPackageInSingleProjectAction.UpdateDependencies); + } + + [Test] + public void ProcessRecord_ReinstallPackageIdIntoProjectWhenPackageIdNotFound_ExceptionThrownAboutMissingPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("UnknownPackageId"); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3"); + + var ex = Assert.Throws(RunCmdlet); + + Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message); + } + + [Test] + public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndSourceRepositoryIsOperationAware_ReinstallOperationStartedAndDisposedForPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("Test"); + SetProjectNameParameter("MyProject"); + fakeProject.FakeLocalRepository.AddFakePackage("Test"); + var operationAwareRepository = new FakeOperationAwarePackageRepository(); + fakeProject.FakeSourceRepository = operationAwareRepository; + cmdlet.Reinstall = true; + + RunCmdlet(); + + operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "Test"); + } + + [Test] + public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIncludePrerelease_PrereleasesAllowedForReinstall() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("Test"); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + cmdlet.IncludePrerelease = true; + fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3"); + + RunCmdlet(); + + Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted); + Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions); + } + + [Test] + public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndLocalPackageIsPrerelease_PrereleasesAllowedForReinstall() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("Test"); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + cmdlet.IncludePrerelease = false; + fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3-alpha1"); + + RunCmdlet(); + + Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted); + Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions); + } + + [Test] + public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIgnoreDependenciesIsTrue_DoNotUpdateDepenenciesOnReinstall() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("Test"); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + cmdlet.IgnoreDependencies = true; + fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3"); + + RunCmdlet(); + + Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted); + Assert.IsFalse(ReinstallPackageInSingleProjectAction.UpdateDependencies); + } + + [Test] + public void ProcessRecord_ReinstallAllPackagesInProjectWithTwoPackages_BothPackagesReinstalled() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + cmdlet.IgnoreDependencies = false; + FakePackage packageA = ProjectHasPackageInstalled("PackageA", "1.1"); + FakePackage packageB = ProjectHasPackageInstalled("PackageB", "1.2"); + + RunCmdlet(); + + Assert.AreEqual(2, ReinstallPackageActionsCreated.Count); + Assert.IsTrue(ReinstallPackageActionsCreated[0].IsExecuted); + Assert.IsTrue(ReinstallPackageActionsCreated[1].IsExecuted); + Assert.AreEqual(cmdlet, ReinstallPackageActionsCreated[0].PackageScriptRunner); + Assert.AreEqual(cmdlet, ReinstallPackageActionsCreated[1].PackageScriptRunner); + Assert.AreEqual("PackageA", ReinstallPackageActionsCreated[0].PackageId); + Assert.AreEqual("PackageB", ReinstallPackageActionsCreated[1].PackageId); + Assert.AreEqual(packageA.Version, ReinstallPackageActionsCreated[0].PackageVersion); + Assert.AreEqual(packageB.Version, ReinstallPackageActionsCreated[1].PackageVersion); + Assert.IsFalse(ReinstallPackageActionsCreated[0].AllowPrereleaseVersions); + Assert.IsFalse(ReinstallPackageActionsCreated[1].AllowPrereleaseVersions); + Assert.IsFalse(ReinstallPackageActionsCreated[0].UpdateDependencies); + Assert.IsFalse(ReinstallPackageActionsCreated[1].UpdateDependencies); + } + + [Test] + public void ProcessRecord_ReinstallAllPackagesInProjectWhenSourceRepositoryIsOperationAware_ReinstallOperationStartedAndDisposedForEachPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetProjectNameParameter("MyProject"); + cmdlet.Reinstall = true; + ProjectHasPackageInstalled("PackageA", "1.1"); + ProjectHasPackageInstalled("PackageB", "1.2"); + var operationAwareRepository = new FakeOperationAwarePackageRepository(); + fakeProject.FakeSourceRepository = operationAwareRepository; + cmdlet.Reinstall = true; + + RunCmdlet(); + + Assert.AreEqual(2, operationAwareRepository.OperationsStarted.Count); + operationAwareRepository.OperationsStarted[0].AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "PackageA"); + operationAwareRepository.OperationsStarted[1].AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "PackageB"); + } + + [Test] + public void ProcessRecord_ReinstallPackageInAllProjectsWhenThreeProjectsButOnlyTwoHavePackage_PackageIsReinstalledInProjects() + { + CreateCmdletWithActivePackageSourceAndProject(); + AddPackageSourceToConsoleHost(); + SetSourceParameter("Test"); + SetIdParameter("B"); + cmdlet.Reinstall = true; + cmdlet.IgnoreDependencies = false; + FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1"); + FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2"); + FakePackageManagementProject project3 = fakeSolution.AddFakeProject("Project3"); + ProjectHasPackageInstalled(project1, "A", "1.1"); + ProjectHasPackageInstalled(project1, "B", "1.2"); + ProjectHasPackageInstalled(project3, "A", "1.1"); + ProjectHasPackageInstalled(project3, "B", "1.3"); + + RunCmdlet(); + + FakeReinstallPackageAction project1ReinstallAction = project1.FakeReinstallPackageActionsCreated.Single(); + FakeReinstallPackageAction project3ReinstallAction = project3.FakeReinstallPackageActionsCreated.Single(); + Assert.AreEqual(0, project2.FakeReinstallPackageActionsCreated.Count); + Assert.IsTrue(project1ReinstallAction.IsExecuted); + Assert.IsTrue(project3ReinstallAction.IsExecuted); + Assert.AreEqual(project1, project1ReinstallAction.Project); + Assert.AreEqual(project3, project3ReinstallAction.Project); + Assert.AreEqual(cmdlet, project1ReinstallAction.PackageScriptRunner); + Assert.AreEqual(cmdlet, project3ReinstallAction.PackageScriptRunner); + Assert.AreEqual("B", project1ReinstallAction.PackageId); + Assert.AreEqual("B", project3ReinstallAction.PackageId); + Assert.AreEqual("1.2", project1ReinstallAction.PackageVersion.ToString()); + Assert.AreEqual("1.3", project3ReinstallAction.PackageVersion.ToString()); + Assert.IsFalse(project1ReinstallAction.AllowPrereleaseVersions); + Assert.IsFalse(project3ReinstallAction.AllowPrereleaseVersions); + Assert.IsTrue(project1ReinstallAction.UpdateDependencies); + Assert.IsTrue(project3ReinstallAction.UpdateDependencies); + Assert.AreEqual("Test", fakeConsoleHost.PackageSourcePassedToGetActivePackageSource); + Assert.AreEqual(fakeConsoleHost.FakePackageRepository, fakeSolution.SourceRepositoryPassedToGetProjects); + } + + [Test] + public void ProcessRecord_ReinstallPackageInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + AddPackageSourceToConsoleHost(); + SetSourceParameter("Test"); + SetIdParameter("B"); + cmdlet.Reinstall = true; + cmdlet.IgnoreDependencies = false; + FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1"); + FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2"); + ProjectHasPackageInstalled(project1, "A", "1.1"); + ProjectHasPackageInstalled(project1, "B", "1.2"); + ProjectHasPackageInstalled(project2, "A", "1.1"); + ProjectHasPackageInstalled(project2, "B", "1.3"); + var operationAwareRepository1 = new FakeOperationAwarePackageRepository(); + project1.FakeSourceRepository = operationAwareRepository1; + var operationAwareRepository2 = new FakeOperationAwarePackageRepository(); + project2.FakeSourceRepository = operationAwareRepository2; + + RunCmdlet(); + + operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B"); + operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B"); + } + + [Test] + public void ProcessRecord_ReinstallPackageInAllProjectsButPackageNotFound_ExceptionThrown() + { + CreateCmdletWithActivePackageSourceAndProject(); + AddPackageSourceToConsoleHost(); + SetSourceParameter("Test"); + SetIdParameter("UnknownPackageId"); + cmdlet.Reinstall = true; + FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1"); + FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2"); + FakePackageManagementProject project3 = fakeSolution.AddFakeProject("Project3"); + + var ex = Assert.Throws(RunCmdlet); + + Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message); + } + + [Test] + public void ProcessRecord_ReinstallAllPackagesInAllProjects_PackagesAreReinstalledInAllProjects() + { + CreateCmdletWithActivePackageSourceAndProject(); + AddPackageSourceToConsoleHost(); + SetSourceParameter("Test"); + cmdlet.Reinstall = true; + cmdlet.IgnoreDependencies = false; + FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1"); + FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2"); + ProjectHasPackageInstalled(project1, "A", "1.1"); + ProjectHasPackageInstalled(project1, "B", "1.2"); + ProjectHasPackageInstalled(project2, "A", "1.4"); + + RunCmdlet(); + + FakeReinstallPackageAction project2ReinstallAction = project2.FakeReinstallPackageActionsCreated.Single(); + Assert.AreEqual(2, project1.FakeReinstallPackageActionsCreated.Count); + Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[0].IsExecuted); + Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[1].IsExecuted); + Assert.IsTrue(project2ReinstallAction.IsExecuted); + Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[0].Project); + Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[1].Project); + Assert.AreEqual(project2, project2ReinstallAction.Project); + Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[0].PackageScriptRunner); + Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[1].PackageScriptRunner); + Assert.AreEqual(cmdlet, project2ReinstallAction.PackageScriptRunner); + Assert.AreEqual("A", project1.FakeReinstallPackageActionsCreated[0].PackageId); + Assert.AreEqual("B", project1.FakeReinstallPackageActionsCreated[1].PackageId); + Assert.AreEqual("A", project2ReinstallAction.PackageId); + Assert.AreEqual("1.1", project1.FakeReinstallPackageActionsCreated[0].PackageVersion.ToString()); + Assert.AreEqual("1.2", project1.FakeReinstallPackageActionsCreated[1].PackageVersion.ToString()); + Assert.AreEqual("1.4", project2ReinstallAction.PackageVersion.ToString()); + Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].AllowPrereleaseVersions); + Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].AllowPrereleaseVersions); + Assert.IsFalse(project2ReinstallAction.AllowPrereleaseVersions); + Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].UpdateDependencies); + Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].UpdateDependencies); + Assert.IsFalse(project2ReinstallAction.UpdateDependencies); + Assert.AreEqual("Test", fakeConsoleHost.PackageSourcePassedToGetActivePackageSource); + Assert.AreEqual(fakeConsoleHost.FakePackageRepository, fakeSolution.SourceRepositoryPassedToGetProjects); + } + + [Test] + public void ProcessRecord_ReinstallAllPackagesInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage() + { + CreateCmdletWithActivePackageSourceAndProject(); + AddPackageSourceToConsoleHost(); + SetSourceParameter("Test"); + cmdlet.Reinstall = true; + FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1"); + FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2"); + ProjectHasPackageInstalled(project1, "B", "1.2"); + ProjectHasPackageInstalled(project2, "B", "1.3"); + var operationAwareRepository1 = new FakeOperationAwarePackageRepository(); + project1.FakeSourceRepository = operationAwareRepository1; + var operationAwareRepository2 = new FakeOperationAwarePackageRepository(); + project2.FakeSourceRepository = operationAwareRepository2; + + RunCmdlet(); + + operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B"); + operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B"); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 63a893e46c..4492f3f264 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -87,6 +87,7 @@ + @@ -231,6 +232,7 @@ + @@ -241,6 +243,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs index 4d67256c08..d0303cee9f 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs @@ -213,5 +213,14 @@ namespace ICSharpCode.PackageManagement.Design public Uri GalleryUrl { get; set; } public bool DevelopmentDependency { get; set; } + + public IFileSystem FileSystemPassedToExtractContents; + public string ExtractPathPassedToExtractContents; + + public void ExtractContents(IFileSystem fileSystem, string extractPath) + { + FileSystemPassedToExtractContents = fileSystem; + ExtractPathPassedToExtractContents = extractPath; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs index a8a2f27d96..be7c5b7d5b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs @@ -19,7 +19,6 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Runtime.Versioning; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.EnvDTE; @@ -36,7 +35,6 @@ namespace ICSharpCode.PackageManagement.Design public FakePackageManagementProject(string name) { - FakeInstallPackageAction = new FakeInstallPackageAction(this); FakeUninstallPackageAction = new FakeUninstallPackageAction(this); this.Name = name; @@ -60,7 +58,6 @@ namespace ICSharpCode.PackageManagement.Design }; } - private FakeInstallPackageAction FakeInstallPackageAction; public FakeUninstallPackageAction FakeUninstallPackageAction; public FakeUpdatePackageAction FirstFakeUpdatePackageActionCreated { @@ -74,6 +71,9 @@ namespace ICSharpCode.PackageManagement.Design public List FakeUpdatePackageActionsCreated = new List(); + public List FakeReinstallPackageActionsCreated = + new List(); + public string Name { get; set; } public bool IsPackageInstalled(string packageId) @@ -187,6 +187,13 @@ namespace ICSharpCode.PackageManagement.Design return action; } + public ReinstallPackageAction CreateReinstallPackageAction() + { + var action = new FakeReinstallPackageAction(this); + FakeReinstallPackageActionsCreated.Add(action); + return action; + } + public event EventHandler PackageInstalled; public void FirePackageInstalledEvent(PackageOperationEventArgs e) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs new file mode 100644 index 0000000000..97aefa6bde --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs @@ -0,0 +1,61 @@ +// Copyright (c) 2015 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using ICSharpCode.PackageManagement.Scripting; + +namespace ICSharpCode.PackageManagement.Design +{ + public class FakeReinstallPackageAction : ReinstallPackageAction + { + public bool IsExecuted; + + public FakePackageManagementProject FakeProject; + + public FakeReinstallPackageAction() + : this(new FakePackageManagementProject()) + { + } + + public FakeReinstallPackageAction(IPackageManagementProject project) + : base(project, null) + { + FakeProject = project as FakePackageManagementProject; + } + + protected override void ExecuteCore() + { + IsExecuted = true; + } + + protected override void BeforeExecute() + { + } + + protected override RunPackageScriptsAction CreateRunPackageScriptsAction( + IPackageScriptRunner scriptRunner, + IPackageManagementProject project) + { + return new RunPackageScriptsAction( + project, + scriptRunner, + new PackageScriptFactory(), + new NullGlobalMSBuildProjectCollection()); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs index 904f16ab1c..ecf8edbbd6 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs @@ -67,30 +67,30 @@ namespace ICSharpCode.PackageManagement.Design PackageSources.Add(setting); } - public Dictionary> SavedSectionValues = - new Dictionary>(); + public Dictionary SavedSectionValues = + new Dictionary(); public void SetValue(string section, string key, string value) { SavedSectionValues.Remove(section); - SavedSectionValues.Add(section, new KeyValuePair(key, value)); + SavedSectionValues.Add(section, new SettingValue(key, value, false)); } - public KeyValuePair GetValuePassedToSetValueForActivePackageSourceSection() + public SettingValue GetValuePassedToSetValueForActivePackageSourceSection() { return SavedSectionValues[RegisteredPackageSourceSettings.ActivePackageSourceSectionName]; } - public void SetValues(string section, IList> values) + public void SetValues(string section, IList values) { SavedSectionValueLists.Remove(section); SavedSectionValueLists.Add(section, values); } - public Dictionary>> SavedSectionValueLists - = new Dictionary>>(); + public Dictionary> SavedSectionValueLists + = new Dictionary>(); - public IList> GetValuesPassedToSetValuesForPackageSourcesSection() + public IList GetValuesPassedToSetValuesForPackageSourcesSection() { return SavedSectionValueLists[RegisteredPackageSourceSettings.PackageSourcesSectionName]; } @@ -168,7 +168,7 @@ namespace ICSharpCode.PackageManagement.Design DisabledPackageSources.Add(setting); } - public IList> GetValuesPassedToSetValuesForDisabledPackageSourcesSection() + public IList GetValuesPassedToSetValuesForDisabledPackageSourcesSection() { return SavedSectionValueLists[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName]; } @@ -186,7 +186,7 @@ namespace ICSharpCode.PackageManagement.Design Sections.Add("packageRestore", items); } - public KeyValuePair GetValuePassedToSetValueForPackageRestoreSection() + public SettingValue GetValuePassedToSetValueForPackageRestoreSection() { return SavedSectionValues["packageRestore"]; } @@ -203,5 +203,15 @@ namespace ICSharpCode.PackageManagement.Design items.Add (new SettingValue("repositoryPath", fullPath, false)); Sections.Add(ConfigSectionName, items); } + + public Dictionary> SectionsUpdated = + new Dictionary>(); + + public void UpdateSections(string section, IList values) + { + SectionsUpdated.Remove(section); + SectionsUpdated.Add(section, values); + SetValues(section, values); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs index 42b7a1c7a7..33aed84945 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs @@ -31,5 +31,10 @@ namespace ICSharpCode.PackageManagement { return package.Repository.StartUpdateOperation(package.Id); } + + public static IDisposable StartReintallOperation(this IPackageFromRepository package) + { + return package.Repository.StartReinstallOperation(package.Id); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs index e248733459..2e8dd40f97 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Runtime.Versioning; + using ICSharpCode.PackageManagement.EnvDTE; using NuGet; @@ -63,6 +63,7 @@ namespace ICSharpCode.PackageManagement UninstallPackageAction CreateUninstallPackageAction(); UpdatePackageAction CreateUpdatePackageAction(); UpdatePackagesAction CreateUpdatePackagesAction(); + ReinstallPackageAction CreateReinstallPackageAction(); void RunPackageOperations(IEnumerable expectedOperations); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs index 58dc1ccb24..7dd2c68753 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs @@ -32,5 +32,10 @@ namespace ICSharpCode.PackageManagement { return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId, mainPackageVersion); } + + public static IDisposable StartReinstallOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null) + { + return repository.StartOperation(RepositoryOperationNames.Reinstall, mainPackageId, mainPackageVersion); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs index 5a07c43186..e78b65af4a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs @@ -31,9 +31,13 @@ namespace ICSharpCode.PackageManagement IPackageManagementEvents packageManagementEvents) : base(project, packageManagementEvents) { + DependencyVersion = DependencyVersion.Lowest; + OpenReadMeText = true; } public bool IgnoreDependencies { get; set; } + public DependencyVersion DependencyVersion { get; set; } + public bool OpenReadMeText { get; set; } protected override IEnumerable GetPackageOperations() { @@ -48,5 +52,13 @@ namespace ICSharpCode.PackageManagement OnParentPackageInstalled(); } } + + protected override IOpenPackageReadMeMonitor CreateOpenPackageReadMeMonitor(string packageId) + { + if (OpenReadMeText) { + return base.CreateOpenPackageReadMeMonitor(packageId); + } + return NullOpenPackageReadMeMonitor.Null; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs b/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs new file mode 100644 index 0000000000..606b44a3c1 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs @@ -0,0 +1,43 @@ +// +// NullOpenPackageReadMeMonitor.cs +// +// Author: +// Matt Ward +// +// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; + +namespace ICSharpCode.PackageManagement +{ + public class NullOpenPackageReadMeMonitor : IOpenPackageReadMeMonitor + { + public static readonly IOpenPackageReadMeMonitor Null = new NullOpenPackageReadMeMonitor(); + + public void Dispose() + { + } + + public void OpenReadMeFile() + { + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs index 7eb872b449..5f27b13ada 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs @@ -211,5 +211,10 @@ namespace ICSharpCode.PackageManagement public bool DevelopmentDependency { get { return package.DevelopmentDependency; } } + + public void ExtractContents(IFileSystem fileSystem, string extractPath) + { + package.ExtractContents(fileSystem, extractPath); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs index 4e0d9a97ca..ff5fdfaf7a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Runtime.Versioning; + using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.SharpDevelop.Project; using NuGet; @@ -211,7 +211,8 @@ namespace ICSharpCode.PackageManagement List packages = packageManager.LocalRepository.FindPackagesById(packageId).ToList(); if (packages.Count > 1) { throw CreateAmbiguousPackageException(packageId); - } + } + return packages.FirstOrDefault(); } @@ -220,5 +221,10 @@ namespace ICSharpCode.PackageManagement string message = String.Format("Multiple versions of '{0}' found. Please specify the version.", packageId); return new InvalidOperationException(message); } + + public ReinstallPackageAction CreateReinstallPackageAction() + { + return new ReinstallPackageAction(this, packageManagementEvents); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs index b3b34bd777..46e589f889 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs @@ -32,11 +32,11 @@ namespace ICSharpCode.PackageManagement return new InstallWalker( localRepository, sourceRepository, - null, + installAction.ProjectTargetFramework, logger, installAction.IgnoreDependencies, installAction.AllowPrereleaseVersions, - DependencyVersion.Lowest); + installAction.DependencyVersion); } public IPackageOperationResolver CreateUpdatePackageOperationResolver(IPackageRepository localRepository, IPackageRepository sourceRepository, ILogger logger, IUpdatePackageSettings settings) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs index a537364473..1dad24b1f7 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Runtime.Versioning; using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.SharpDevelop.Project; using NuGet; @@ -43,6 +44,10 @@ namespace ICSharpCode.PackageManagement public IPackageScriptRunner PackageScriptRunner { get; set; } public bool AllowPrereleaseVersions { get; set; } + public FrameworkName ProjectTargetFramework { + get { return Project.TargetFramework; } + } + public virtual bool HasPackageScriptsToRun() { return false; diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs new file mode 100644 index 0000000000..151a0b62ad --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs @@ -0,0 +1,70 @@ +// +// ReinstallPackageAction.cs +// +// Author: +// Matt Ward +// +// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using ICSharpCode.PackageManagement; +using NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class ReinstallPackageAction : ProcessPackageAction + { + public ReinstallPackageAction( + IPackageManagementProject project, + IPackageManagementEvents packageManagementEvents) + : base(project, packageManagementEvents) + { + } + + public bool UpdateDependencies { get; set; } + + protected override void ExecuteCore() + { + UninstallPackage(); + InstallPackage(); + } + + void UninstallPackage() + { + UninstallPackageAction action = Project.CreateUninstallPackageAction(); + action.Package = Package; + action.ForceRemove = true; + action.RemoveDependencies = UpdateDependencies; + action.Execute(); + } + + void InstallPackage() + { + InstallPackageAction action = Project.CreateInstallPackageAction(); + action.Package = Package; + action.OpenReadMeText = false; + action.IgnoreDependencies = !UpdateDependencies; + action.AllowPrereleaseVersions = !Package.IsReleaseVersion(); + action.Execute(); + } + } +} + diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt b/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt index bb49324838..2580196a44 100644 --- a/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt +++ b/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt @@ -1,4 +1,4 @@ - Copyright 2010-2012 Outercurve Foundation + Copyright 2010-2014 Outercurve Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt b/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt index 6370d613a4..5315d5210b 100644 --- a/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt +++ b/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt @@ -1,6 +1,6 @@ NuGet Project ASP.NET Open Source Gallery at Outercurve Foundation -Copyright 2010 Outercurve Foundation +Copyright 2010-2014 Outercurve Foundation This product includes software developed at The Outercurve Foundation (http://www.outercurve.org/). @@ -29,4 +29,10 @@ Ninject 2.1 ----- Website: http://ninject.org/ Copyright: Copyright (c) 2010 Nate Kohari -License: Apache 2.0 \ No newline at end of file +License: Apache 2.0 + +QueryInterceptor 0.2 +----- +Website: https://github.com/davidfowl/QueryInterceptor +Copyright: Copyright (c) 2011 David Fowler +License: The MIT License diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll index 95e3e435d5..d6fb3c1bf3 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll differ diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll index b7366016db..7cdc512dc5 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll differ diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll index 6d403717fa..da3a305ee1 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll differ diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe index 9ca66594f9..324daa842c 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe differ diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 9e1f528ffa..651acc6173 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -119,6 +119,7 @@ + @@ -196,6 +197,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs index e8e7176b63..518170eaf5 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs @@ -17,10 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; using ICSharpCode.PackageManagement.Design; using NuGet; -using NUnit.Framework; -using Rhino.Mocks; namespace PackageManagement.Tests.Helpers { @@ -29,25 +28,24 @@ namespace PackageManagement.Tests.Helpers public string OperationStarted; public string MainPackageIdForOperationStarted; - IDisposable Operation = MockRepository.GenerateStub(); + PackageRepositoryOperationInfo operationInfo; + + public List OperationsStarted = new List(); public IDisposable StartOperation(string operationName, string mainPackageId, string mainPackageVersion) { + operationInfo = new PackageRepositoryOperationInfo(operationName, mainPackageId, mainPackageVersion); + OperationsStarted.Add(operationInfo); + OperationStarted = operationName; MainPackageIdForOperationStarted = mainPackageId; - return Operation; + + return operationInfo.Operation; } public void AssertOperationWasStartedAndDisposed(string expectedOperationName, string expectedMainPackageId) { - Assert.AreEqual(expectedOperationName, OperationStarted); - Assert.AreEqual(expectedMainPackageId, MainPackageIdForOperationStarted); - AssertOperationIsDisposed(); - } - - void AssertOperationIsDisposed() - { - Operation.AssertWasCalled(o => o.Dispose()); + operationInfo.AssertOperationWasStartedAndDisposed(expectedOperationName, expectedMainPackageId); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs new file mode 100644 index 0000000000..1ab743f458 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2015 AlphaSierraPapa for the SharpDevelop Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +using System; +using NUnit.Framework; +using Rhino.Mocks; + +namespace PackageManagement.Tests.Helpers +{ + public class PackageRepositoryOperationInfo + { + public PackageRepositoryOperationInfo(string operationName, string packageId, string packageVersion) + { + Operation = MockRepository.GenerateStub(); + Name = operationName; + PackageId = packageId; + PackageVersion = packageVersion; + } + + public IDisposable Operation { get; set; } + public string Name { get; set; } + public string PackageId { get; set; } + public string PackageVersion{ get; set; } + + public void AssertOperationWasStartedAndDisposed(string expectedOperationName, string expectedMainPackageId) + { + Assert.AreEqual(expectedOperationName, Name); + Assert.AreEqual(expectedMainPackageId, PackageId); + AssertOperationIsDisposed(); + } + + void AssertOperationIsDisposed() + { + Operation.AssertWasCalled(o => o.Dispose()); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs index ed9c06e252..49e79d11fb 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs @@ -31,6 +31,7 @@ namespace PackageManagement.Tests.Helpers CreateOpenPackageReadMeMonitorAction = packageId => { IOpenPackageReadMeMonitor monitor = base.CreateOpenPackageReadMeMonitor(packageId); OpenPackageReadMeMonitor = monitor as OpenPackageReadMeMonitor; + NullOpenPackageReadMeMonitorIsCreated = monitor is NullOpenPackageReadMeMonitor; return monitor; }; } @@ -42,5 +43,7 @@ namespace PackageManagement.Tests.Helpers { return CreateOpenPackageReadMeMonitorAction(packageId); } + + public bool NullOpenPackageReadMeMonitorIsCreated; } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs index aa00862117..966740560f 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs @@ -484,5 +484,30 @@ namespace PackageManagement.Tests Assert.IsFalse(fileService.IsOpenFileCalled); Assert.IsTrue(monitor.IsDisposed); } + + [Test] + public void DependencyVersion_DefaultValue_IsLowest() + { + CreateAction(); + Assert.AreEqual(DependencyVersion.Lowest, action.DependencyVersion); + } + + [Test] + public void OpenReadMeText_DefaultValue_IsTrue() + { + CreateAction(); + Assert.IsTrue(action.OpenReadMeText); + } + + [Test] + public void Execute_OpenReadMeTextSetToFalse_NullOpenPackageReadmeMonitorCreated() + { + CreateAction(); + action.OpenReadMeText = false; + installPackageHelper.TestPackage.Id = "Test"; + installPackageHelper.InstallTestPackage(); + + Assert.IsTrue(action.NullOpenPackageReadMeMonitorIsCreated); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs index 4d397e611d..e31fab7df1 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs @@ -458,5 +458,18 @@ namespace PackageManagement.Tests Assert.IsTrue(dependency); } + + [Test] + public void ExtractPath_WrappedPackage_WrappedPackageExtractContentsCalled() + { + CreatePackage(); + var expectedFileSystem = new FakeFileSystem(); + string expectedPath = @"d:\projects\test\packages"; + + package.ExtractContents(expectedFileSystem, expectedPath); + + Assert.AreEqual(expectedFileSystem, fakePackage.FileSystemPassedToExtractContents); + Assert.AreEqual(expectedPath, fakePackage.ExtractPathPassedToExtractContents); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs index 1b9ca7b30a..5cfd03ed76 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs @@ -18,9 +18,6 @@ using System; using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Xml; using ICSharpCode.Core; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; @@ -171,16 +168,16 @@ namespace PackageManagement.Tests registeredPackageSources.Clear(); registeredPackageSources.Add(packageSource); - var expectedSavedPackageSourceSettings = new List>(); - expectedSavedPackageSourceSettings.Add(new KeyValuePair("Test", "http://codeplex.com")); + var expectedSavedPackageSourceSettings = new List(); + expectedSavedPackageSourceSettings.Add(new SettingValue("Test", "http://codeplex.com", false)); - IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); + IList actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); } [Test] - public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionDeletedFromSettings() + public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionUpdated() { CreateSettings(); CreateOptions(fakeSettings); @@ -190,9 +187,11 @@ namespace PackageManagement.Tests registeredPackageSources.Clear(); registeredPackageSources.Add(packageSource); - bool sectionDeleted = fakeSettings.IsPackageSourcesSectionDeleted; + IList settings = fakeSettings.SectionsUpdated[RegisteredPackageSourceSettings.PackageSourcesSectionName]; - Assert.IsTrue(sectionDeleted); + Assert.AreEqual(1, settings.Count); + Assert.AreEqual("Test", settings[0].Key); + Assert.AreEqual("http://codeplex.com", settings[0].Value); } [Test] @@ -222,10 +221,10 @@ namespace PackageManagement.Tests options.ActivePackageSource = packageSource; - var expectedKeyValuePair = new KeyValuePair("Test", "http://sharpdevelop.com"); - KeyValuePair actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection(); + var expectedKeyValuePair = new SettingValue("Test", "http://sharpdevelop.com", false); + SettingValue actualSetting = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection(); - Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair); + Assert.AreEqual(expectedKeyValuePair, actualSetting); } [Test] @@ -387,9 +386,9 @@ namespace PackageManagement.Tests registeredPackageSources.Clear(); registeredPackageSources.Add(packageSource); - bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted; + IList settings = fakeSettings.SectionsUpdated[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName]; - Assert.IsTrue(sectionDeleted); + Assert.AreEqual(0, settings.Count); } [Test] @@ -403,10 +402,10 @@ namespace PackageManagement.Tests registeredPackageSources.Clear(); registeredPackageSources.Add(packageSource); - var expectedSavedPackageSourceSettings = new List>(); - expectedSavedPackageSourceSettings.Add(new KeyValuePair(packageSource.Name, "true")); + var expectedSavedPackageSourceSettings = new List(); + expectedSavedPackageSourceSettings.Add(new SettingValue(packageSource.Name, "true", false)); - IList> actualSavedPackageSourceSettings = + IList actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection(); Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); } @@ -424,7 +423,7 @@ namespace PackageManagement.Tests bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection; - IList> actualSavedPackageSourceSettings = + IList actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection(); Assert.AreEqual(0, actualSavedPackageSourceSettings.Count); } @@ -458,10 +457,10 @@ namespace PackageManagement.Tests options.IsPackageRestoreEnabled = true; - KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); + SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); - Assert.AreEqual("enabled", keyPair.Key); - Assert.AreEqual("True", keyPair.Value); + Assert.AreEqual("enabled", setting.Key); + Assert.AreEqual("True", setting.Value); } [Test] @@ -486,8 +485,8 @@ namespace PackageManagement.Tests options.IsPackageRestoreEnabled = false; - KeyValuePair keyValuePair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); - Assert.AreEqual("False", keyValuePair.Value); + SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); + Assert.AreEqual("False", setting.Value); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs index 12b6e35c5d..7a7462a21d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs @@ -21,6 +21,7 @@ using System.Collections.Generic; using ICSharpCode.Core; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; +using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -366,8 +367,8 @@ namespace PackageManagement.Tests viewModel.SaveOptions(); - KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); - Assert.AreEqual("True", keyPair.Value); + SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); + Assert.AreEqual("True", setting.Value); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs index d1de9b67d1..3addb3a428 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs @@ -19,8 +19,8 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Runtime.Versioning; + using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.EnvDTE; @@ -823,9 +823,9 @@ namespace PackageManagement.Tests CreateProject(); fakeProjectManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0"); - IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1")); + IPackage package = project.FindPackage("Test", new SemanticVersion("2.1")); - Assert.IsNull(packageFound); + Assert.IsNull(package); } [Test] @@ -845,9 +845,9 @@ namespace PackageManagement.Tests CreateProject(); fakePackageManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0"); - IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1")); + IPackage package = project.FindPackage("Test", new SemanticVersion("2.1")); - Assert.IsNull(packageFound); + Assert.IsNull(package); } [Test] @@ -873,5 +873,25 @@ namespace PackageManagement.Tests Assert.AreEqual("Multiple versions of 'Test' found. Please specify the version.", ex.Message); } + + [Test] + public void FindPackage_PackageNotFoundWhenPackageIdSpecified_ExceptionThrown() + { + CreateProject(); + + IPackage package = project.FindPackage("Test", null); + + Assert.IsNull(package); + } + + [Test] + public void FindPackage_PackageNotFoundWhenPackageIdAndVersionSpecified_ExceptionThrown() + { + CreateProject(); + + IPackage package = project.FindPackage("Test", new SemanticVersion("1.2")); + + Assert.IsNull(package); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs index e8afd0a253..ffef5bc7b7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Runtime.Versioning; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Scripting; @@ -170,5 +171,17 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedException, exception); } + + [Test] + public void ProjectTargetFramework_ProjectTargetFrameworkIsNet40_ReturnsNet40() + { + CreateAction(); + var expectedTargetFramework = new FrameworkName(".NETFramework, Version=v4.0"); + fakeProject.TargetFramework = expectedTargetFramework; + + FrameworkName targetFramework = action.ProjectTargetFramework; + + Assert.AreEqual(expectedTargetFramework, targetFramework); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs new file mode 100644 index 0000000000..26b322a845 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs @@ -0,0 +1,148 @@ +// +// ReinstallPackageActionTests.cs +// +// Author: +// Matt Ward +// +// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; +using NuGet; +using NUnit.Framework; + +namespace ICSharpCode.PackageManagement.Tests +{ + [TestFixture] + public class ReinstallPackageActionTests + { + ReinstallPackageAction action; + PackageManagementEvents packageManagementEvents; + FakePackageManagementProject project; + + void CreateAction(string packageId = "MyPackage", string packageVersion = "1.2.3.4") + { + project = new FakePackageManagementProject(); + project.AddFakeInstallOperation(); + + packageManagementEvents = new PackageManagementEvents(); + + action = new ReinstallPackageAction(project, packageManagementEvents); + action.PackageId = packageId; + action.PackageVersion = new SemanticVersion(packageVersion); + } + + FakePackage AddPackageToSourceRepository(string packageId, string packageVersion) + { + return project.FakeSourceRepository.AddFakePackageWithVersion(packageId, packageVersion); + } + + [Test] + public void Execute_PackageExistsInSourceRepository_PackageIsUninstalled() + { + CreateAction("MyPackage", "1.2.3.4"); + FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + + action.Execute(); + + Assert.IsTrue(project.FakeUninstallPackageAction.IsExecuted); + Assert.AreEqual(package, project.FakeUninstallPackageAction.Package); + } + + [Test] + public void Execute_PackageExistsInSourceRepository_PackageIsInstalled() + { + CreateAction("MyPackage", "1.2.3.4"); + FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + + action.Execute(); + + Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled); + Assert.AreEqual(package, project.LastInstallPackageCreated.Package); + } + + [Test] + public void Execute_PackageExistsInSourceRepository_PackageIsForcefullyRemovedSoItDoesNotFailIfOtherPackagesDependOnIt() + { + CreateAction("MyPackage", "1.2.3.4"); + AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + + action.Execute(); + + Assert.IsTrue(project.FakeUninstallPackageAction.ForceRemove); + } + + [Test] + public void Execute_UpdateDependenciesIsFalse_PackageInstalledWithoutUpdatingDependencies() + { + CreateAction("MyPackage", "1.2.3.4"); + AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + action.UpdateDependencies = false; + + action.Execute(); + + Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled); + Assert.IsTrue(project.LastInstallPackageCreated.IgnoreDependencies); + Assert.IsFalse(project.FakeUninstallPackageAction.RemoveDependencies); + } + + [Test] + public void Execute_UpdateDependenciesIsTrue_PackageInstalledWithoutIgnoringDependencies() + { + CreateAction("MyPackage", "1.2.3.4"); + AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + action.UpdateDependencies = true; + + action.Execute(); + + Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled); + Assert.IsFalse(project.LastInstallPackageCreated.IgnoreDependencies); + Assert.IsTrue(project.FakeUninstallPackageAction.RemoveDependencies); + Assert.IsFalse(project.LastInstallPackageCreated.AllowPrereleaseVersions); + } + + [Test] + public void Execute_PackageIsPrerelease_PackageInstalledAllowingPrereleases() + { + CreateAction("MyPackage", "1.2.3-alpha1"); + AddPackageToSourceRepository("MyPackage", "1.2.3-alpha1"); + action.UpdateDependencies = true; + + action.Execute(); + + Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled); + Assert.IsTrue(project.LastInstallPackageCreated.AllowPrereleaseVersions); + } + + [Test] + public void Execute_PackageExistsInSourceRepository_PackageIsInstalledWithoutOpeningReadmeTxt () + { + CreateAction("MyPackage", "1.2.3.4"); + FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4"); + + action.Execute(); + + Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled); + Assert.IsFalse(project.LastInstallPackageCreated.OpenReadMeText); + } + } +} + diff --git a/src/Main/Base/Project/Util/DotnetDetection.cs b/src/Main/Base/Project/Util/DotnetDetection.cs index 090b89ebc4..a6ae7a59e6 100644 --- a/src/Main/Base/Project/Util/DotnetDetection.cs +++ b/src/Main/Base/Project/Util/DotnetDetection.cs @@ -66,6 +66,12 @@ namespace ICSharpCode.SharpDevelop return GetDotnet4Release() >= 379893; } + public static bool IsDotnet46Installed() + { + // 393273 is .NET 4.6 on my Win7 machine with VS 2015 RC installed + return GetDotnet4Release() >= 393273; + } + /// /// Gets the .NET 4.x release number. /// The numbers are documented on http://msdn.microsoft.com/en-us/library/hh925568.aspx diff --git a/src/Main/GlobalAssemblyInfo.cs.template b/src/Main/GlobalAssemblyInfo.cs.template index fc548ab079..c5d5706935 100644 --- a/src/Main/GlobalAssemblyInfo.cs.template +++ b/src/Main/GlobalAssemblyInfo.cs.template @@ -46,7 +46,7 @@ internal static class RevisionClass public const string Minor = "1"; public const string Build = "0"; public const string Revision = "$INSERTREVISION$"; - public const string VersionName = "Beta 2"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1") + public const string VersionName = "RC"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1") public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$"; }