[PATCH 2/3] test: improve selective execution of Cairo tests based on FORMAT option

Ravi Nanjundappa <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
This patch improves the patch "test: Selective execution of Cairo tests based on FORMAT option"
by extending the usage of FORMAT option even in the case of user not
providing TARGETS= option

For ex:
(1). CAIRO_TESTS="zero-alpha" make test FORMAT=rgba
This command runs the zero-alpha test for all the backends with
argb32 content format and so on.
(2). CAIRO_TESTS="zero-alpha" make test FORMAT=rgba,rgb
This command runs the zero-alpha test for all the backends with
argb32 and rgb24 content formats.

Signed-off-by: Ravi Nanjundappa <[email protected]>
---
 boilerplate/cairo-boilerplate.c |   68 +++++++++++++++++++++++++++++++--------
 1 file changed, 55 insertions(+), 13 deletions(-)

diff --git a/boilerplate/cairo-boilerplate.c b/boilerplate/cairo-boilerplate.c
index 29b3a12..ef44629 100644
--- a/boilerplate/cairo-boilerplate.c
+++ b/boilerplate/cairo-boilerplate.c
@@ -683,20 +683,62 @@ cairo_boilerplate_get_targets (int	    *pnum_targets,
 	    tname = end;
 	}
     } else {
-	/* check all compiled in targets */
-	num_targets = 0;
-	for (list = cairo_boilerplate_targets; list != NULL; list = list->next)
-	    num_targets++;
+	    int found = 0;
+	    int not_found_targets = 0;
+	    num_targets = 0;
+	    targets_to_test = xmalloc (sizeof(cairo_boilerplate_target_t*) * num_targets);
+	    for (list = cairo_boilerplate_targets; list != NULL; list = list->next)
+	    {
+		    const cairo_boilerplate_target_t *target = list->target;
+		    const char *tcontent_name;
+		    const char *tcontent_end;
+		    if ((tcontent_name = getenv ("CAIRO_TEST_TARGET_FORMAT")) != NULL && *tcontent_name) {
+			    while(tcontent_name) {
+				    tcontent_end = strpbrk (tcontent_name, " \t\r\n;:,");
+				    if (tcontent_end == tcontent_name) {
+					    tcontent_name = tcontent_end + 1;
+					    continue;
+				    }
+				    if(_cairo_boilerplate_target_format_matches_name (target,
+							    tcontent_name, tcontent_end)) {
+					    /* realloc isn't exactly the best thing here, but meh. */
+					    targets_to_test = xrealloc (targets_to_test, 
+							    sizeof(cairo_boilerplate_target_t *) * (num_targets+1));
+					    targets_to_test[num_targets++] = target;
+					    found =1;
+				    }
+				    else 
+				    {
+					    not_found_targets++;
+				    }		
+
+				    if (tcontent_end)
+					    tcontent_end++;
+
+				    tcontent_name = tcontent_end;
+			    }
+		    }
+		    else 
+		    {
+			    num_targets++;
+		    }
+	    }
+	    if(!found) 
+	    {
+		    /* check all compiled in targets */
+		    num_targets = num_targets + not_found_targets;
+		    targets_to_test = xrealloc (targets_to_test,
+				    sizeof(cairo_boilerplate_target_t*) * num_targets);
+		    num_targets = 0;
+		    for (list = cairo_boilerplate_targets;
+				    list != NULL;
+				    list = list->next)
+		    {
+			    const cairo_boilerplate_target_t *target = list->target;
+			    targets_to_test[num_targets++] = target;
+		    }
+	    }
 
-	targets_to_test = xmalloc (sizeof(cairo_boilerplate_target_t*) * num_targets);
-	num_targets = 0;
-	for (list = cairo_boilerplate_targets;
-	     list != NULL;
-	     list = list->next)
-	{
-	    const cairo_boilerplate_target_t *target = list->target;
-	    targets_to_test[num_targets++] = target;
-	}
     }
 
     /* exclude targets as specified by the user */
-- 
1.7.9.5

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.