| @safe unittest | |
| { | |
| import std.encoding; | |
| assert(encodingName!(char) == "UTF-8"); | |
| assert(encodingName!(wchar) == "UTF-16"); | |
| assert(encodingName!(dchar) == "UTF-32"); | |
| assert(encodingName!(AsciiChar) == "ASCII"); | |
| assert(encodingName!(Latin1Char) == "ISO-8859-1"); | |
| assert(encodingName!(Latin2Char) == "ISO-8859-2"); | |
| assert(encodingName!(Windows1250Char) == "windows-1250"); | |
| assert(encodingName!(Windows1251Char) == "windows-1251"); | |
| assert(encodingName!(Windows1252Char) == "windows-1252"); | |
| } | |
| @safe pure unittest | |
| { | |
| import std.encoding; | |
| assert( canEncode!(Latin1Char)('A')); | |
| assert( canEncode!(Latin2Char)('A')); | |
| assert(!canEncode!(AsciiChar)('\u00A0')); | |
| assert( canEncode!(Latin1Char)('\u00A0')); | |
| assert( canEncode!(Latin2Char)('\u00A0')); | |
| assert( canEncode!(Windows1250Char)('\u20AC')); | |
| assert(!canEncode!(Windows1250Char)('\u20AD')); | |
| assert(!canEncode!(Windows1250Char)('\uFFFD')); | |
| assert( canEncode!(Windows1251Char)('\u0402')); | |
| assert(!canEncode!(Windows1251Char)('\u20AD')); | |
| assert(!canEncode!(Windows1251Char)('\uFFFD')); | |
| assert( canEncode!(Windows1252Char)('\u20AC')); | |
| assert(!canEncode!(Windows1252Char)('\u20AD')); | |
| assert(!canEncode!(Windows1252Char)('\uFFFD')); | |
| assert(!canEncode!(char)(cast(dchar) 0x110000)); | |
| } | |
| @safe pure unittest | |
| { | |
| import std.encoding; | |
| import std.algorithm.searching : find; | |
| import std.utf : byDchar; | |
| assert("The quick brown fox" | |
| .byDchar | |
| .find!(x => !canEncode!AsciiChar(x)) | |
| .empty); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert(!isValidCodeUnit(cast(char) 0xC0)); | |
| assert(!isValidCodeUnit(cast(char) 0xFF)); | |
| assert( isValidCodeUnit(cast(wchar) 0xD800)); | |
| assert(!isValidCodeUnit(cast(dchar) 0xD800)); | |
| assert(!isValidCodeUnit(cast(AsciiChar) 0xA0)); | |
| assert( isValidCodeUnit(cast(Windows1250Char) 0x80)); | |
| assert(!isValidCodeUnit(cast(Windows1250Char) 0x81)); | |
| assert( isValidCodeUnit(cast(Windows1251Char) 0x80)); | |
| assert(!isValidCodeUnit(cast(Windows1251Char) 0x98)); | |
| assert( isValidCodeUnit(cast(Windows1252Char) 0x80)); | |
| assert(!isValidCodeUnit(cast(Windows1252Char) 0x81)); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert( isValid("\u20AC100")); | |
| assert(!isValid(cast(char[3])[167, 133, 175])); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert(sanitize("hello \xF0\x80world") == "hello \xEF\xBF\xBDworld"); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert(firstSequence("\u20AC1000") == "\u20AC".length); | |
| assert(firstSequence("hel") == "h".length); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert(lastSequence("1000\u20AC") == "\u20AC".length); | |
| assert(lastSequence("hellö") == "ö".length); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| assert(index("\u20AC100",1) == 3); | |
| assert(index("hällo",2) == 3); | |
| } | |
| @system unittest | |
| { | |
| import std.encoding; | |
| string s = "hello"; | |
| string t; | |
| foreach (c;codePoints(s)) | |
| { | |
| t ~= cast(char) c; | |
| } | |
| assert(s == t); | |
| } | |
| @system unittest | |
| { | |
| import std.encoding; | |
| char[] a; | |
| foreach (c;codeUnits!(char)(cast(dchar)'\u20AC')) | |
| { | |
| a ~= c; | |
| } | |
| assert(a.length == 3); | |
| assert(a[0] == 0xE2); | |
| assert(a[1] == 0x82); | |
| assert(a[2] == 0xAC); | |
| } | |
| @system pure unittest | |
| { | |
| import std.encoding; | |
| wstring ws; | |
| // transcode from UTF-8 to UTF-16 | |
| transcode("hello world",ws); | |
| assert(ws == "hello world"w); | |
| Latin1String ls; | |
| // transcode from UTF-16 to ISO-8859-1 | |
| transcode(ws, ls); | |
| assert(ls == "hello world"); | |
| } | |
| @system unittest | |
| { | |
| import std.encoding; | |
| import std.format : format; | |
| auto ts = dchar(0x0000FEFF) ~ "Hello World"d; | |
| auto entry = getBOM(cast(ubyte[]) ts); | |
| version (BigEndian) | |
| { | |
| assert(entry.schema == BOM.utf32be, format("%s", entry.schema)); | |
| } | |
| else | |
| { | |
| assert(entry.schema == BOM.utf32le, format("%s", entry.schema)); | |
| } | |
| } | |