Home | History | Annotate | Download | only in libjnitest
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "helper.h"
     18 
     19 #include <cutils/log.h>
     20 
     21 #include <stdarg.h>
     22 #include <stdlib.h>
     23 
     24 #define LOG_TAG "cts"
     25 
     26 /* See helper.h for docs. */
     27 char *failure(const char *format, ...) {
     28     va_list args;
     29     char *result;
     30 
     31     va_start(args, format);
     32     LOG_PRI_VA(ANDROID_LOG_ERROR, LOG_TAG, format, args);
     33     va_end(args);
     34 
     35     va_start(args, format);
     36     int count = vasprintf(&result, format, args);
     37     va_end(args);
     38 
     39     if (count < 0) {
     40         return NULL;
     41     }
     42 
     43     return result;
     44 }
     45 
     46 /* See helper.h for docs. */
     47 char *runJniTests(JNIEnv *env, ...) {
     48     va_list args;
     49     char *result = NULL;
     50 
     51     va_start(args, env);
     52 
     53     for (;;) {
     54         const char *name = va_arg(args, const char *);
     55         if (name == NULL) {
     56             break;
     57         }
     58 
     59         JniTestFunction *function = va_arg(args, JniTestFunction *);
     60 
     61         LOGI("running %s", name);
     62 
     63         char *oneResult = function(env);
     64         if (oneResult != NULL) {
     65             char *newResult;
     66             asprintf(&newResult, "%s%s: %s\n",
     67                     (result == NULL) ? "" : result,
     68                     name, oneResult);
     69             free(result);
     70             if (newResult == NULL) {
     71                 // Shouldn't happen, but deal as gracefully as possible.
     72                 return NULL;
     73             }
     74             result = newResult;
     75         }
     76 
     77         jthrowable oneException = (*env)->ExceptionOccurred(env);
     78         if (oneException != NULL) {
     79             (*env)->ExceptionDescribe(env);
     80             (*env)->ExceptionClear(env);
     81         }
     82     }
     83 
     84     va_end(args);
     85 
     86     return result;
     87 }
     88