Changeset e71f0a5 in rtems


Ignore:
Timestamp:
Oct 2, 2019, 6:06:36 AM (3 weeks ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
2fdbdbc
Parents:
b5e61f95
git-author:
Sebastian Huber <sebastian.huber@…> (10/02/19 06:06:36)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/11/19 06:55:53)
Message:

ttest01: Check init/final run output

Update #3199.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • testsuites/libtests/ttest01/init.c

    rb5e61f95 re71f0a5  
    4646RTEMS_LINKER_ROSET(t_self_test, const char *);
    4747
     48typedef enum {
     49        CENSOR_PASS_THROUGH,
     50        CENSOR_DISCARD
     51} censor_state;
     52
    4853typedef struct {
    4954        const char *c;
     
    5156        size_t case_end_count;
    5257        struct timecounter tc;
     58        T_putchar putchar;
     59        void *putchar_arg;
     60        const char *censor_c;
     61        censor_state censor_state;
    5362} test_context;
    5463
     
    114123}
    115124
     125static const char censored_init[] = "A:ttest01\n"
     126"S:Platform:RTEMS\n"
     127"S:Compiler:*"
     128"S:Version:*"
     129"S:BSP:*"
     130"S:RTEMS_DEBUG:*"
     131"S:RTEMS_MULTIPROCESSING:*"
     132"S:RTEMS_POSIX_API:*"
     133"S:RTEMS_PROFILING:*"
     134"S:RTEMS_SMP:*";
     135
     136static void
     137censor_putchar(int c, void *arg)
     138{
     139        test_context *ctx;
     140
     141        ctx = arg;
     142
     143        if (*ctx->censor_c == '\0') {
     144                T_putchar discard_putchar;
     145                void *discard_putchar_arg;
     146
     147                (*ctx->putchar)(c, ctx->putchar_arg);
     148                T_set_putchar(ctx->putchar, ctx->putchar_arg, &discard_putchar,
     149                   &discard_putchar_arg);
     150                return;
     151        }
     152
     153        switch (ctx->censor_state) {
     154        case CENSOR_PASS_THROUGH:
     155                if (*ctx->censor_c == '*') {
     156                        (*ctx->putchar)('*', ctx->putchar_arg);
     157                        ctx->censor_state = CENSOR_DISCARD;
     158                } else if (c == *ctx->censor_c) {
     159                        (*ctx->putchar)(c, ctx->putchar_arg);
     160                        ++ctx->censor_c;
     161                }
     162                break;
     163        case CENSOR_DISCARD:
     164                if (c == '\n') {
     165                        (*ctx->putchar)(c, ctx->putchar_arg);
     166                        ctx->censor_state = CENSOR_PASS_THROUGH;
     167                        ++ctx->censor_c;
     168                }
     169                break;
     170        }
     171}
     172
     173static void
     174run_initialize(void)
     175{
     176        test_context *ctx;
     177
     178        ctx = &test_instance;
     179        ctx->censor_c = censored_init;
     180        T_set_putchar(censor_putchar, ctx, &ctx->putchar, &ctx->putchar_arg);
     181}
     182
     183static const char expected_final[] = "Z:ttest01:C:341:N:1316:F:790:D:0.682999\n"
     184"Y:ReportHash:SHA256:62d6f3b37299137932ea2c2f0505c8b8f12b95749c81d5af19570e9470203475\n";
     185
     186static void
     187run_finalize(void)
     188{
     189        test_context *ctx;
     190
     191        ctx = &test_instance;
     192        ctx->c = expected_final;
     193}
     194
    116195static void
    117196test_action(T_event event, const char *name)
     
    125204        case T_EVENT_CASE_LATE:
    126205                case_late(name);
     206                break;
     207        case T_EVENT_RUN_INITIALIZE_EARLY:
     208                run_initialize();
     209                break;
     210        case T_EVENT_RUN_FINALIZE_EARLY:
     211                run_finalize();
    127212                break;
    128213        default:
Note: See TracChangeset for help on using the changeset viewer.