Author: sebor Date: Sun May 4 17:44:59 2008 New Revision: 653287 URL: http://svn.apache.org/viewvc?rev=653287&view=rev Log: 2008-05-04 Martin Sebor * tests/self/0.locale.cpp: New test exercising the test driver locale helpers, including STDCXX-910. Added: stdcxx/branches/4.2.x/tests/self/0.locale.cpp (with props) Added: stdcxx/branches/4.2.x/tests/self/0.locale.cpp URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/tests/self/0.locale.cpp?rev=653287&view=auto ============================================================================== --- stdcxx/branches/4.2.x/tests/self/0.locale.cpp (added) +++ stdcxx/branches/4.2.x/tests/self/0.locale.cpp Sun May 4 17:44:59 2008 @@ -0,0 +1,115 @@ +/************************************************************************ + * + * 0.locale.cpp - test exercising the test driver locale helpers + * + * $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. + * + * Copyright 2008 Rogue Wave Software, Inc. + * + **************************************************************************/ + +#include // for remove() +#include // for getenv() + +#include // for rw_putenv() +#include // for rw_fwrite() +#include // for rw_test(), etc. +#include // for rw_localedef() +#include // for rw_fprintf() + +/**************************************************************************/ + +static int +test_localedef () +{ + // the root of the locale directory (RWSTD_LOCALE_ROOT) + static const char* const locale_root = rw_set_locale_root (); + + static int inx; + + const int id = inx++; + + // create a temporary locale definition file + char srcfname [1024]; + if (rw_snprintf (srcfname, sizeof srcfname, "%s%c%s.%d", + locale_root, _RWSTD_PATH_SEP, "locale", id) < 0) + return -1; + + // create a temporary character map file + char cmfname [1024]; + if (rw_snprintf (cmfname, sizeof cmfname, "%s%c%s.%d.src", + locale_root, _RWSTD_PATH_SEP, "charmap", id) < 0) + return -1; + + rw_fwrite (srcfname, "LC_CTYPE\nEND LC_CTYPE\n"); + rw_fwrite (cmfname, "CHARMAP\nEND CHARMAP\n"); + + const char opts[] = "-w"; + char locname[40]; + rw_snprintf (locname, sizeof locname, "%s.%d", "locale", id); + + // try to create the locale + const char* const ret = + rw_localedef (opts, srcfname, cmfname, locname); + + const char* const topdir = std::getenv ("TOPDIR"); + + rw_assert (0 != ret, 0, __LINE__, + "rw_localedef(%s, %#s, %#s, %#s) failed with TOPDIR=%#s", + opts, srcfname, cmfname, locname, topdir); + + // remove temporary files + std::remove (cmfname); + std::remove (srcfname); + + return 0; +} + +/**************************************************************************/ + +static int +run_test (int, char*[]) +{ + // exercise with the default setting of TOPDIR + rw_error (0 == test_localedef (), 0, __LINE__, ""); + + // exercise with TOPDIR set but empty + rw_putenv ("TOPDIR="); + rw_error (0 == test_localedef (), 0, __LINE__, ""); + + // exercise with TOPDIR unset + rw_putenv ("TOPDIR"); + rw_error (0 == test_localedef (), 0, __LINE__, ""); + + return 0; +} + +/**************************************************************************/ + +int main (int argc, char *argv[]) +{ + return rw_test (argc, argv, __FILE__, + 0 /* no section */, + 0 /* no comment */, + run_test, + "", + 0); +} Propchange: stdcxx/branches/4.2.x/tests/self/0.locale.cpp ------------------------------------------------------------------------------ svn:eol-style = native Propchange: stdcxx/branches/4.2.x/tests/self/0.locale.cpp ------------------------------------------------------------------------------ svn:keywords = Id