Browse Source

Allow running test cases without groups in CT

Loïc Hoguin 6 years ago
parent
commit
f07636e667
4 changed files with 33 additions and 4 deletions
  1. 1 1
      Makefile
  2. 6 0
      doc/src/guide/common_test.asciidoc
  3. 7 3
      plugins/ct.mk
  4. 19 0
      test/plugin_ct.mk

+ 1 - 1
Makefile

@@ -47,7 +47,7 @@ check:
 else
 else
 ifdef c
 ifdef c
 check:
 check:
-	$(MAKE) -C test $c
+	$(MAKE) -C test $c c=
 else
 else
 check:
 check:
 	$(MAKE) -C test
 	$(MAKE) -C test

+ 6 - 0
doc/src/guide/common_test.asciidoc

@@ -93,5 +93,11 @@ as a dependency, you can run the following directly:
 [source,bash]
 [source,bash]
 $ make -C deps/cowboy ct-http t=http_compress
 $ make -C deps/cowboy ct-http t=http_compress
 
 
+The variable `c` can be used to run a specific test when
+the test suite does not group test cases:
+
+[source,bash]
+$ make ct-http c=headers_dupe
+
 Finally, xref:coverage[code coverage] is available,
 Finally, xref:coverage[code coverage] is available,
 but covered in its own chapter.
 but covered in its own chapter.

+ 7 - 3
plugins/ct.mk

@@ -62,15 +62,19 @@ $(foreach app,$(ALL_APPS_DIRS),$(eval $(call ct_app_target,$(app))))
 apps-ct: $(addprefix apps-ct-,$(ALL_APPS_DIRS))
 apps-ct: $(addprefix apps-ct-,$(ALL_APPS_DIRS))
 endif
 endif
 
 
-ifndef t
-CT_EXTRA =
-else
+ifdef t
 ifeq (,$(findstring :,$t))
 ifeq (,$(findstring :,$t))
 CT_EXTRA = -group $t
 CT_EXTRA = -group $t
 else
 else
 t_words = $(subst :, ,$t)
 t_words = $(subst :, ,$t)
 CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words))
 CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words))
 endif
 endif
+else
+ifdef c
+CT_EXTRA = -case $c
+else
+CT_EXTRA =
+endif
 endif
 endif
 
 
 define ct_suite_target
 define ct_suite_target

+ 19 - 0
test/plugin_ct.mk

@@ -151,6 +151,25 @@ ct-case: build clean
 	$i "Check that we can run Common Test on a specific test case"
 	$i "Check that we can run Common Test on a specific test case"
 	$t $(MAKE) -C $(APP) ct-$(APP) t=mygroup:ok $v
 	$t $(MAKE) -C $(APP) ct-$(APP) t=mygroup:ok $v
 
 
+ct-case-without-group: build clean
+
+	$i "Bootstrap a new OTP application named $(APP)"
+	$t mkdir $(APP)/
+	$t cp ../erlang.mk $(APP)/
+	$t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
+
+	$i "Generate a Common Test suite with two cases that are not part of any group"
+	$t mkdir $(APP)/test
+	$t printf "%s\n" \
+		"-module($(APP)_SUITE)." \
+		"-export([all/0, ok/1, bad/1])." \
+		"all() -> [ok, bad]." \
+		"ok(_) -> ok." \
+		"bad(_) -> throw(fail)." > $(APP)/test/$(APP)_SUITE.erl
+
+	$i "Check that we can run Common Test on a specific test case"
+	$t $(MAKE) -C $(APP) ct-$(APP) c=ok $v
+
 ct-check: build clean
 ct-check: build clean
 
 
 	$i "Bootstrap a new OTP application named $(APP)"
 	$i "Bootstrap a new OTP application named $(APP)"