imbue.pass.cpp revision 6b8ac3acda1031a2302136b277e7a68d6ce421e3
1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <ios> 11 12// template <class charT, class traits> class basic_ios 13 14// locale imbue(const locale& loc); 15 16#include <ios> 17#include <streambuf> 18#include <cassert> 19 20struct testbuf 21 : public std::streambuf 22{ 23}; 24 25bool f1_called = false; 26bool f2_called = false; 27bool f3_called = false; 28 29void f1(std::ios_base::event ev, std::ios_base& stream, int index) 30{ 31 if (ev == std::ios_base::imbue_event) 32 { 33 assert(!f1_called); 34 assert( f2_called); 35 assert( f3_called); 36 assert(stream.getloc().name() == "en_US.UTF-8"); 37 assert(index == 4); 38 f1_called = true; 39 } 40} 41 42void f2(std::ios_base::event ev, std::ios_base& stream, int index) 43{ 44 if (ev == std::ios_base::imbue_event) 45 { 46 assert(!f1_called); 47 assert(!f2_called); 48 assert( f3_called); 49 assert(stream.getloc().name() == "en_US.UTF-8"); 50 assert(index == 5); 51 f2_called = true; 52 } 53} 54 55void f3(std::ios_base::event ev, std::ios_base& stream, int index) 56{ 57 if (ev == std::ios_base::imbue_event) 58 { 59 assert(!f1_called); 60 assert(!f2_called); 61 assert(!f3_called); 62 assert(stream.getloc().name() == "en_US.UTF-8"); 63 assert(index == 6); 64 f3_called = true; 65 } 66} 67 68int main() 69{ 70 { 71 std::ios ios(0); 72 ios.register_callback(f1, 4); 73 ios.register_callback(f2, 5); 74 ios.register_callback(f3, 6); 75 std::locale l = ios.imbue(std::locale("en_US.UTF-8")); 76 assert(l.name() == std::string("C")); 77 assert(ios.getloc().name() == std::string("en_US.UTF-8")); 78 assert(f1_called); 79 assert(f2_called); 80 assert(f3_called); 81 } 82 f1_called = false; 83 f2_called = false; 84 f3_called = false; 85 { 86 testbuf sb; 87 std::ios ios(&sb); 88 ios.register_callback(f1, 4); 89 ios.register_callback(f2, 5); 90 ios.register_callback(f3, 6); 91 std::locale l = ios.imbue(std::locale("en_US.UTF-8")); 92 assert(l.name() == std::string("C")); 93 assert(ios.getloc().name() == std::string("en_US.UTF-8")); 94 assert(sb.getloc().name() == std::string("en_US.UTF-8")); 95 assert(f1_called); 96 assert(f2_called); 97 assert(f3_called); 98 } 99} 100