spec/lib/release_tools/trace_section_spec.rb (56 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' describe ReleaseTools::TraceSection do let(:local_time) { Time.utc(2020, 11, 18, 0, 0, 0) } describe '.collapse' do it 'collapses output in a trace section without an icon' do expect(described_class).to receive(:puts).with( "section_start:#{local_time.to_i}:hello_world[collapsed=true]\r\e[0KHello world" ) expect(described_class).to receive(:puts).with( "section_end:#{local_time.to_i}:hello_world\r\e[0K" ) Timecop.freeze(local_time) do described_class.collapse('Hello world') { '' } end end it 'collapses output in a trace section with an icon' do expect(described_class).to receive(:puts).with( "section_start:#{local_time.to_i}:hello_world[collapsed=true]\r\e[0KFOO Hello world" ) expect(described_class).to receive(:puts).with( "section_end:#{local_time.to_i}:hello_world\r\e[0K" ) Timecop.freeze(local_time) do described_class.collapse('Hello world', icon: 'FOO') { '' } end end it 're-raises errors thrown in the block' do expect(described_class).to receive(:puts).with( "section_start:#{local_time.to_i}:hello_world[collapsed=true]\r\e[0KHello world" ) expect(described_class).to receive(:puts).with( "section_end:#{local_time.to_i}:hello_world\r\e[0K" ) expect(described_class).to receive(:puts).with(/produced an error/) Timecop.freeze(local_time) do expect { described_class.collapse('Hello world') { raise 'foo' } } .to raise_error(StandardError, 'foo') end end it 'flushes STDOUT and STDERR' do allow(described_class).to receive(:puts) # We call the original method to make sure we don't mess up RSpec's output # in any way. expect($stdout).to receive(:flush).and_call_original expect($stderr).to receive(:flush).and_call_original expect(SemanticLogger).to receive(:flush).and_call_original Timecop.freeze(local_time) do described_class.collapse('Hello world') { '' } end end end describe '.section_name' do it 'generates a section name' do expect(described_class.section_name('I like kittens')) .to eq('i_like_kittens') end end end