From d68f58d7cbac2d1734555166f31dd17f5e56ad9d Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Fri, 26 Mar 2021 21:02:51 +0100 Subject: [PATCH 1/2] Sort versions Some tests were failing because our sort order was depending on the order `mdfind` was returning Xcodes. This uses sort -n to sort versions by their numeric order. --- share/chxcode/chxcode | 6 ++++++ test/chxcode_test | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/share/chxcode/chxcode b/share/chxcode/chxcode index fa127d0..e411351 100644 --- a/share/chxcode/chxcode +++ b/share/chxcode/chxcode @@ -23,9 +23,15 @@ system_xcode_version() { xcode_versions() { system_version=$(system_xcode_version) + versions=() for xcode in ${XCODES[*]}; do version=$(xcode_version "$xcode") + versions+=${version} + done + + IFS=$'\n' versions=($(sort -n <<<"${versions[*]}")); unset IFS + for version in ${versions[*]}; do if [ "$version" = "$system_version" ]; then echo "* $version" else diff --git a/test/chxcode_test b/test/chxcode_test index 7bd29bb..c2ebce1 100644 --- a/test/chxcode_test +++ b/test/chxcode_test @@ -3,11 +3,11 @@ . ./test/helper test_exec_with_no_arguments() { - export DEVELOPER_DIR="$search_path/Xcode.app/Contents/Developer" + export DEVELOPER_DIR="$search_path/Xcode.app/Contents/Developer" xcodes=$(chxcode | tr '\n' ' ' | xargs) - assertEquals "should print installed xcodes" "9.2 * 9.3" "$xcodes" + assertEquals "should print installed xcodes" "* 9.3 9.2" "$xcodes" } test_change_unknown_xcode_reports_error() { From 27d458d62af3d8a4fcab55656c336c18b1ca3517 Mon Sep 17 00:00:00 2001 From: Klaas Pieter Annema Date: Fri, 26 Mar 2021 22:28:35 +0100 Subject: [PATCH 2/2] Testing Is mdls enough? No. Yes, given some time. It looks like just installing shunit takes long enough for Spotlight to index.. --- .github/workflows/ci.yml | 10 ++++++++++ bin/wait-for-spotlight | 19 +++++++++++++++++++ share/chxcode/chxcode | 2 +- test/chxcode_test | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100755 bin/wait-for-spotlight diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index badf17e..1c0655d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,9 +12,19 @@ jobs: steps: - uses: actions/checkout@v2 + - run: mdutil -s / + + - run: sudo mdutil -E / + - name: Install shunit2 run: brew install shunit2 + - name: Wait for spotlight to index our test Xcodes directory + run: ./bin/wait-for-spotlight + + - name: Run mdfind + run: mdfind -onlyin "$PWD/test/applications" "kMDItemCFBundleIdentifier='com.apple.dt.Xcode'" + - name: Run tests run: make test diff --git a/bin/wait-for-spotlight b/bin/wait-for-spotlight new file mode 100755 index 0000000..90bd141 --- /dev/null +++ b/bin/wait-for-spotlight @@ -0,0 +1,19 @@ +#!/bin/sh + +xcodes_path="$PWD/test/applications" + +while true; do + mdimport "$xcodes_path" + mdls "$xcodes_path" + + output="$(mdfind -onlyin "$xcodes_path" "kMDItemCFBundleIdentifier='com.apple.dt.Xcode'")" + + if [ -z "$output" ]; then + echo "mdfind did not find any Xcodes at $xcodes_path" + ls "$xcodes_path" + sleep 1 + else + echo "found '$output'" + break + fi +done diff --git a/share/chxcode/chxcode b/share/chxcode/chxcode index e411351..b54d1c2 100644 --- a/share/chxcode/chxcode +++ b/share/chxcode/chxcode @@ -26,7 +26,7 @@ xcode_versions() { versions=() for xcode in ${XCODES[*]}; do version=$(xcode_version "$xcode") - versions+=${version} + versions+=("$version") done IFS=$'\n' versions=($(sort -n <<<"${versions[*]}")); unset IFS diff --git a/test/chxcode_test b/test/chxcode_test index c2ebce1..934aff0 100644 --- a/test/chxcode_test +++ b/test/chxcode_test @@ -7,7 +7,7 @@ test_exec_with_no_arguments() { xcodes=$(chxcode | tr '\n' ' ' | xargs) - assertEquals "should print installed xcodes" "* 9.3 9.2" "$xcodes" + assertEquals "should print installed xcodes" "9.2 * 9.3" "$xcodes" } test_change_unknown_xcode_reports_error() {