@@ -81,6 +81,7 @@ public void InitializeEnabledManagerWithoutExecutableStaysNotReady()
8181 var manager = CreateManager ( ) ;
8282 manager . ExecutableFound = false ;
8383 manager . ExecutablePath = CreateExecutable ( "missing-manager.exe" ) ;
84+ Settings . SetDictionaryItem < string , bool > ( Settings . K . DisabledManagers , manager . Name , false ) ;
8485
8586 manager . Initialize ( ) ;
8687
@@ -94,6 +95,66 @@ public void InitializeEnabledManagerWithoutExecutableStaysNotReady()
9495 ) ;
9596 }
9697
98+ [ Fact ]
99+ public void FirstInitializeDisablesManagerWhoseExecutableIsMissing ( )
100+ {
101+ var manager = CreateManager ( ) ;
102+ manager . ExecutableFound = false ;
103+ manager . ExecutablePath = CreateExecutable ( "never-installed-manager.exe" ) ;
104+
105+ manager . Initialize ( ) ;
106+
107+ Assert . False ( manager . IsEnabled ( ) ) ;
108+ Assert . False ( manager . IsReady ( ) ) ;
109+ Assert . False ( manager . Status . Found ) ;
110+ Assert . True ( Settings . GetDictionaryItem < string , bool > ( Settings . K . DisabledManagers , manager . Name ) ) ;
111+ Assert . Equal (
112+ CoreTools . Translate ( "{0} is disabled" , manager . DisplayName ) ,
113+ manager . Status . Version
114+ ) ;
115+ }
116+
117+ [ Fact ]
118+ public void FirstInitializeKeepsFoundManagerEnabledAfterItsExecutableDisappears ( )
119+ {
120+ var manager = CreateManager ( ) ;
121+ manager . ExecutablePath = CreateExecutable ( "installed-manager.exe" ) ;
122+
123+ manager . Initialize ( ) ;
124+
125+ Assert . True ( manager . IsReady ( ) ) ;
126+ Assert . True ( Settings . DictionaryContainsKey < string , bool > ( Settings . K . DisabledManagers , manager . Name ) ) ;
127+ Assert . False ( Settings . GetDictionaryItem < string , bool > ( Settings . K . DisabledManagers , manager . Name ) ) ;
128+
129+ manager . ExecutableFound = false ;
130+ manager . Initialize ( ) ;
131+
132+ Assert . True ( manager . IsEnabled ( ) ) ;
133+ Assert . False ( manager . IsReady ( ) ) ;
134+ Assert . False ( manager . Status . Found ) ;
135+ }
136+
137+ [ Fact ]
138+ public void FirstInitializeDisablesOnlyMissingManagersWhenInitializedConcurrently ( )
139+ {
140+ var managers = Enumerable . Range ( 0 , 16 ) . Select ( i =>
141+ {
142+ var manager = CreateManager ( ) ;
143+ manager . ExecutableFound = i % 2 == 0 ;
144+ manager . ExecutablePath = CreateExecutable ( $ "{ manager . Name } .exe") ;
145+ return manager ;
146+ } ) . ToList ( ) ;
147+
148+ Parallel . ForEach ( managers , manager => manager . Initialize ( ) ) ;
149+
150+ foreach ( var manager in managers )
151+ {
152+ Assert . True ( Settings . DictionaryContainsKey < string , bool > ( Settings . K . DisabledManagers , manager . Name ) ) ;
153+ Assert . Equal ( manager . ExecutableFound , manager . IsEnabled ( ) ) ;
154+ Assert . Equal ( manager . ExecutableFound , manager . IsReady ( ) ) ;
155+ }
156+ }
157+
97158 [ Fact ]
98159 public void InitializeEnabledManagerWithExecutableBecomesReady ( )
99160 {
0 commit comments