[Piglit] [PATCH 02/13] util: Refactor parsing subtest args

Chad Versace chad.versace at linux.intel.com
Wed Mar 26 10:40:18 PDT 2014


Pre-patch, piglit-framework-gl.c:process_args() parsed subtest args
'-subtest' and '-list-subtests' with inline code. This patch moves that
code to a new function, piglit_parse_subtest_args().

This prepares for using Piglit's subtest magic in non-GL tests.
Currently, all the code for subtests lives in GL-dependent file
piglit-framework-gl.c, and must be moved to the API-independent file
piglit-util.c so that non-GL tests can use it.

Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---
 tests/util/piglit-framework-gl.c | 104 ++++++++++++++++++++++-----------------
 1 file changed, 60 insertions(+), 44 deletions(-)

diff --git a/tests/util/piglit-framework-gl.c b/tests/util/piglit-framework-gl.c
index 561b1cd..8fb7eaf 100644
--- a/tests/util/piglit-framework-gl.c
+++ b/tests/util/piglit-framework-gl.c
@@ -59,6 +59,62 @@ delete_arg(char *argv[], int argc, int arg)
 	}
 }
 
+static void
+piglit_parse_subtest_args(int *argc, char *argv[],
+			  const struct piglit_gl_subtest *subtests,
+			  const char ***out_selected_subtests,
+			  size_t *out_num_selected_subtests)
+{
+	int j;
+	const char **selected_subtests = NULL;
+	size_t num_selected_subtests = 0;
+
+	for (j = 1; j < *argc; j++) {
+		if (streq(argv[j], "-subtest")) {
+			int i;
+
+			++j;
+			if (j >= *argc) {
+				fprintf(stderr,
+					"-subtest requires an argument\n");
+				piglit_report_result(PIGLIT_FAIL);
+			}
+
+			selected_subtests =
+				realloc(selected_subtests,
+					(num_selected_subtests + 1)
+					* sizeof(char*));
+			selected_subtests[num_selected_subtests] = argv[j];
+			++num_selected_subtests;
+
+			/* Remove 2 arguments from the command line. */
+			for (i = j + 1; i < *argc; i++) {
+				argv[i - 2] = argv[i];
+			}
+			*argc -= 2;
+			j -= 2;
+		} else if (streq(argv[j], "-list-subtests")) {
+			int i;
+
+			if (subtests == NULL) {
+				fprintf(stderr, "Test defines no subtests!\n");
+				exit(EXIT_FAILURE);
+			}
+
+			for (i = 0; !PIGLIT_GL_SUBTEST_END(&subtests[i]); ++i) {
+				printf("%s: %s\n",
+				       subtests[i].option,
+				       subtests[i].name);
+			}
+
+			exit(EXIT_SUCCESS);
+		}
+	}
+
+	*out_selected_subtests = selected_subtests;
+	*out_num_selected_subtests = num_selected_subtests;
+}
+
 /**
  * Recognized arguments are removed from @a argv. The updated array
  * length is returned in @a argc.
@@ -69,6 +125,10 @@ process_args(int *argc, char *argv[], unsigned *force_samples,
 {
 	int j;
 
+	piglit_parse_subtest_args(argc, argv, config->subtests,
+				  &config->selected_subtests,
+				  &config->num_selected_subtests);
+
 	/* Find/remove "-auto" and "-fbo" from the argument vector.
 	 */
 	for (j = 1; j < *argc; j++) {
@@ -113,50 +173,6 @@ process_args(int *argc, char *argv[], unsigned *force_samples,
 			*force_samples = atoi(argv[j]+9);
 			delete_arg(argv, *argc, j--);
 			*argc -= 1;
-		} else if (!strcmp(argv[j], "-subtest")) {
-			int i;
-
-			j++;
-			if (j >= *argc) {
-				fprintf(stderr,
-					"-subtest requires an argument\n");
-				piglit_report_result(PIGLIT_FAIL);
-			}
-
-			config->selected_subtests =
-				realloc(config->selected_subtests,
-					sizeof(char *)
-					* (config->num_selected_subtests + 1));
-			config->selected_subtests[config->num_selected_subtests] =
-				argv[j];
-
-			config->num_selected_subtests++;
-
-			/* Remove 2 arguments (hence the 'i - 2') from the
-			 * command line.
-			 */
-			for (i = j + 1; i < *argc; i++) {
-				argv[i - 2] = argv[i];
-			}
-			*argc -= 2;
-			j -= 2;
-		} else if (!strcmp(argv[j], "-list-subtests")) {
-			unsigned i;
-
-			if (config->subtests == NULL) {
-				fprintf(stderr, "Test defines no subtests!\n");
-				exit(1);
-			}
-
-			for (i = 0;
-			     !PIGLIT_GL_SUBTEST_END(&config->subtests[i]);
-			     i++) {
-				printf("%s: %s\n",
-				       config->subtests[i].option,
-				       config->subtests[i].name);
-			}
-
-			exit(0);
 		}
 	}
 }
-- 
1.8.5.3



More information about the Piglit mailing list