#!/bin/sh test_description='progress display' TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh show_cr () { tr '\015' Q | sed -e "s/Q/\\$LF/g" } test_expect_success 'simple progress display' ' cat >expect <<-\EOF && Working hard: 1 Working hard: 2 Working hard: 5 Working hard: 5, done. EOF cat >in <<-\EOF && start 0 update progress 1 update progress 2 progress 3 progress 4 update progress 5 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display with total' ' cat >expect <<-\EOF && Working hard: 33% (1/3) Working hard: 66% (2/3) Working hard: 100% (3/3) Working hard: 100% (3/3), done. EOF cat >in <<-\EOF && start 3 progress 1 progress 2 progress 3 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display breaks long lines #1' ' sed -e "s/Z$//" >expect <<\EOF && Working hard.......2.........3.........4.........5.........6: 0% (100/100000) Working hard.......2.........3.........4.........5.........6: 1% (1000/100000) Working hard.......2.........3.........4.........5.........6: Z 10% (10000/100000) 100% (100000/100000) 100% (100000/100000), done. EOF cat >in <<-\EOF && start 100000 Working hard.......2.........3.........4.........5.........6 progress 100 progress 1000 progress 10000 progress 100000 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display breaks long lines #2' ' # Note: we do not need that many spaces after the title to cover up # the last line before breaking the progress line. sed -e "s/Z$//" >expect <<\EOF && Working hard.......2.........3.........4.........5.........6: 0% (1/100000) Working hard.......2.........3.........4.........5.........6: 0% (2/100000) Working hard.......2.........3.........4.........5.........6: Z 10% (10000/100000) 100% (100000/100000) 100% (100000/100000), done. EOF cat >in <<-\EOF && start 100000 Working hard.......2.........3.........4.........5.........6 update progress 1 update progress 2 progress 10000 progress 100000 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display breaks long lines #3 - even the first is too long' ' # Note: we do not actually need any spaces at the end of the title # line, because there is no previous progress line to cover up. sed -e "s/Z$//" >expect <<\EOF && Working hard.......2.........3.........4.........5.........6: Z 25% (25000/100000) 50% (50000/100000) 75% (75000/100000) 100% (100000/100000) 100% (100000/100000), done. EOF cat >in <<-\EOF && start 100000 Working hard.......2.........3.........4.........5.........6 progress 25000 progress 50000 progress 75000 progress 100000 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display breaks long lines #4 - title line matches terminal width' ' cat >expect <<\EOF && Working hard.......2.........3.........4.........5.........6.........7.........: 25% (25000/100000) 50% (50000/100000) 75% (75000/100000) 100% (100000/100000) 100% (100000/100000), done. EOF cat >in <<-\EOF && start 100000 Working hard.......2.........3.........4.........5.........6.........7......... progress 25000 progress 50000 progress 75000 progress 100000 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' # Progress counter goes backwards, this should not happen in practice. test_expect_success 'progress shortens - crazy caller' ' cat >expect <<-\EOF && Working hard: 10% (100/1000) Working hard: 20% (200/1000) Working hard: 0% (1/1000) Working hard: 100% (1000/1000) Working hard: 100% (1000/1000), done. EOF cat >in <<-\EOF && start 1000 progress 100 progress 200 progress 1 progress 1000 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display with throughput' ' cat >expect <<-\EOF && Working hard: 10 Working hard: 20, 200.00 KiB | 100.00 KiB/s Working hard: 30, 300.00 KiB | 100.00 KiB/s Working hard: 40, 400.00 KiB | 100.00 KiB/s Working hard: 40, 400.00 KiB | 100.00 KiB/s, done. EOF cat >in <<-\EOF && start 0 throughput 102400 1000 update progress 10 throughput 204800 2000 update progress 20 throughput 307200 3000 update progress 30 throughput 409600 4000 update progress 40 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress display with throughput and total' ' cat >expect <<-\EOF && Working hard: 25% (10/40) Working hard: 50% (20/40), 200.00 KiB | 100.00 KiB/s Working hard: 75% (30/40), 300.00 KiB | 100.00 KiB/s Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s Working hard: 100% (40/40), 400.00 KiB | 100.00 KiB/s, done. EOF cat >in <<-\EOF && start 40 throughput 102400 1000 progress 10 throughput 204800 2000 progress 20 throughput 307200 3000 progress 30 throughput 409600 4000 progress 40 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'cover up after throughput shortens' ' cat >expect <<-\EOF && Working hard: 1 Working hard: 2, 800.00 KiB | 400.00 KiB/s Working hard: 3, 1.17 MiB | 400.00 KiB/s Working hard: 4, 1.56 MiB | 400.00 KiB/s Working hard: 4, 1.56 MiB | 400.00 KiB/s, done. EOF cat >in <<-\EOF && start 0 throughput 409600 1000 update progress 1 throughput 819200 2000 update progress 2 throughput 1228800 3000 update progress 3 throughput 1638400 4000 update progress 4 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'cover up after throughput shortens a lot' ' cat >expect <<-\EOF && Working hard: 1 Working hard: 2, 1000.00 KiB | 1000.00 KiB/s Working hard: 3, 3.00 MiB | 1.50 MiB/s Working hard: 3, 3.00 MiB | 1024.00 KiB/s, done. EOF cat >in <<-\EOF && start 0 throughput 1 1000 update progress 1 throughput 1024000 2000 update progress 2 throughput 3145728 3000 update progress 3 stop EOF test-tool progress stderr && show_cr out && test_cmp expect out ' test_expect_success 'progress generates traces' ' cat >in <<-\EOF && start 40 throughput 102400 1000 update progress 10 throughput 204800 2000 update progress 20 throughput 307200 3000 update progress 30 throughput 409600 4000 update progress 40 stop EOF GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress \ stderr && # t0212/parse_events.perl intentionally omits regions and data. test_region progress "Working hard" trace.event && grep "\"key\":\"total_objects\",\"value\":\"40\"" trace.event && grep "\"key\":\"total_bytes\",\"value\":\"409600\"" trace.event ' test_expect_success 'progress generates traces: stop / start' ' cat >in <<-\EOF && start 0 stop EOF GIT_TRACE2_EVENT="$PWD/trace-startstop.event" test-tool progress \ stderr && test_region progress "Working hard" trace-startstop.event ' test_expect_success 'progress generates traces: start without stop' ' cat >in <<-\EOF && start 0 EOF GIT_TRACE2_EVENT="$PWD/trace-start.event" \ LSAN_OPTIONS=detect_leaks=0 \ test-tool progress \ stderr && grep region_enter.*progress trace-start.event && ! grep region_leave.*progress trace-start.event ' test_expect_success 'progress generates traces: stop without start' ' cat >in <<-\EOF && stop EOF GIT_TRACE2_EVENT="$PWD/trace-stop.event" test-tool progress \ stderr && ! grep region_enter.*progress trace-stop.event && ! grep region_leave.*progress trace-stop.event ' test_expect_success 'progress generates traces: start with active progress bar (no stops)' ' cat >in <<-\EOF && start 0 One start 0 Two EOF GIT_TRACE2_EVENT="$PWD/trace-2start.event" \ LSAN_OPTIONS=detect_leaks=0 \ test-tool progress \ stderr && grep region_enter.*progress.*One trace-2start.event && grep region_enter.*progress.*Two trace-2start.event && ! grep region_leave trace-2start.event ' test_done