run.sh 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #!/bin/bash
  2. set +xe
  3. # The exa binary
  4. exa_binary="$HOME/target/debug/exa"
  5. # The exa command that ends up being run
  6. exa="$exa_binary --colour=always"
  7. # Directory containing our awkward testcase files
  8. testcases="/testcases"
  9. # Directory containing existing test results to compare against
  10. results="/vagrant/xtests"
  11. # Check that no files were created more than a year ago.
  12. # Files not from the current year use a different date format, meaning
  13. # that tests will fail until the VM gets re-provisioned.
  14. # (Ignore the folder that deliberately has dates in the past)
  15. sudo find $testcases -mtime +365 -not -path "*/dates/*" -printf "File %p has not been modified since %TY! Consider re-provisioning; tests will probably fail.\n"
  16. # Long view tests
  17. $exa $testcases/files -l | diff -q - $results/files_l || exit 1
  18. $exa $testcases/files -lh | diff -q - $results/files_lh || exit 1
  19. $exa $testcases/files -lhb | diff -q - $results/files_lhb || exit 1
  20. $exa $testcases/files -lhB | diff -q - $results/files_lhb2 || exit 1
  21. $exa $testcases/attributes/dirs/no-xattrs_empty -lh | diff -q - $results/empty || exit 1
  22. $exa --color-scale $testcases/files -l | diff -q - $results/files_l_scale || exit 1
  23. # Grid view tests
  24. COLUMNS=40 $exa $testcases/files | diff -q - $results/files_40 || exit 1
  25. COLUMNS=80 $exa $testcases/files | diff -q - $results/files_80 || exit 1
  26. COLUMNS=120 $exa $testcases/files | diff -q - $results/files_120 || exit 1
  27. COLUMNS=160 $exa $testcases/files | diff -q - $results/files_160 || exit 1
  28. COLUMNS=200 $exa $testcases/files | diff -q - $results/files_200 || exit 1
  29. COLUMNS=100 $exa $testcases/files/* | diff -q - $results/files_star_100 || exit 1
  30. COLUMNS=150 $exa $testcases/files/* | diff -q - $results/files_star_150 || exit 1
  31. COLUMNS=200 $exa $testcases/files/* | diff -q - $results/files_star_200 || exit 1
  32. # Long grid view tests
  33. COLUMNS=40 $exa $testcases/files -lG | diff -q - $results/files_lG_40 || exit 1
  34. COLUMNS=80 $exa $testcases/files -lG | diff -q - $results/files_lG_80 || exit 1
  35. COLUMNS=120 $exa $testcases/files -lG | diff -q - $results/files_lG_120 || exit 1
  36. COLUMNS=160 $exa $testcases/files -lG | diff -q - $results/files_lG_160 || exit 1
  37. COLUMNS=200 $exa $testcases/files -lG | diff -q - $results/files_lG_200 || exit 1
  38. COLUMNS=100 $exa $testcases/files/* -lG | diff -q - $results/files_star_lG_100 || exit 1
  39. COLUMNS=150 $exa $testcases/files/* -lG | diff -q - $results/files_star_lG_150 || exit 1
  40. COLUMNS=200 $exa $testcases/files/* -lG | diff -q - $results/files_star_lG_200 || exit 1
  41. # Attributes
  42. # (there are many tests, but they're all done in one go)
  43. $exa $testcases/attributes -l@T | diff -q - $results/attributes || exit 1
  44. # UIDs and GIDs
  45. $exa $testcases/passwd -lgh | diff -q - $results/passwd || exit 1
  46. # Permissions, and current users and groups
  47. sudo -u cassowary $exa $testcases/permissions -lghR 2>&1 | diff -q - $results/permissions_sudo || exit 1
  48. $exa $testcases/permissions -lghR 2>&1 | diff -q - $results/permissions || exit 1
  49. # File names
  50. # (Mostly escaping control characters in file names)
  51. COLUMNS=80 $exa $testcases/file-names 2>&1 | diff -q - $results/file_names || exit 1
  52. COLUMNS=80 $exa $testcases/file-names -x 2>&1 | diff -q - $results/file_names_x || exit 1
  53. COLUMNS=80 $exa $testcases/file-names -R 2>&1 | diff -q - $results/file_names_R || exit 1
  54. $exa $testcases/file-names -1 2>&1 | diff -q - $results/file_names_1 || exit 1
  55. $exa $testcases/file-names -T 2>&1 | diff -q - $results/file_names_T || exit 1
  56. # At least make sure it handles invalid UTF-8 arguments without crashing
  57. $exa $testcases/file-names/* >/dev/null || exit 1
  58. # Sorting and extension file types
  59. $exa $testcases/file-names-exts -1 2>&1 --sort=Name | diff -q - $results/file-names-exts || exit 1
  60. $exa $testcases/file-names-exts -1 2>&1 --sort=name | diff -q - $results/file-names-exts-case || exit 1
  61. $exa $testcases/file-names-exts -1 2>&1 --sort=Ext | diff -q - $results/file-names-exts-ext || exit 1
  62. $exa $testcases/file-names-exts -1 2>&1 --sort=ext | diff -q - $results/file-names-exts-ext-case || exit 1
  63. # Pass multiple input arguments because there aren’t enough of different types
  64. # in one directory already
  65. $exa $testcases/links -1 --sort=type 2>&1 | diff -q - $results/sort-by-type || exit 1
  66. # We can’t guarantee inode numbers, but we can at least check that they’re in
  67. # order. The inode column is the leftmost one, so sort works for this.
  68. $exa $testcases/file-names-exts --long --inode --sort=inode | sort --check || exit 1
  69. # Other file types
  70. $exa $testcases/specials -l 2>&1 | diff -q - $results/specials || exit 1
  71. $exa $testcases/specials -F -l 2>&1 | diff -q - $results/specials_F || exit 1
  72. $exa $testcases/specials --sort=type -1 2>&1 | diff -q - $results/specials_sort || exit 1
  73. # Ignores
  74. $exa $testcases/file-names-exts/music.* -I "*.OGG" -1 2>&1 | diff -q - $results/ignores_ogg || exit 1
  75. $exa $testcases/file-names-exts/music.* -I "*.OGG|*.mp3" -1 2>&1 | diff -q - $results/empty || exit 1
  76. # Dates and times
  77. $exa $testcases/dates -lh --accessed --sort=accessed 2>&1 | diff -q - $results/dates_accessed || exit 1
  78. $exa $testcases/dates -lh --sort=modified 2>&1 | diff -q - $results/dates_modified || exit 1
  79. $exa $testcases/dates -l --time-style=long-iso 2>&1 | diff -q - $results/dates_long_iso || exit 1
  80. $exa $testcases/dates -l --time-style=full-iso 2>&1 | diff -q - $results/dates_full_iso || exit 1
  81. $exa $testcases/dates -l --time-style=iso 2>&1 | diff -q - $results/dates_iso || exit 1
  82. # Paths and directories
  83. # These directories are created in the VM user’s home directory (the default
  84. # location) when a Cargo build is done.
  85. (cd; $exa -1d target target/debug target/debug/build | diff -q - $results/dir_paths) || exit 1
  86. $exa -1d . .. / | diff -q - $results/dirs || exit 1
  87. # Links
  88. COLUMNS=80 $exa $testcases/links 2>&1 | diff -q - $results/links || exit 1
  89. $exa $testcases/links -1 2>&1 | diff -q - $results/links_1 || exit 1
  90. $exa $testcases/links -T 2>&1 | diff -q - $results/links_T || exit 1
  91. $exa /proc/1/root -T 2>&1 | diff -q - $results/proc_1_root || exit 1
  92. # There’ve been bugs where the target file wasn’t printed properly when the
  93. # symlink file was specified on the command-line directly.
  94. $exa $testcases/links/* -1 | diff -q - $results/links_1_files || exit 1
  95. # Colours and terminals
  96. # Just because COLUMNS is present, doesn’t mean output is to a terminal
  97. COLUMNS=80 $exa_binary $testcases/files -l | diff -q - $results/files_l_bw || exit 1
  98. COLUMNS=80 $exa_binary --colour=always $testcases/files -l | diff -q - $results/files_l || exit 1
  99. COLUMNS=80 $exa_binary --colour=never $testcases/files -l | diff -q - $results/files_l_bw || exit 1
  100. COLUMNS=80 $exa_binary --colour=automatic $testcases/files -l | diff -q - $results/files_l_bw || exit 1
  101. # Git
  102. $exa $testcases/git/additions -l --git 2>&1 | diff -q - $results/git_additions || exit 1
  103. $exa $testcases/git/edits -l --git 2>&1 | diff -q - $results/git_edits || exit 1
  104. # Hidden files
  105. COLUMNS=80 $exa $testcases/hiddens 2>&1 | diff -q - $results/hiddens || exit 1
  106. COLUMNS=80 $exa $testcases/hiddens -a 2>&1 | diff -q - $results/hiddens_a || exit 1
  107. COLUMNS=80 $exa $testcases/hiddens -aa 2>&1 | diff -q - $results/hiddens_aa || exit 1
  108. $exa $testcases/hiddens -l 2>&1 | diff -q - $results/hiddens_l || exit 1
  109. $exa $testcases/hiddens -l -a 2>&1 | diff -q - $results/hiddens_la || exit 1
  110. $exa $testcases/hiddens -l -aa 2>&1 | diff -q - $results/hiddens_laa || exit 1
  111. # And finally...
  112. $exa --help | diff -q - $results/help || exit 1
  113. $exa --help --long | diff -q - $results/help_long || exit 1
  114. echo "All the tests passed!"