зеркало из https://github.com/github/VisualStudio.git
Fix tests
This commit is contained in:
Родитель
1032212d0e
Коммит
c2a9dc0c8b
72
GitHubVS.sln
72
GitHubVS.sln
|
@ -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>
|
||||
|
|
Загрузка…
Ссылка в новой задаче