@@ -802,6 +802,107 @@ else
802802fi
803803rm -f output.json
804804
805+ # Test 25: --exclude-value filter (exclude specific sensor)
806+ echo " "
807+ echo " Test 25: --exclude-value filter"
808+ result=$( cat << 'EOF ' | ./sensor-data convert --exclude-value sensor:dht22
809+ [{"sensor": "ds18b20", "value": "22.5"}]
810+ [{"sensor": "dht22", "value": "45"}]
811+ [{"sensor": "ds18b20", "value": "23.0"}]
812+ EOF
813+ )
814+ # Should exclude dht22 readings, keep ds18b20
815+ if echo " $result " | grep -q " ds18b20" && ! echo " $result " | grep -q " dht22" ; then
816+ echo " ✓ PASS"
817+ PASSED=$(( PASSED + 1 ))
818+ else
819+ echo " ✗ FAIL - Expected ds18b20 readings only (dht22 excluded)"
820+ echo " Got: $result "
821+ FAILED=$(( FAILED + 1 ))
822+ fi
823+
824+ # Test 25a: --exclude-value with multiple exclusions
825+ echo " "
826+ echo " Test 25a: --exclude-value with multiple exclusions"
827+ result=$( cat << 'EOF ' | ./sensor-data convert --exclude-value sensor:dht22 --exclude-value sensor:bmp280
828+ [{"sensor": "ds18b20", "value": "22.5"}]
829+ [{"sensor": "dht22", "value": "45"}]
830+ [{"sensor": "bmp280", "value": "1013"}]
831+ [{"sensor": "ds18b20", "value": "23.0"}]
832+ EOF
833+ )
834+ # Should exclude both dht22 and bmp280
835+ if echo " $result " | grep -q " ds18b20" && ! echo " $result " | grep -q " dht22\|bmp280" ; then
836+ echo " ✓ PASS"
837+ PASSED=$(( PASSED + 1 ))
838+ else
839+ echo " ✗ FAIL - Expected only ds18b20 (dht22 and bmp280 excluded)"
840+ echo " Got: $result "
841+ FAILED=$(( FAILED + 1 ))
842+ fi
843+
844+ # Test 25b: --exclude-value combined with --only-value
845+ echo " "
846+ echo " Test 25b: --exclude-value combined with --only-value"
847+ result=$( cat << 'EOF ' | ./sensor-data convert --only-value sensor:ds18b20 --exclude-value value:85
848+ [{"sensor": "ds18b20", "value": "22.5"}]
849+ [{"sensor": "ds18b20", "value": "85"}]
850+ [{"sensor": "dht22", "value": "45"}]
851+ [{"sensor": "ds18b20", "value": "23.0"}]
852+ EOF
853+ )
854+ # Should include only ds18b20 but exclude the one with value=85
855+ count=$( echo " $result " | grep -c " ds18b20" || true)
856+ if [ " $count " -eq 2 ] && ! echo " $result " | grep -q ' "value": "85"' ; then
857+ echo " ✓ PASS"
858+ PASSED=$(( PASSED + 1 ))
859+ else
860+ echo " ✗ FAIL - Expected 2 ds18b20 readings (excluding value=85)"
861+ echo " Got: $result "
862+ FAILED=$(( FAILED + 1 ))
863+ fi
864+
865+ # Test 25c: --exclude-value on CSV output
866+ echo " "
867+ echo " Test 25c: --exclude-value with CSV output"
868+ result=$( cat << 'EOF ' | ./sensor-data convert -F csv --exclude-value sensor:dht22
869+ [{"sensor": "ds18b20", "value": "22.5"}]
870+ [{"sensor": "dht22", "value": "45"}]
871+ [{"sensor": "ds18b20", "value": "23.0"}]
872+ EOF
873+ )
874+ # Should have CSV with ds18b20 rows only
875+ ds_count=$( echo " $result " | grep -c " ds18b20" || true)
876+ dht_count=$( echo " $result " | grep -c " dht22" || true)
877+ if [ " $ds_count " -eq 2 ] && [ " $dht_count " -eq 0 ]; then
878+ echo " ✓ PASS"
879+ PASSED=$(( PASSED + 1 ))
880+ else
881+ echo " ✗ FAIL - Expected 2 ds18b20 rows in CSV, 0 dht22"
882+ echo " Got: $result "
883+ FAILED=$(( FAILED + 1 ))
884+ fi
885+
886+ # Test 25d: --exclude-value with file input
887+ echo " "
888+ echo " Test 25d: --exclude-value with file input"
889+ mkdir -p testdir
890+ cat > testdir/test.out << 'EOF '
891+ [{"sensor": "ds18b20", "value": "22.5"}, {"sensor": "dht22", "value": "45"}]
892+ [{"sensor": "bmp280", "value": "1013"}, {"sensor": "ds18b20", "value": "23.0"}]
893+ EOF
894+ result=$( ./sensor-data convert -F json --exclude-value sensor:dht22 --exclude-value sensor:bmp280 testdir/test.out)
895+ rm -rf testdir
896+ # Should exclude dht22 and bmp280, keep only ds18b20
897+ if echo " $result " | grep -q " ds18b20" && ! echo " $result " | grep -q " dht22\|bmp280" ; then
898+ echo " ✓ PASS"
899+ PASSED=$(( PASSED + 1 ))
900+ else
901+ echo " ✗ FAIL - Expected only ds18b20 readings"
902+ echo " Got: $result "
903+ FAILED=$(( FAILED + 1 ))
904+ fi
905+
805906# Summary
806907echo " "
807908echo " ================================"
0 commit comments