@@ -5,84 +5,116 @@ class RunDockerc():
55 def __init__ (
66 self ,
77 dockerc_path : str ,
8+ dockerc_args : list [str ],
89 cwd : str ,
910 context : str | None = None ,
10- * args : list [str ] ,
11+ env : dict [str , str ] | None = None ,
1112 ):
1213 self .dockerc_path = dockerc_path
14+ self .dockerc_args = dockerc_args
1315 self .cwd = cwd
14- self .context = context
15- self .args = args
16+ self .context = (
17+ context
18+ if context is not None else
19+ dockerc_args [0 ]
20+ if dockerc_args and dockerc_args [0 ] and not dockerc_args [0 ].startswith ('-' ) else
21+ None
22+ )
23+ self .env = env
1624
1725 self .proc = subprocess .Popen (
1826 [
1927 self .dockerc_path ,
2028 '-n' ,
21- * ([self .context ] if self .context else []),
22- * self .args ,
29+ * self .dockerc_args ,
2330 ],
2431 cwd = self .cwd ,
2532 stdout = subprocess .PIPE ,
33+ stderr = subprocess .PIPE ,
34+ env = self .env ,
2635 )
2736 self .proc_stdout , self .proc_stderr = self .proc .communicate ()
2837
2938 def assert_context (
3039 self ,
31- stdout : bytes | re .Pattern | None = None ,
32- stderr : bytes | re .Pattern | None = None ,
40+ * ,
41+ stdout : bytes | re .Pattern | None = b'' ,
42+ stderr : bytes | re .Pattern | None = b'' ,
3343 returncode : int = 0 ,
3444 ):
35- # if self.proc_stdout != stdout:
36- # # Debugging
37- # import difflib
38- # diff = difflib.unified_diff(
39- # self.proc_stdout.decode('utf-8').splitlines(keepends = True),
40- # (
41- # stdout.decode('utf-8').splitlines(keepends = True)
42- # if isinstance(stdout, bytes) else
43- # stdout.pattern.splitlines(keepends = True)
44- # if isinstance(stdout, re.Pattern) else
45- # stdout
46- # ),
47- # )
48- # print(''.join(diff))
45+ if stdout is not None :
46+ if self .proc_stdout != stdout :
47+ # Debugging
48+ import difflib
49+ diff = difflib .unified_diff (
50+ self .proc_stdout .decode ('utf-8' ).splitlines (keepends = True ),
51+ (
52+ stdout .decode ('utf-8' ).splitlines (keepends = True )
53+ if isinstance (stdout , bytes ) else
54+ stdout .pattern .splitlines (keepends = True )
55+ if isinstance (stdout , re .Pattern ) else
56+ stdout
57+ ),
58+ )
59+ print ('' .join (diff ))
60+
61+ if isinstance (stdout , re .Pattern ):
62+ assert stdout .match (self .proc_stdout .decode ('utf-8' ))
63+ else :
64+ assert self .proc_stdout == stdout
4965
50- if isinstance (stdout , re .Pattern ):
51- assert stdout .match (self .proc_stdout .decode ('utf-8' ))
52- else :
53- assert self .proc_stdout == stdout
66+ if stderr is not None :
67+ if self .proc_stderr != stderr :
68+ # Debugging
69+ import difflib
70+ diff = difflib .unified_diff (
71+ self .proc_stderr .decode ('utf-8' ).splitlines (keepends = True ),
72+ (
73+ stderr .decode ('utf-8' ).splitlines (keepends = True )
74+ if isinstance (stderr , bytes ) else
75+ stderr .pattern .splitlines (keepends = True )
76+ if isinstance (stderr , re .Pattern ) else
77+ stderr
78+ ),
79+ )
80+ print ('' .join (diff ))
5481
55- if isinstance (stderr , re .Pattern ):
56- assert stderr .match (self .proc_stderr .decode ('utf-8' ))
57- else :
58- assert self .proc_stderr == stderr
82+ if isinstance (stderr , re .Pattern ):
83+ assert stderr .match (self .proc_stderr .decode ('utf-8' ))
84+ else :
85+ assert self .proc_stderr == stderr
5986
6087 assert self .proc .returncode == returncode
6188
62- def assert_context_found (
89+ def assert_context_ok (
6390 self ,
6491 stdout : bytes | re .Pattern = b'' ,
92+ * ,
93+ stderr : bytes | re .Pattern | None = None ,
6594 ):
6695 return self .assert_context (
6796 stdout = stdout ,
97+ ** ({'stderr' : stderr } if stderr is not None else {}),
6898 )
6999
70100 def assert_context_error (
71101 self ,
72- stdout : bytes | re .Pattern | None = None ,
73102 stderr : bytes | re .Pattern | None = None ,
103+ * ,
104+ stdout : bytes | re .Pattern | None = None ,
105+ returncode : int = 1 ,
74106 ):
75107 return self .assert_context (
76108 ** ({'stdout' : stdout } if stdout is not None else {}),
77109 ** ({'stderr' : stderr } if stderr is not None else {}),
78- returncode = 1 ,
110+ returncode = returncode ,
79111 )
80112
81113 def assert_context_not_found (
82114 self ,
83115 ):
84116 return self .assert_context (
85- stdout = (
117+ stderr = (
86118 (
87119 b'Error: Unknown context \' '
88120 + self .context .encode ('utf-8' )
0 commit comments