2424#include " LinkerMock.h"
2525#include " Session.h"
2626#include " Array.h"
27+ #include " er/Flags.h"
2728
2829#include < cerrno>
2930
@@ -86,6 +87,19 @@ namespace {
8687 return el::Executor::Result { -1 , error_code };
8788 }
8889
90+ MATCHER_P (CStyleArrayEqual, expecteds, " " )
91+ {
92+ size_t idx = 0 ;
93+ for (const auto &expected: expecteds) {
94+ if (std::string_view (arg[idx]) != std::string_view (expected)) {
95+ *result_listener << " expected: " << expected << " , but got: " << arg[idx];
96+ return false ;
97+ }
98+ ++idx;
99+ }
100+ return true ;
101+ }
102+
89103 TEST (Executor, fails_without_session)
90104 {
91105 el::Session session = el::session::init ();
@@ -116,19 +130,18 @@ namespace {
116130 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
117131
118132 LinkerMock linker;
119- // TODO: verify the arguments
120- // const char* argv[] = {
121- // session.reporter,
122- // pear::flag::DESTINATION,
123- // session.destination,
124- // pear::flag::PATH,
125- // LS_PATH,
126- // pear::flag::COMMAND,
127- // LS_ARGV[0],
128- // LS_ARGV[1],
129- // nullptr
130- // };
131- EXPECT_CALL (linker, execve (SILENT_SESSION.reporter , NotNull (), LS_ENVP))
133+ EXPECT_CALL (linker,execve (SILENT_SESSION.reporter ,
134+ CStyleArrayEqual (std::vector<const char *> {
135+ SILENT_SESSION.reporter ,
136+ er::flags::DESTINATION,
137+ SILENT_SESSION.destination ,
138+ er::flags::EXECUTE,
139+ LS_PATH,
140+ er::flags::COMMAND,
141+ LS_ARGV[0 ],
142+ LS_ARGV[1 ]
143+ }),
144+ LS_ENVP))
132145 .Times (1 )
133146 .WillOnce (Return (0 ));
134147 EXPECT_CALL (linker, error_code ())
@@ -146,20 +159,19 @@ namespace {
146159 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
147160
148161 LinkerMock linker;
149- // TODO: verify the arguments
150- // const char* argv[] = {
151- // session.reporter,
152- // pear::flag::VERBOSE,
153- // pear::flag::DESTINATION,
154- // session.destination,
155- // pear::flag::LIBRARY,
156- // LS_PATH,
157- // pear::flag::COMMAND,
158- // LS_ARGV[0],
159- // LS_ARGV[1],
160- // nullptr
161- // };
162- EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter , NotNull (), LS_ENVP))
162+ EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter ,
163+ CStyleArrayEqual (std::vector<const char *> {
164+ VERBOSE_SESSION.reporter ,
165+ er::flags::DESTINATION,
166+ VERBOSE_SESSION.destination ,
167+ er::flags::VERBOSE,
168+ er::flags::EXECUTE,
169+ LS_PATH,
170+ er::flags::COMMAND,
171+ LS_ARGV[0 ],
172+ LS_ARGV[1 ]
173+ }),
174+ LS_ENVP))
163175 .Times (1 )
164176 .WillOnce (Return (0 ));
165177 EXPECT_CALL (linker, error_code ())
@@ -192,20 +204,19 @@ namespace {
192204 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
193205
194206 LinkerMock linker;
195- // TODO: verify the arguments
196- // const char* argv[] = {
197- // SILENT_SESSION.reporter,
198- // pear::flag::VERBOSE,
199- // pear::flag::DESTINATION,
200- // SILENT_SESSION.destination,
201- // pear::flag::FILE,
202- // LS_FILE,
203- // pear::flag::COMMAND,
204- // LS_ARGV[0],
205- // LS_ARGV[1],
206- // nullptr
207- // };
208- EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter , NotNull (), LS_ENVP))
207+ EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter ,
208+ CStyleArrayEqual (std::vector<const char *> {
209+ VERBOSE_SESSION.reporter ,
210+ er::flags::DESTINATION,
211+ VERBOSE_SESSION.destination ,
212+ er::flags::VERBOSE,
213+ er::flags::EXECUTE,
214+ LS_PATH,
215+ er::flags::COMMAND,
216+ LS_ARGV[0 ],
217+ LS_ARGV[1 ]
218+ }),
219+ LS_ENVP))
209220 .Times (1 )
210221 .WillOnce (Return (0 ));
211222 EXPECT_CALL (linker, error_code ())
@@ -223,22 +234,19 @@ namespace {
223234 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
224235
225236 LinkerMock linker;
226- // TODO: verify the arguments
227- // const char* argv[] = {
228- // SILENT_SESSION.reporter,
229- // pear::flag::VERBOSE,
230- // pear::flag::DESTINATION,
231- // SILENT_SESSION.destination,
232- // pear::flag::FILE,
233- // LS_FILE,
234- // pear::flag::SEARCH_PATH
235- // SEARCH_PATH
236- // pear::flag::COMMAND,
237- // LS_ARGV[0],
238- // LS_ARGV[1],
239- // nullptr
240- // };
241- EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter , NotNull (), LS_ENVP))
237+ EXPECT_CALL (linker, execve (VERBOSE_SESSION.reporter ,
238+ CStyleArrayEqual (std::vector<const char *> {
239+ VERBOSE_SESSION.reporter ,
240+ er::flags::DESTINATION,
241+ VERBOSE_SESSION.destination ,
242+ er::flags::VERBOSE,
243+ er::flags::EXECUTE,
244+ LS_PATH,
245+ er::flags::COMMAND,
246+ LS_ARGV[0 ],
247+ LS_ARGV[1 ]
248+ }),
249+ LS_ENVP))
242250 .Times (1 )
243251 .WillOnce (Return (0 ));
244252 EXPECT_CALL (linker, error_code ())
@@ -258,20 +266,19 @@ namespace {
258266 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
259267
260268 LinkerMock linker;
261- // TODO: verify the arguments
262- // const char* argv[] = {
263- // VERBOSE_SESSION.reporter,
264- // pear::flag::VERBOSE,
265- // pear::flag::DESTINATION,
266- // VERBOSE_SESSION.destination,
267- // pear::flag::PATH,
268- // LS_PATH,
269- // pear::flag::COMMAND,
270- // LS_ARGV[0],
271- // LS_ARGV[1],
272- // nullptr
273- // };
274- EXPECT_CALL (linker, posix_spawn (&pid, VERBOSE_SESSION.reporter , nullptr , nullptr , NotNull (), LS_ENVP))
269+ EXPECT_CALL (linker, posix_spawn (&pid, VERBOSE_SESSION.reporter , nullptr , nullptr ,
270+ CStyleArrayEqual (std::vector<const char *> {
271+ VERBOSE_SESSION.reporter ,
272+ er::flags::DESTINATION,
273+ VERBOSE_SESSION.destination ,
274+ er::flags::VERBOSE,
275+ er::flags::EXECUTE,
276+ LS_PATH,
277+ er::flags::COMMAND,
278+ LS_ARGV[0 ],
279+ LS_ARGV[1 ]
280+ }),
281+ LS_ENVP))
275282 .Times (1 )
276283 .WillOnce (Return (0 ));
277284 EXPECT_CALL (linker, error_code ())
@@ -308,20 +315,19 @@ namespace {
308315 .WillOnce (Return (el::Resolver::Result{LS_PATH, 0 }));
309316
310317 LinkerMock linker;
311- // TODO: verify the arguments
312- // const char* argv[] = {
313- // VERBOSE_SESSION.reporter,
314- // pear::flag::VERBOSE,
315- // pear::flag::DESTINATION,
316- // VERBOSE_SESSION.destination,
317- // pear::flag::FILE,
318- // LS_FILE,
319- // pear::flag::COMMAND,
320- // LS_ARGV[0],
321- // LS_ARGV[1],
322- // nullptr
323- // };
324- EXPECT_CALL (linker, posix_spawn (&pid, VERBOSE_SESSION.reporter , nullptr , nullptr , NotNull (), LS_ENVP))
318+ EXPECT_CALL (linker, posix_spawn (&pid, VERBOSE_SESSION.reporter , nullptr , nullptr ,
319+ CStyleArrayEqual (std::vector<const char *> {
320+ VERBOSE_SESSION.reporter ,
321+ er::flags::DESTINATION,
322+ VERBOSE_SESSION.destination ,
323+ er::flags::VERBOSE,
324+ er::flags::EXECUTE,
325+ LS_PATH,
326+ er::flags::COMMAND,
327+ LS_ARGV[0 ],
328+ LS_ARGV[1 ]
329+ }),
330+ LS_ENVP))
325331 .Times (1 )
326332 .WillOnce (Return (0 ));
327333 EXPECT_CALL (linker, error_code ())
0 commit comments