This commit is contained in:
Andreia Gaita 2015-03-26 22:01:33 +01:00
Родитель 1032212d0e
Коммит c2a9dc0c8b
18 изменённых файлов: 362 добавлений и 95 удалений

Просмотреть файл

@ -94,6 +94,8 @@ Global
Publish|x86 = Publish|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
Test|Any CPU = Test|Any CPU
Test|x86 = Test|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@ -108,6 +110,9 @@ Global
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|Any CPU.Build.0 = Release|Any CPU
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|x86.ActiveCfg = Release|Any CPU
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Release|x86.Build.0 = Release|Any CPU
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Test|x86.ActiveCfg = Debug|Any CPU
{11569514-5AE5-4B5B-92A2-F10B0967DE5F}.Test|x86.Build.0 = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -120,6 +125,10 @@ Global
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|Any CPU.Build.0 = Release|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|x86.ActiveCfg = Release|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Release|x86.Build.0 = Release|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Test|Any CPU.Build.0 = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Test|x86.ActiveCfg = Debug|Any CPU
{596595A6-2A3C-469E-9386-9E3767D863A5}.Test|x86.Build.0 = Debug|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|Any CPU.Build.0 = Debug|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -132,6 +141,9 @@ Global
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|Any CPU.Build.0 = Release|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.ActiveCfg = Release|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.Build.0 = Release|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Test|x86.ActiveCfg = Debug|Any CPU
{346384DD-2445-4A28-AF22-B45F3957BD89}.Test|x86.Build.0 = Debug|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -144,6 +156,9 @@ Global
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|Any CPU.Build.0 = Release|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|x86.ActiveCfg = Release|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Release|x86.Build.0 = Release|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Test|x86.ActiveCfg = Debug|Any CPU
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Test|x86.Build.0 = Debug|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -156,6 +171,9 @@ Global
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|Any CPU.Build.0 = Release|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|x86.ActiveCfg = Release|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Release|x86.Build.0 = Release|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Test|x86.ActiveCfg = Debug|Any CPU
{6AFE2E2D-6DB0-4430-A2EA-F5F5388D2F78}.Test|x86.Build.0 = Debug|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -168,6 +186,9 @@ Global
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|Any CPU.Build.0 = Release|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|x86.ActiveCfg = Release|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Release|x86.Build.0 = Release|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Test|x86.ActiveCfg = Debug|Any CPU
{6559E128-8B40-49A5-85A8-05565ED0C7E3}.Test|x86.Build.0 = Debug|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -180,6 +201,9 @@ Global
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|Any CPU.Build.0 = Release|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|x86.ActiveCfg = Release|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Release|x86.Build.0 = Release|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Test|x86.ActiveCfg = Debug|Any CPU
{1A1DA411-8D1F-4578-80A6-04576BEA2DC5}.Test|x86.Build.0 = Debug|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -192,6 +216,9 @@ Global
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|Any CPU.Build.0 = Release|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|x86.ActiveCfg = Release|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Release|x86.Build.0 = Release|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Test|x86.ActiveCfg = Debug|Any CPU
{4A84E568-CA86-4510-8CD0-90D3EF9B65F9}.Test|x86.Build.0 = Debug|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -204,6 +231,9 @@ Global
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|Any CPU.Build.0 = Release|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|x86.ActiveCfg = Release|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Release|x86.Build.0 = Release|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Test|x86.ActiveCfg = Debug|Any CPU
{9AEA02DB-02B5-409C-B0CA-115D05331A6B}.Test|x86.Build.0 = Debug|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -216,6 +246,9 @@ Global
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|Any CPU.Build.0 = Release|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|x86.ActiveCfg = Release|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Release|x86.Build.0 = Release|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Test|x86.ActiveCfg = Debug|Any CPU
{B389ADAF-62CC-486E-85B4-2D8B078DF763}.Test|x86.Build.0 = Debug|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -228,6 +261,9 @@ Global
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|Any CPU.Build.0 = Release|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|x86.ActiveCfg = Release|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Release|x86.Build.0 = Release|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Test|x86.ActiveCfg = Debug|Any CPU
{E4ED0537-D1D9-44B6-9212-3096D7C3F7A1}.Test|x86.Build.0 = Debug|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -240,6 +276,9 @@ Global
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|Any CPU.Build.0 = Release|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|x86.ActiveCfg = Release|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Release|x86.Build.0 = Release|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Test|x86.ActiveCfg = Debug|Any CPU
{B1F5C227-456F-437D-BD5F-4C11B7A8D1A0}.Test|x86.Build.0 = Debug|Any CPU
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Debug|Any CPU.ActiveCfg = Debug|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Debug|x86.ActiveCfg = Debug|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Debug|x86.Build.0 = Debug|x86
@ -250,6 +289,9 @@ Global
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Release|Any CPU.ActiveCfg = Release|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Release|x86.ActiveCfg = Release|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Release|x86.Build.0 = Release|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Test|Any CPU.ActiveCfg = Debug|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Test|x86.ActiveCfg = Debug|x86
{1ED83084-2A57-4F89-915C-8A2167C0D6BC}.Test|x86.Build.0 = Debug|x86
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|Any CPU.Build.0 = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -262,6 +304,9 @@ Global
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|Any CPU.Build.0 = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|x86.ActiveCfg = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Release|x86.Build.0 = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Test|Any CPU.ActiveCfg = Release|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Test|x86.ActiveCfg = Debug|Any CPU
{08DD4305-7787-4823-A53F-4D0F725A07F3}.Test|x86.Build.0 = Debug|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|Any CPU.Build.0 = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -274,6 +319,9 @@ Global
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|Any CPU.Build.0 = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|x86.ActiveCfg = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Release|x86.Build.0 = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Test|Any CPU.ActiveCfg = Release|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Test|x86.ActiveCfg = Debug|Any CPU
{674B69B8-0780-4D54-AE2B-C15821FA51CB}.Test|x86.Build.0 = Debug|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|Any CPU.Build.0 = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -286,6 +334,9 @@ Global
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|Any CPU.Build.0 = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|x86.ActiveCfg = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Release|x86.Build.0 = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Test|Any CPU.ActiveCfg = Release|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Test|x86.ActiveCfg = Debug|Any CPU
{1CE2D235-8072-4649-BA5A-CFB1AF8776E0}.Test|x86.Build.0 = Debug|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|Any CPU.Build.0 = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -298,6 +349,9 @@ Global
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|Any CPU.Build.0 = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|x86.ActiveCfg = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Release|x86.Build.0 = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Test|Any CPU.ActiveCfg = Release|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Test|x86.ActiveCfg = Debug|Any CPU
{600998C4-54DD-4755-BFA8-6F44544D8E2E}.Test|x86.Build.0 = Debug|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Debug|Any CPU.Build.0 = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -310,6 +364,9 @@ Global
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Release|Any CPU.Build.0 = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Release|x86.ActiveCfg = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Release|x86.Build.0 = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Test|Any CPU.ActiveCfg = Release|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Test|x86.ActiveCfg = Debug|Any CPU
{3D4AE5F9-A535-4D5C-8F30-1A35D7BA0A3D}.Test|x86.Build.0 = Debug|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -322,6 +379,9 @@ Global
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|Any CPU.Build.0 = Release|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|x86.ActiveCfg = Release|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Release|x86.Build.0 = Release|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Test|x86.ActiveCfg = Debug|Any CPU
{B4E665E5-6CAF-4414-A6E2-8DE1C3BCF203}.Test|x86.Build.0 = Debug|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -334,6 +394,9 @@ Global
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|Any CPU.Build.0 = Release|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|x86.ActiveCfg = Release|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Release|x86.Build.0 = Release|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Test|x86.ActiveCfg = Debug|Any CPU
{241C47DF-CA8E-4296-AA03-2C48BB646ABD}.Test|x86.Build.0 = Debug|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -346,6 +409,9 @@ Global
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|Any CPU.Build.0 = Release|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|x86.ActiveCfg = Release|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Release|x86.Build.0 = Release|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Test|x86.ActiveCfg = Debug|Any CPU
{EB73ADDD-2FE9-44C0-A1AB-20709B979B64}.Test|x86.Build.0 = Debug|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -358,6 +424,9 @@ Global
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|Any CPU.Build.0 = Release|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|x86.ActiveCfg = Release|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Release|x86.Build.0 = Release|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Test|x86.ActiveCfg = Debug|Any CPU
{252CE1C2-027A-4445-A3C2-E4D6C80A935A}.Test|x86.Build.0 = Debug|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -370,6 +439,9 @@ Global
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|Any CPU.Build.0 = Release|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|x86.ActiveCfg = Release|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Release|x86.Build.0 = Release|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Test|Any CPU.ActiveCfg = Debug|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Test|x86.ActiveCfg = Debug|Any CPU
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF}.Test|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -4,6 +4,7 @@ using GitHub.SampleData;
using GitHub.Services;
using GitHub.UI;
using GitHub.VisualStudio;
using GitHub.Models;
namespace DesignTimeStyleHelper
{
@ -22,7 +23,7 @@ namespace DesignTimeStyleHelper
{
var ui = App.ServiceProvider.GetExportedValue<IUIProvider>();
var factory = ui.GetService<ExportFactoryProvider>();
var factory = ui.GetService<IExportFactoryProvider>();
var d = factory.UIControllerFactory.CreateExport();
var creation = d.Value.SelectFlow(UIControllerFlow.Clone);
var x = new WindowController(creation);
@ -35,7 +36,7 @@ namespace DesignTimeStyleHelper
{
var ui = App.ServiceProvider.GetExportedValue<IUIProvider>();
var factory = ui.GetService<ExportFactoryProvider>();
var factory = ui.GetService<IExportFactoryProvider>();
var d = factory.UIControllerFactory.CreateExport();
var creation = d.Value.SelectFlow(UIControllerFlow.Create);
var x = new WindowController(creation);

Просмотреть файл

@ -23,7 +23,7 @@ namespace GitHub.Controllers
{
enum Trigger { Auth = 1, Create = 2, Clone = 3, Next, Previous, Finish }
readonly ExportFactoryProvider factory;
readonly IExportFactoryProvider factory;
readonly IUIProvider uiProvider;
readonly CompositeDisposable disposables = new CompositeDisposable();
@ -32,7 +32,7 @@ namespace GitHub.Controllers
UIControllerFlow currentFlow;
[ImportingConstructor]
public UIController(IUIProvider uiProvider, IRepositoryHosts hosts, ExportFactoryProvider factory)
public UIController(IUIProvider uiProvider, IRepositoryHosts hosts, IExportFactoryProvider factory)
{
this.factory = factory;
this.uiProvider = uiProvider;
@ -66,8 +66,7 @@ namespace GitHub.Controllers
machine.Configure(UIViewType.Login)
.OnEntry(() =>
{
var view = SetupView(UIViewType.Login);
LoadView(view);
RunView(UIViewType.Login);
})
.Permit(Trigger.Next, UIViewType.TwoFactor)
.PermitIf(Trigger.Finish, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
@ -77,8 +76,7 @@ namespace GitHub.Controllers
.SubstateOf(UIViewType.Login)
.OnEntry(() =>
{
var view = SetupView(UIViewType.TwoFactor);
LoadView(view);
RunView(UIViewType.TwoFactor);
})
.PermitIf(Trigger.Next, UIViewType.End, () => currentFlow == UIControllerFlow.Authentication)
.PermitIf(Trigger.Next, UIViewType.Create, () => currentFlow == UIControllerFlow.Create)
@ -87,16 +85,14 @@ namespace GitHub.Controllers
machine.Configure(UIViewType.Create)
.OnEntry(() =>
{
var view = SetupView(UIViewType.Create);
LoadView(view);
RunView(UIViewType.Create);
})
.Permit(Trigger.Next, UIViewType.End);
machine.Configure(UIViewType.Clone)
.OnEntry(() =>
{
var view = SetupView(UIViewType.Clone);
LoadView(view);
RunView(UIViewType.Clone);
})
.Permit(Trigger.Next, UIViewType.End);
@ -110,31 +106,15 @@ namespace GitHub.Controllers
.Permit(Trigger.Next, UIViewType.None);
}
private void LoadView(IView view)
void RunView(UIViewType viewType)
{
var view = CreateViewAndViewModel(viewType);
transition.OnNext(view as UserControl);
SetupView(viewType, view);
}
IView SetupView(UIViewType viewType)
void SetupView(UIViewType viewType, IView view)
{
IViewModel viewModel;
if (viewType == UIViewType.TwoFactor)
{
viewModel = uiProvider.GetService<ITwoFactorViewModel>();
}
else
{
var dvm = factory.GetViewModel(viewType);
disposables.Add(dvm);
viewModel = dvm.Value;
}
var dv = factory.GetView(viewType);
disposables.Add(dv);
var view = dv.Value;
view.ViewModel = viewModel;
if (viewType == UIViewType.Login)
{
// we're setting up the login dialog, we need to setup the 2fa as
@ -155,6 +135,27 @@ namespace GitHub.Controllers
view.Done
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(_ => Fire(Trigger.Next));
}
IView CreateViewAndViewModel(UIViewType viewType)
{
IViewModel viewModel;
if (viewType == UIViewType.TwoFactor)
{
viewModel = uiProvider.GetService<ITwoFactorViewModel>();
}
else
{
var dvm = factory.GetViewModel(viewType);
disposables.Add(dvm);
viewModel = dvm.Value;
}
var dv = factory.GetView(viewType);
disposables.Add(dv);
var view = dv.Value;
view.ViewModel = viewModel;
return view;
}

Просмотреть файл

@ -25,6 +25,7 @@ namespace GitHub.Services
readonly IOperatingSystem operatingSystem;
readonly string defaultClonePath;
[ImportingConstructor]
public RepositoryCloneService(Lazy<IServiceProvider> serviceProvider, IOperatingSystem operatingSystem)
{
@ -47,9 +48,7 @@ namespace GitHub.Services
operatingSystem.Directory.CreateDirectory(path);
// this will throw if it can't find it
var gitExt = ServiceProvider.GetService<IGitRepositoriesExt>();
gitExt.Clone(cloneUrl, path, CloneOptions.RecurseSubmodule);
VSServices.Clone(ServiceProvider, cloneUrl, path, true);
return Unit.Default;
});
}
@ -67,6 +66,6 @@ namespace GitHub.Services
public string DefaultClonePath { get { return defaultClonePath; } }
IServiceProvider ServiceProvider { get { return serviceProvider.Value; } }
IVSServices VSServices { get { return ServiceProvider.GetService<IVSServices>(); } }
}
}

Просмотреть файл

@ -16,8 +16,8 @@ namespace GitHub
// We already know the value is not null because of NullGuard.Fody.
if (!string.IsNullOrWhiteSpace(value)) return;
string message = string.Format(CultureInfo.InvariantCulture, "The value for '{0}' must not be empty", name);
#if DEBUG
string message = string.Format(CultureInfo.InvariantCulture, "The value for '{0}' must not be empty", name);
if (!ModeDetector.InUnitTestRunner())
{
Debug.Fail(message);

Просмотреть файл

@ -43,6 +43,10 @@
<DelaySign>false</DelaySign>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.TeamFoundation.Git.Controls, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\Microsoft.TeamFoundation.Git.Controls.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.Shell.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.Shell.Immutable.10.0" />
<Reference Include="Microsoft.VisualStudio.Shell.Interop" />
@ -64,6 +68,7 @@
<None Include="..\..\script\Key.snk">
<Link>Key.snk</Link>
</None>
<Compile Include="Models\IExportFactoryProvider.cs" />
<Compile Include="Services\VSServices.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\..\script\SolutionInfo.cs">

Просмотреть файл

@ -0,0 +1,17 @@
using GitHub.Exports;
using GitHub.UI;
using GitHub.ViewModels;
using System.Collections.Generic;
using System.ComponentModel.Composition;
namespace GitHub.Models
{
public interface IExportFactoryProvider
{
ExportFactory<IUIController> UIControllerFactory { get; set; }
IEnumerable<ExportFactory<IViewModel, IViewModelMetadata>> ViewModelFactory { get; set; }
IEnumerable<ExportFactory<IView, IViewModelMetadata>> ViewFactory { get; set; }
ExportLifetimeContext<IViewModel> GetViewModel(UIViewType viewType);
ExportLifetimeContext<IView> GetView(UIViewType viewType);
}
}

Просмотреть файл

@ -6,12 +6,13 @@ using System.Linq;
using GitHub.Exports;
using GitHub.UI;
using GitHub.ViewModels;
using GitHub.Models;
namespace GitHub.Services
{
[Export]
[Export(typeof(IExportFactoryProvider))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class ExportFactoryProvider
public class ExportFactoryProvider : IExportFactoryProvider
{
[ImportingConstructor]
public ExportFactoryProvider(ICompositionService cc)

Просмотреть файл

@ -1,6 +1,8 @@
using GitHub.Extensions;
using Microsoft.TeamFoundation.Git.Controls.Extensibility;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
@ -10,7 +12,15 @@ using System.Threading.Tasks;
namespace GitHub.Services
{
public static class VSServices
public interface IVSServices
{
string GetLocalClonePathFromGitProvider(IServiceProvider provider);
void Clone(IServiceProvider provider, string cloneUrl, string clonePath, bool recurseSubmodules);
}
[Export(typeof(IVSServices))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class VSServices : IVSServices
{
public static class GitCoreServices
{
@ -115,7 +125,7 @@ namespace GitHub.Services
// service 'ISccSettingsService' registered in an internal service
// 'ISccServiceHost' in an assembly with no public types that's
// always loaded with VS if the git service provider is loaded
public static string GetLocalClonePathFromGitProvider(IServiceProvider provider)
public string GetLocalClonePathFromGitProvider(IServiceProvider provider)
{
try
{
@ -128,5 +138,13 @@ namespace GitHub.Services
}
return string.Empty;
}
public void Clone(IServiceProvider provider, string cloneUrl, string clonePath, bool recurseSubmodules)
{
var gitExt = provider.GetService<IGitRepositoriesExt>();
gitExt.Clone(cloneUrl, clonePath, recurseSubmodules ? CloneOptions.RecurseSubmodule : CloneOptions.None);
// TODO: hook up into something that alerts us when clone is done
}
}
}

Просмотреть файл

@ -6,6 +6,7 @@ using GitHub.UI;
using GitHub.VisualStudio.Base;
using GitHub.VisualStudio.UI;
using Microsoft.VisualStudio.Shell;
using GitHub.Models;
namespace GitHub.VisualStudio
{
@ -57,7 +58,7 @@ namespace GitHub.VisualStudio
void ShowDialog(UIControllerFlow flow)
{
var ui = GetExportedValue<IUIProvider>();
var disposable = ui.GetService<ExportFactoryProvider>().UIControllerFactory.CreateExport();
var disposable = ui.GetService<IExportFactoryProvider>().UIControllerFactory.CreateExport();
var watcher = disposable.Value.SelectFlow(flow);
var window = new WindowController(watcher);
watcher.Subscribe(_ => { }, _ => {

Просмотреть файл

@ -7,6 +7,7 @@ using GitHub.VisualStudio.UI;
using GitHub.VisualStudio.UI.Views;
using Microsoft.TeamFoundation.Controls;
using Microsoft.VisualStudio.Shell;
using GitHub.Models;
namespace GitHub.VisualStudio.TeamExplorerConnect
{
@ -61,7 +62,7 @@ namespace GitHub.VisualStudio.TeamExplorerConnect
{
var uiProvider = ServiceProvider.GetExportedValue<IUIProvider>();
uiProvider.GitServiceProvider = gitServiceProvider;
var factory = uiProvider.GetService<ExportFactoryProvider>();
var factory = uiProvider.GetService<IExportFactoryProvider>();
var uiControllerExport = factory.UIControllerFactory.CreateExport();
var uiController = uiControllerExport.Value;
var creation = uiController.SelectFlow(controllerFlow);

Просмотреть файл

@ -3,6 +3,7 @@ using GitHub.Models;
using Microsoft.VisualStudio.Text;
using NSubstitute;
using Octokit;
using System;
internal static class Args
{
@ -13,4 +14,5 @@ internal static class Args
public static NewRepository NewRepository { get { return Arg.Any<NewRepository>(); } }
public static IAccount Account { get { return Arg.Any<IAccount>(); } }
public static IApiClient ApiClient { get { return Arg.Any<IApiClient>(); } }
public static IServiceProvider ServiceProvider { get { return Arg.Any<IServiceProvider>(); } }
}

Просмотреть файл

@ -10,6 +10,10 @@ using GitHub.UI;
using GitHub.VisualStudio.UI.Views.Controls;
using NSubstitute;
using Xunit;
using UnitTests;
using GitHub.ViewModels;
using ReactiveUI;
using System.Collections.Generic;
public class UIControllerTests
{
@ -20,7 +24,7 @@ public class UIControllerTests
{
var uiProvider = Substitute.For<IUIProvider>();
var hosts = Substitute.For<IRepositoryHosts>();
var factory = new ExportFactoryProvider(Substitute.For<ICompositionService>());
var factory = Substitute.For<IExportFactoryProvider>();
var uiController = new UIController(uiProvider, hosts, factory);
uiController.Dispose();
@ -30,38 +34,54 @@ public class UIControllerTests
public class TheStartMethod
{
IExportFactoryProvider SetupFactory(IServiceProvider provider)
{
var factory = provider.GetExportFactoryProvider();
factory.GetViewModel(GitHub.Exports.UIViewType.Login).Returns(new ExportLifetimeContext<IViewModel>(Substitute.For<IViewModel>(), () => { }));
factory.GetView(GitHub.Exports.UIViewType.Login).Returns(new ExportLifetimeContext<IView>(Substitute.For<IView, IViewFor<ILoginControlViewModel>, UserControl>(), () => { }));
factory.GetViewModel(GitHub.Exports.UIViewType.TwoFactor).Returns(new ExportLifetimeContext<IViewModel>(Substitute.For<IViewModel>(), () => { }));
factory.GetView(GitHub.Exports.UIViewType.TwoFactor).Returns(new ExportLifetimeContext<IView>(Substitute.For<IView, IViewFor<ITwoFactorDialogViewModel>, UserControl>(), () => { }));
factory.GetViewModel(GitHub.Exports.UIViewType.Clone).Returns(new ExportLifetimeContext<IViewModel>(Substitute.For<IViewModel>(), () => { }));
factory.GetView(GitHub.Exports.UIViewType.Clone).Returns(new ExportLifetimeContext<IView>(Substitute.For<IView, IViewFor<IRepositoryCloneViewModel>, UserControl>(), () => { }));
return factory;
}
[Fact]
public void ShowingCloneDialogWithoutBeingLoggedInShowsLoginDialog()
{
var uiProvider = Substitute.For<IUIProvider>();
var hosts = Substitute.For<IRepositoryHosts>();
var factory = (ExportFactoryProvider)new CustomServiceProvider().GetService(typeof(ExportFactoryProvider));
UserControl shownControl = null;
using (var uiController = new UIController(uiProvider, hosts, factory))
var provider = Substitutes.ServiceProvider;
var hosts = provider.GetRepositoryHosts();
var factory = SetupFactory(provider);
using (var uiController = new UIController((IUIProvider)provider, hosts, factory))
{
uiController.SelectFlow(UIControllerFlow.Clone).Subscribe(uc => shownControl = uc);
var list = new List<IView>();
uiController.SelectFlow(UIControllerFlow.Clone).Subscribe(uc => list.Add(uc as IView));
uiController.Start();
Assert.IsType<LoginControl>(shownControl);
Assert.True(list.Count > 1);
Assert.IsAssignableFrom<IViewFor<ILoginControlViewModel>>(list[0]);
}
}
[Fact]
public void ShowingCloneDialogWhenLoggedInShowsCloneDialog()
{
var uiProvider = Substitute.For<IUIProvider>();
var hosts = Substitute.For<IRepositoryHosts>();
var provider = Substitutes.ServiceProvider;
var hosts = provider.GetRepositoryHosts();
var factory = SetupFactory(provider);
hosts.IsLoggedInToAnyHost.Returns(true);
var factory = (ExportFactoryProvider)new CustomServiceProvider().GetService(typeof(ExportFactoryProvider));
UserControl shownControl = null;
using (var uiController = new UIController(uiProvider, hosts, factory))
using (var uiController = new UIController((IUIProvider)provider, hosts, factory))
{
uiController.SelectFlow(UIControllerFlow.Clone).Subscribe(uc => shownControl = uc);
var list = new List<IView>();
uiController.SelectFlow(UIControllerFlow.Clone).Subscribe(uc => list.Add(uc as IView));
uiController.Start();
Assert.IsType<RepositoryCloneControl>(shownControl);
Assert.Equal(1, list.Count);
Assert.IsAssignableFrom<IViewFor<IRepositoryCloneViewModel>>(list[0]);
}
}
}

Просмотреть файл

@ -6,6 +6,7 @@ using Microsoft.TeamFoundation.Git.Controls.Extensibility;
using NSubstitute;
using Rothko;
using Xunit;
using UnitTests;
public class RepositoryCloneServiceTests
{
@ -14,18 +15,15 @@ public class RepositoryCloneServiceTests
[Fact]
public async Task ClonesToRepositoryPath()
{
var gitClone = Substitute.For<IGitRepositoriesExt>();
var operatingSystem = Substitute.For<IOperatingSystem>();
var serviceProvider = Substitute.For<IServiceProvider>();
serviceProvider.GetService(typeof(IGitRepositoriesExt)).Returns(gitClone);
var cloneService = new RepositoryCloneService(
new Lazy<IServiceProvider>(() => serviceProvider),
operatingSystem);
var serviceProvider = Substitutes.ServiceProvider;
var operatingSystem = serviceProvider.GetOperatingSystem();
var vsservices = serviceProvider.GetVSServices();
var cloneService = serviceProvider.GetRepositoryCloneService();
await cloneService.CloneRepository("https://github.com/foo/bar", "bar", @"c:\dev");
operatingSystem.Directory.Received().CreateDirectory(@"c:\dev\bar");
gitClone.Received().Clone("https://github.com/foo/bar", @"c:\dev\bar", CloneOptions.RecurseSubmodule);
vsservices.Received().Clone(serviceProvider, "https://github.com/foo/bar", @"c:\dev\bar", true);
}
}
}

Просмотреть файл

@ -7,6 +7,7 @@ using GitHub.Services;
using NSubstitute;
using Octokit;
using Xunit;
using UnitTests;
public class RepositoryCreationServiceTests
{
@ -15,6 +16,7 @@ public class RepositoryCreationServiceTests
[Fact]
public void CreatesRepositoryOnlineViaApiAndThenClonesIt()
{
var provider = Substitutes.ServiceProvider;
var newRepository = new NewRepository("octokit.net");
var repository = new TestRepository("octokit.net", "https://github.com/octokit/octokit.net");
var account = Substitute.For<IAccount>();
@ -23,10 +25,10 @@ public class RepositoryCreationServiceTests
var apiClient = Substitute.For<IApiClient>();
apiClient.CreateRepository(newRepository, "octokit", false)
.Returns(Observable.Return(repository));
var cloneService = Substitute.For<IRepositoryCloneService>();
var cloneService = provider.GetRepositoryCloneService();
cloneService.CloneRepository("https://github.com/octokit/octokit.net", "octokit.net", @"c:\dev")
.Returns(Observable.Return(Unit.Default));
var creator = new RepositoryCreationService(cloneService);
var creator = provider.GetRepositoryCreationService();
creator.CreateRepository(newRepository, account, @"c:\dev", apiClient).Subscribe();

Просмотреть файл

@ -11,15 +11,18 @@ using ReactiveUI;
using Rothko;
using Xunit;
using Xunit.Extensions;
using UnitTests;
public class RepositoryCreationViewModelTests
{
public static IRepositoryCreationViewModel GetMeAViewModel(IOperatingSystem os = null, IRepositoryHosts hosts = null, IRepositoryCreationService creationService = null, IRepositoryCloneService cloneService = null)
static IRepositoryCreationViewModel GetMeAViewModel(IServiceProvider provider = null)
{
os = os == null ? Substitute.For<IOperatingSystem>() : os;
hosts = hosts == null ? Substitute.For<IRepositoryHosts>() : hosts;
creationService = creationService == null ? Substitute.For<IRepositoryCreationService>() : creationService;
cloneService = cloneService == null ? Substitute.For<IRepositoryCloneService>() : cloneService;
if (provider == null)
provider = Substitutes.ServiceProvider;
var os = provider.GetOperatingSystem();
var hosts = provider.GetRepositoryHosts();
var creationService = provider.GetRepositoryCreationService();
var cloneService = provider.GetRepositoryCloneService();
return new RepositoryCreationViewModel(os, hosts, creationService, cloneService);
}
@ -64,10 +67,11 @@ public class RepositoryCreationViewModelTests
[Fact]
public async Task SetsTheBaseRepositoryPathWhenUserChoosesADirectory()
{
var windows = Substitute.For<IOperatingSystem>();
var provider = Substitutes.ServiceProvider;
var windows = provider.GetOperatingSystem();
windows.Dialog.BrowseForDirectory(@"c:\fake\dev", Args.String)
.Returns(new BrowseDirectoryResult(@"c:\fake\foo"));
var vm = GetMeAViewModel(windows);
var vm = GetMeAViewModel(provider);
vm.BaseRepositoryPath = @"c:\fake\dev";
@ -79,10 +83,11 @@ public class RepositoryCreationViewModelTests
[Fact]
public async Task DoesNotChangeTheBaseRepositoryPathWhenUserDoesNotChooseResult()
{
var windows = Substitute.For<IOperatingSystem>();
var provider = Substitutes.ServiceProvider;
var windows = provider.GetOperatingSystem();
windows.Dialog.BrowseForDirectory(@"c:\fake\dev", Args.String)
.Returns(BrowseDirectoryResult.Failed);
var vm = GetMeAViewModel(windows);
var vm = GetMeAViewModel(provider);
vm.BaseRepositoryPath = @"c:\fake\dev";
await vm.BrowseForDirectory.ExecuteAsync();
@ -268,10 +273,11 @@ public class RepositoryCreationViewModelTests
[Fact]
public void IsPopulatedByTheRepositoryHost()
{
var provider = Substitutes.ServiceProvider;
var hosts = provider.GetRepositoryHosts();
var accounts = new ReactiveList<IAccount>() { Substitute.For<IAccount>() };
var hosts = Substitute.For<IRepositoryHosts>();
hosts.GitHubHost.Accounts.Returns(accounts);
var vm = GetMeAViewModel(hosts: hosts);
var vm = GetMeAViewModel(provider);
Assert.Same(accounts, vm.Accounts);
Assert.Equal(vm.Accounts[0], vm.SelectedAccount);
@ -291,11 +297,12 @@ public class RepositoryCreationViewModelTests
"Waf",
"WordPress"
};
var hosts = Substitute.For<IRepositoryHosts>();
var provider = Substitutes.ServiceProvider;
var hosts = provider.GetRepositoryHosts();
hosts.GitHubHost.ApiClient
.GetGitIgnoreTemplates()
.Returns(gitIgnoreTemplates.ToObservable());
var vm = GetMeAViewModel(hosts: hosts);
var vm = GetMeAViewModel(provider);
var result = vm.GitIgnoreTemplates;
@ -328,11 +335,12 @@ public class RepositoryCreationViewModelTests
new LicenseMetadata("artistic-2.0", "Artistic License 2.0", new Uri("https://whatever")),
new LicenseMetadata("mit", "MIT License", new Uri("https://whatever"))
};
var hosts = Substitute.For<IRepositoryHosts>();
var provider = Substitutes.ServiceProvider;
var hosts = provider.GetRepositoryHosts();
hosts.GitHubHost.ApiClient
.GetLicenses()
.Returns(licenses.ToObservable());
var vm = GetMeAViewModel(hosts: hosts);
var vm = GetMeAViewModel(provider);
var result = vm.Licenses;
@ -357,10 +365,12 @@ public class RepositoryCreationViewModelTests
[Fact]
public async Task DisplaysUserErrorWhenCreationFails()
{
var repositoryCreationService = Substitute.For<IRepositoryCreationService>();
repositoryCreationService.CreateRepository(Args.NewRepository, Args.Account, Args.String, Args.ApiClient)
var creationService = Substitutes.RepositoryCreationService;
var provider = Substitutes.GetServiceProvider(creationService: creationService);
creationService.CreateRepository(Args.NewRepository, Args.Account, Args.String, Args.ApiClient)
.Returns(Observable.Throw<Unit>(new InvalidOperationException("Could not create a repository on GitHub")));
var vm = GetMeAViewModel(creationService: repositoryCreationService);
var vm = GetMeAViewModel(provider);
vm.RepositoryName = "my-repo";
@ -375,11 +385,13 @@ public class RepositoryCreationViewModelTests
[Fact]
public void CreatesARepositoryUsingTheCreationService()
{
var creationService = Substitutes.RepositoryCreationService;
var provider = Substitutes.GetServiceProvider(creationService: creationService);
var account = Substitute.For<IAccount>();
var creationService = Substitute.For<IRepositoryCreationService>();
var hosts = Substitute.For<IRepositoryHosts>();
var hosts = provider.GetRepositoryHosts();
hosts.GitHubHost.Accounts.Returns(new ReactiveList<IAccount> { account });
var vm = GetMeAViewModel(hosts: hosts, creationService: creationService);
var vm = GetMeAViewModel(provider);
vm.RepositoryName = "Krieger";
vm.BaseRepositoryPath = @"c:\dev";
vm.SelectedAccount = account;
@ -403,11 +415,12 @@ public class RepositoryCreationViewModelTests
[Fact]
public void SetsAutoInitToTrueWhenLicenseSelected()
{
var creationService = Substitute.For<IRepositoryCreationService>();
var creationService = Substitutes.RepositoryCreationService;
var provider = Substitutes.GetServiceProvider(creationService: creationService);
var account = Substitute.For<IAccount>();
var hosts = Substitute.For<IRepositoryHosts>();
var hosts = provider.GetRepositoryHosts();
hosts.GitHubHost.Accounts.Returns(new ReactiveList<IAccount> { account });
var vm = GetMeAViewModel(hosts: hosts, creationService: creationService);
var vm = GetMeAViewModel(provider);
vm.RepositoryName = "Krieger";
vm.BaseRepositoryPath = @"c:\dev";
vm.SelectedAccount = account;
@ -432,11 +445,12 @@ public class RepositoryCreationViewModelTests
[Fact]
public void SetsAutoInitToTrueWhenGitIgnore()
{
var creationService = Substitute.For<IRepositoryCreationService>();
var creationService = Substitutes.RepositoryCreationService;
var provider = Substitutes.GetServiceProvider(creationService: creationService);
var account = Substitute.For<IAccount>();
var hosts = Substitute.For<IRepositoryHosts>();
var hosts = provider.GetRepositoryHosts();
hosts.GitHubHost.Accounts.Returns(new ReactiveList<IAccount> { account });
var vm = GetMeAViewModel(hosts: hosts, creationService: creationService);
var vm = GetMeAViewModel(provider);
vm.RepositoryName = "Krieger";
vm.BaseRepositoryPath = @"c:\dev";
vm.SelectedAccount = account;

Просмотреть файл

@ -0,0 +1,114 @@
using GitHub.Models;
using GitHub.Services;
using Microsoft.TeamFoundation.Git.Controls.Extensibility;
using NSubstitute;
using Rothko;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UnitTests
{
internal static class Substitutes
{
public static IGitRepositoriesExt IGitRepositoriesExt
{
get
{
var ret = Substitute.For<IGitRepositoriesExt>();
return ret;
}
}
public static IVSServices IVSServices
{
get
{
var ret = Substitute.For<IVSServices>();
ret.GetLocalClonePathFromGitProvider(Args.ServiceProvider).Returns(@"c:\foo\bar");
return ret;
}
}
public static IOperatingSystem OperatingSystem
{
get
{
var ret = Substitute.For<IOperatingSystem>();
return ret;
}
}
public static IExportFactoryProvider ExportFactoryProvider { get { return Substitute.For<IExportFactoryProvider>(); } }
public static IRepositoryCreationService RepositoryCreationService { get { return Substitute.For<IRepositoryCreationService>(); } }
public static IRepositoryCloneService RepositoryCloneService { get { return Substitute.For<IRepositoryCloneService>(); } }
public static IRepositoryHosts RepositoryHosts { get { return Substitute.For<IRepositoryHosts>(); } }
public static IServiceProvider ServiceProvider { get { return GetServiceProvider(); } }
public static IServiceProvider GetServiceProvider(
IRepositoryCloneService cloneService = null,
IRepositoryCreationService creationService = null)
{
var ret = Substitute.For<IServiceProvider, IUIProvider>();
var os = OperatingSystem;
var git = IGitRepositoriesExt;
var vs = IVSServices;
var clone = cloneService;
if (clone == null)
clone = new RepositoryCloneService(new Lazy<IServiceProvider>(() => ret), os);
var create = creationService;
if (create == null)
create = new RepositoryCreationService(clone);
var hosts = RepositoryHosts;
var exports = ExportFactoryProvider;
ret.GetService(typeof(IGitRepositoriesExt)).Returns(git);
ret.GetService(typeof(IVSServices)).Returns(vs);
ret.GetService(typeof(IOperatingSystem)).Returns(os);
ret.GetService(typeof(IRepositoryCloneService)).Returns(clone);
ret.GetService(typeof(IRepositoryCreationService)).Returns(create);
ret.GetService(typeof(IRepositoryHosts)).Returns(hosts);
ret.GetService(typeof(IExportFactoryProvider)).Returns(exports);
return ret;
}
public static IGitRepositoriesExt GetGitExt(this IServiceProvider provider)
{
return provider.GetService(typeof(IGitRepositoriesExt)) as IGitRepositoriesExt;
}
public static IVSServices GetVSServices(this IServiceProvider provider)
{
return provider.GetService(typeof(IVSServices)) as IVSServices;
}
public static IOperatingSystem GetOperatingSystem(this IServiceProvider provider)
{
return provider.GetService(typeof(IOperatingSystem)) as IOperatingSystem;
}
public static IRepositoryCloneService GetRepositoryCloneService(this IServiceProvider provider)
{
return provider.GetService(typeof(IRepositoryCloneService)) as IRepositoryCloneService;
}
public static IRepositoryCreationService GetRepositoryCreationService(this IServiceProvider provider)
{
return provider.GetService(typeof(IRepositoryCreationService)) as IRepositoryCreationService;
}
public static IRepositoryHosts GetRepositoryHosts(this IServiceProvider provider)
{
return provider.GetService(typeof(IRepositoryHosts)) as IRepositoryHosts;
}
public static IExportFactoryProvider GetExportFactoryProvider(this IServiceProvider provider)
{
return provider.GetService(typeof(IExportFactoryProvider)) as IExportFactoryProvider;
}
}
}

Просмотреть файл

@ -109,6 +109,7 @@
<Compile Include="Helpers\CommandTestHelpers.cs" />
<Compile Include="Helpers\LazySubstitute.cs" />
<Compile Include="Helpers\ReactiveTestHelper.cs" />
<Compile Include="Substitutes.cs" />
<Compile Include="TestDoubles\FakeMenuCommandService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>