[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