[docs]defautotest(path,cmd,ignore=None,env=None):""" The autowriting test pattern, minimal for testing cli2 scripts. Example:: from cli2.test import autotest autotest( 'tests/djcli_save_user.txt', 'djcli save auth.User username="test"', ) """environ=copy.copy(os.environ)ifenv:forkey,valueinenv.items():environ[key]=valueenviron['FORCE_TERMSIZE']='1'environ['PATH']=':'.join([environ.get('HOME','')+'/.local/bin',environ.get('PATH','')])proc=subprocess.run(cmd,shell=True,capture_output=True,env=environ,)fixture='\n'.join(['command: '+cmd,'retcode: '+str(proc.returncode),'stdout:',proc.stdout.decode('utf8'),])ifproc.stderr:fixture+='\n'.join(['stderr:',proc.stderr.decode('utf8'),])forrinignoreor[]:fixture=re.compile(r).sub('redacted',fixture)exists=os.path.exists(path)ifREWRITEandexists:os.unlink(path)exists=Falseifnotexists:# dirname = '/'.join(path.split('/')[:-1])dirname=os.path.dirname(path)ifnotos.path.exists(dirname):os.makedirs(dirname)withopen(path,'w+')asf:f.write(fixture)ifREWRITE:returnraisetype('FixtureCreated',(Exception,),{})(f'''{path} was not in workdir and was created with:{fixture} '''.strip(),)diff_cmd='diff -U 1 - "%s" | sed "1,2 d"'%pathproc=subprocess.Popen(diff_cmd,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.STDOUT,shell=True)diff_out,diff_err=proc.communicate(input=fixture.encode('utf8'))ifdiff_out:raisetype(f'''DiffFound- {cmd}+ {path} '''.strip(),(Exception,),{})('\n'+diff_out.decode('utf8'))