Browse Source

Fix #2637

where testing.expect_value can't compare nils
ramn 2 years ago
parent
commit
7b89f25818
4 changed files with 18 additions and 2 deletions
  1. 3 2
      core/testing/testing.odin
  2. 1 0
      tests/issues/run.bat
  3. 1 0
      tests/issues/run.sh
  4. 13 0
      tests/issues/test_issue_2637.odin

+ 3 - 2
core/testing/testing.odin

@@ -4,6 +4,7 @@ import "core:fmt"
 import "core:io"
 import "core:time"
 import "core:intrinsics"
+import "core:reflect"
 
 // IMPORTANT NOTE: Compiler requires this layout
 Test_Signature :: proc(^T)
@@ -89,7 +90,7 @@ expect :: proc(t: ^T, ok: bool, msg: string = "", loc := #caller_location) -> bo
 	return ok
 }
 expect_value :: proc(t: ^T, value, expected: $T, loc := #caller_location) -> bool where intrinsics.type_is_comparable(T) {
-	ok := value == expected
+	ok := value == expected || reflect.is_nil(value) && reflect.is_nil(expected)
 	if !ok {
 		errorf(t, "expected %v, got %v", expected, value, loc=loc)
 	}
@@ -100,4 +101,4 @@ expect_value :: proc(t: ^T, value, expected: $T, loc := #caller_location) -> boo
 
 set_fail_timeout :: proc(t: ^T, duration: time.Duration, loc := #caller_location) {
 	_fail_timeout(t, duration, loc)
-}
+}

+ 1 - 0
tests/issues/run.bat

@@ -14,6 +14,7 @@ set COMMON=-collection:tests=..\..
 ..\..\..\odin build ..\test_issue_2113.odin %COMMON% -file -debug || exit /b
 ..\..\..\odin test ..\test_issue_2466.odin %COMMON% -file || exit /b
 ..\..\..\odin test ..\test_issue_2615.odin %COMMON% -file || exit /b
+..\..\..\odin test ..\test_issue_2637.odin %COMMON% -file || exit /b
 
 @echo off
 

+ 1 - 0
tests/issues/run.sh

@@ -17,6 +17,7 @@ $ODIN test ../test_issue_2087.odin $COMMON -file
 $ODIN build ../test_issue_2113.odin $COMMON -file -debug
 $ODIN test ../test_issue_2466.odin $COMMON -file
 $ODIN test ../test_issue_2615.odin $COMMON -file
+$ODIN test ../test_issue_2637.odin $COMMON -file
 if [[ $($ODIN build ../test_issue_2395.odin $COMMON -file 2>&1 >/dev/null | grep -c "$NO_NIL_ERR") -eq 2 ]] ; then
 	echo "SUCCESSFUL 1/1"
 else

+ 13 - 0
tests/issues/test_issue_2637.odin

@@ -0,0 +1,13 @@
+// Tests issue #2637 https://github.com/odin-lang/Odin/issues/2637
+package test_issues
+
+import "core:testing"
+
+Foo :: Maybe(string)
+
+@(test)
+test_expect_value_succeeds_with_nil :: proc(t: ^testing.T) {
+  x: Foo
+  testing.expect(t, x == nil) // Succeeds
+  testing.expect_value(t, x, nil) // Fails, "expected nil, got nil"
+}