/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* A test program for PR_FormatTime and PR_FormatTimeUSEnglish */

#include "prtime.h"

#include <stdio.h>

int main(int argc, char **argv)
{
    char buffer[256];
    char small_buffer[8];
    PRTime now;
    PRExplodedTime tod;

    now = PR_Now();
    PR_ExplodeTime(now, PR_LocalTimeParameters, &tod);

    if (PR_FormatTime(buffer, sizeof(buffer),
            "%a %b %d %H:%M:%S %Z %Y", &tod) != 0) {
        printf("%s\n", buffer);
    } else {
        fprintf(stderr, "PR_FormatTime(buffer) failed\n");
        return 1;
    }

    small_buffer[0] = '?';
    if (PR_FormatTime(small_buffer, sizeof(small_buffer),
            "%a %b %d %H:%M:%S %Z %Y", &tod) == 0) {
        if (small_buffer[0] != '\0') {
            fprintf(stderr, "PR_FormatTime(small_buffer) did not output "
                            "an empty string on failure\n");
            return 1;
        }
        printf("%s\n", small_buffer);
    } else {
        fprintf(stderr, "PR_FormatTime(small_buffer) succeeded "
                        "unexpectedly\n");
        return 1;
    }

    (void)PR_FormatTimeUSEnglish(buffer, sizeof(buffer),
        "%a %b %d %H:%M:%S %Z %Y", &tod);
    printf("%s\n", buffer);

    return 0;
}
