MCPcopy Create free account
hub / github.com/anjo76/angelscript / TestUTF16

Function TestUTF16

sdk/tests/test_feature/source/test_scriptstring.cpp:943–1044  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

941}
942
943bool TestUTF16()
944{
945 RET_ON_MAX_PORT
946
947 bool fail = false;
948 CBufferedOutStream bout;
949 int r;
950
951 asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
952 engine->SetMessageCallback(asMETHOD(CBufferedOutStream, Callback), &bout, asCALL_THISCALL);
953
954 engine->RegisterGlobalFunction("void assert(bool)", asFUNCTION(Assert), asCALL_GENERIC);
955
956 // Set the string encoding to UTF16 (default is UTF8)
957 engine->SetEngineProperty(asEP_STRING_ENCODING, 1);
958
959 // Register our UTF16 string type
960 engine->RegisterObjectType("string", sizeof(std::vector<asWORD>), asOBJ_VALUE | asOBJ_APP_CLASS_CDA);
961 engine->RegisterObjectBehaviour("string", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(StringConstructUTF16), asCALL_CDECL_OBJLAST);
962 engine->RegisterObjectBehaviour("string", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(StringDestructUTF16), asCALL_CDECL_OBJLAST);
963 engine->RegisterObjectMethod("string", "string &opAssign(const string &in)", asMETHODPR(vector<asWORD>, operator=, (const vector<asWORD> &), vector<asWORD> &), asCALL_THISCALL);
964 engine->RegisterStringFactory("string", &stringFactoryUTF16);
965 vector<asWORD> str;
966 engine->RegisterGlobalProperty("string s", &str);
967
968 // Test a normal ASCII string
969 r = ExecuteString(engine, "s = 'hello'");
970 if( r != asEXECUTION_FINISHED )
971 TEST_FAILED;
972 const unsigned short s[] = {'h','e','l','l','o'};
973 if( str.size() != 5 || memcmp(&str[0], s, 10) != 0 )
974 TEST_FAILED;
975
976 // Test a string with UTF8 scanning above 127 and below 256
977 r = ExecuteString(engine, "s = '\xC2\x80'");
978 if( r != asEXECUTION_FINISHED )
979 TEST_FAILED;
980 if( str.size() != 1 || str[0] != 128 )
981 TEST_FAILED;
982
983 // Test a string with escape sequence
984 r = ExecuteString(engine, "s = '\\n'");
985 if( r != asEXECUTION_FINISHED )
986 TEST_FAILED;
987 if( str.size() != 1 || str[0] != '\n' )
988 TEST_FAILED;
989
990 // Test a string with characters above 65535 (requires surrogate pairs)
991 r = ExecuteString(engine, "s = '\\U0010FFFFg'");
992 if( r != asEXECUTION_FINISHED )
993 TEST_FAILED;
994 if( str.size() != 3 || str[0] != 0xDBFF || str[1] != 0xDFFF || str[2] != 'g' )
995 TEST_FAILED;
996
997 // Test hexadecimal escape sequences
998 r = ExecuteString(engine, "s = '\\xFF'");
999 if( r != asEXECUTION_FINISHED )
1000 TEST_FAILED;

Callers 1

TestFunction · 0.85

Calls 10

ExecuteStringFunction · 0.85
SetMessageCallbackMethod · 0.80
SetEnginePropertyMethod · 0.80
RegisterObjectMethodMethod · 0.80
RegisterStringFactoryMethod · 0.80
sizeMethod · 0.45
ReleaseMethod · 0.45

Tested by

no test coverage detected