def test_renderer_init(renderer): assert renderer.formatters == [ output_renderer.Column_Formatter('JobID%>'), output_renderer.Column_Formatter('State'), output_renderer.Column_Formatter('Elapsed%>'), output_renderer.Column_Formatter('CPUEff'), output_renderer.Column_Formatter('MemEff'), ] assert sorted(renderer.query_columns) == sorted( ('JobID JobIDRaw State Elapsed TotalCPU AllocCPUS REQMEM ' 'NNodes MaxRSS').split()) renderer = output_renderer.Output_Renderer(min_required, '') assert renderer.formatters == [] assert sorted(renderer.query_columns) == sorted( ('JobID JobIDRaw State').split()) renderer = output_renderer.Output_Renderer(min_required, 'TotalCPU%<5') assert renderer.formatters == [ output_renderer.Column_Formatter('TotalCPU%<5'), ] assert sorted(renderer.query_columns) == sorted( ('JobID JobIDRaw State TotalCPU').split())
def test_format_jobs_single_str(some_jobs): renderer = output_renderer.Output_Renderer(min_required, 'JobID%>') assert len(renderer.formatters) == 1 assert renderer.formatters[0].alignment == '>' result = renderer.format_jobs(some_jobs).split('\n') # alignment is switched assert renderer.formatters[0].alignment == '<' assert result == [ '24371655', '24371656', '24371657', '24371658', '24371659', '24371660', ]
def test_renderer_format_jobs(some_jobs): renderer = output_renderer.Output_Renderer( min_required, 'JobID,State,Elapsed,CPUEff,REQMEM,TimeEff') result = renderer.format_jobs(some_jobs) ansi_escape = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]') # check removed codes codes = ansi_escape.findall(result) for i, c in enumerate(codes): print(f'{i} -> {repr(c)}') for code in codes[1::2]: # normal assert code == '\x1b[0m' for code in codes[0:10:20]: assert code == '\x1b[1m' # bold for i in (22, 24, 26, 28): assert codes[i] == '\x1b[31m' # red for i in (12, 14, 30): assert codes[i] == '\x1b[32m' # green for i in (20, ): assert codes[i] == '\x1b[33m' # yellow for i in (16, ): assert codes[i] == '\x1b[34m' # blue for i in (18, ): assert codes[i] == '\x1b[36m' # cyan # remove color codes result = ansi_escape.sub('', result) lines = result.split('\n') assert lines[0].split() == \ 'JobID State Elapsed CPUEff REQMEM TimeEff'.split() assert lines[1].split() == \ '24371655 COMPLETED 00:10:00 90.0% 1Gn 50.0%'.split() assert lines[2].split() == \ '24371656 PENDING --- --- --- ---'.split() assert lines[3].split() == \ '24371657 RUNNING 00:10:00 --- 1Gn 50.0%'.split() assert lines[4].split() == \ '24371658 CANCELLED 00:00:00 --- 1Gn 0.0%'.split() assert lines[5].split() == \ '24371659 TIMEOUT 00:21:00 19.0% 2Gn 105.0%'.split() assert lines[6].split() == \ '24371660 OTHER 00:12:05 74.5% 2Gn 60.4%'.split()
def test_format_jobs_empty(some_jobs): renderer = output_renderer.Output_Renderer(min_required, '') result = renderer.format_jobs(some_jobs) assert result == ''
def renderer(): # default renderer with valid names for only default string return output_renderer.Output_Renderer(min_required)
def test_renderer_format_jobs(): renderer = output_renderer.Output_Renderer( min_required, 'JobID,State,Elapsed,CPUEff,REQMEM,TimeEff') jobs = [] job = job_module.Job('24371655', '24371655', None) job.update({ 'JobID': '24371655', 'State': 'COMPLETED', 'AllocCPUS': '1', 'REQMEM': '1Gn', 'TotalCPU': '00:09:00', 'Elapsed': '00:10:00', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) job = job_module.Job('24371656', '24371656', None) job.update({ 'JobID': '24371656', 'State': 'PENDING', 'AllocCPUS': '1', 'REQMEM': '1Gn', 'TotalCPU': '00:09:00', 'Elapsed': '00:10:00', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) job = job_module.Job('24371657', '24371657', None) job.update({ 'JobID': '24371657', 'State': 'RUNNING', 'AllocCPUS': '1', 'REQMEM': '1Gn', 'TotalCPU': '00:09:00', 'Elapsed': '00:10:00', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) job = job_module.Job('24371658', '24371658', None) job.update({ 'JobID': '24371658', 'State': 'CANCELLED', 'AllocCPUS': '1', 'REQMEM': '1Gn', 'TotalCPU': '00:09:00', 'Elapsed': '00:00:00', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) job = job_module.Job('24371659', '24371659', None) job.update({ 'JobID': '24371659', 'State': 'TIMEOUT', 'AllocCPUS': '1', 'REQMEM': '2Gn', 'TotalCPU': '00:04:00', 'Elapsed': '00:21:00', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) job = job_module.Job('24371660', '24371660', None) job.update({ 'JobID': '24371660', 'State': 'OTHER', 'AllocCPUS': '1', 'REQMEM': '2Gn', 'TotalCPU': '00:09:00', 'Elapsed': '00:12:05', 'Timelimit': '00:20:00', 'MaxRSS': '', 'NNodes': '1', 'NTasks': '' }) jobs.append(job) result = renderer.format_jobs(jobs) ansi_escape = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]') # check removed codes codes = ansi_escape.findall(result) for i, c in enumerate(codes): print(f'{i} -> {repr(c)}') for code in codes[1::2]: # normal assert code == '\x1b[0m' for code in codes[0:10:20]: assert code == '\x1b[1m' # bold for i in (22, 24, 26, 28): assert codes[i] == '\x1b[31m' # red for i in (12, 14, 30): assert codes[i] == '\x1b[32m' # green for i in (20, ): assert codes[i] == '\x1b[33m' # yellow for i in (16, ): assert codes[i] == '\x1b[34m' # blue for i in (18, ): assert codes[i] == '\x1b[36m' # cyan # remove color codes result = ansi_escape.sub('', result) lines = result.split('\n') assert lines[0].split() == \ 'JobID State Elapsed CPUEff REQMEM TimeEff'.split() assert lines[1].split() == \ '24371655 COMPLETED 00:10:00 90.0% 1Gn 50.0%'.split() assert lines[2].split() == \ '24371656 PENDING --- --- --- ---'.split() assert lines[3].split() == \ '24371657 RUNNING 00:10:00 --- 1Gn 50.0%'.split() assert lines[4].split() == \ '24371658 CANCELLED 00:00:00 --- 1Gn 0.0%'.split() assert lines[5].split() == \ '24371659 TIMEOUT 00:21:00 19.0% 2Gn 105.0%'.split() assert lines[6].split() == \ '24371660 OTHER 00:12:05 74.5% 2Gn 60.4%'.split()