blob: ff428c51d43d80f5dab1ee9e9d96a9bb2ef7718c [file] [log] [blame]
/************************************************************************
*
* 22.locale.messages.stdcxx-508_542.cpp
*
* the regression test for STDCXX-508, STDCXX-542 issues
*
* $Id$
*
***************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
**************************************************************************/
#include <cstdio>
#include <cassert>
#include <locale>
#include <rw_locale.h>
#include <driver.h>
#ifdef _MSC_VER
#include <crtdbg.h>
#endif
#ifdef _WIN32
# define CATALOG "test"
# define MSG_EXT ".rc"
# define CAT_EXT ".dll"
#else
# define CATALOG "./test"
# define MSG_EXT ".msg"
# define CAT_EXT ".cat"
#endif
static int run_test (int, char**)
{
const char * catalog =
"First set, first message\0\0"
"Second set, first message\0\0";
rw_create_catalog (CATALOG MSG_EXT, catalog);
typedef std::messages<char> messagesT;
const std::locale loc;
const messagesT& msgs =
std::use_facet<messagesT>(loc);
messagesT::catalog cats [4];
int i;
// test STDCXX-508
for (i = 0; i < sizeof (cats) / sizeof (*cats); ++i) {
cats [i] = msgs.open (CATALOG CAT_EXT, loc);
assert (-1 != cats [i]);
}
// test STDCXX-542
for (--i; i >= 0; --i)
msgs.close (cats [i]);
std::remove (CATALOG CAT_EXT);
return 0;
}
int main (int argc, char* argv[])
{
#ifdef _MSC_VER
// disable GUI window from abort()
_CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_DEBUG);
#endif
return rw_test (argc, argv, __FILE__,
"lib.locale.messages",
"STDCXX-508;STDCXX-542",
run_test,
"",
(void*)0);
}