* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "config.h"
-
-#if PLATFORM(CF)
#include "JavaScriptCore.h"
-#else
-#include "JavaScript.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#endif
-
#include "JSBasePrivate.h"
#include "JSContextRefPrivate.h"
#include "JSObjectRefPrivate.h"
JSStringRelease(valueAsString);
}
-// FIXME: define this assert for non-CF platforms.
-#if PLATFORM(CF)
static void assertEqualsAsCharactersPtr(JSValueRef value, const char* expectedValue)
{
JSStringRef valueAsString = JSValueToStringCopy(context, value, NULL);
free(cfBuffer);
JSStringRelease(valueAsString);
}
-#endif
static bool timeZoneIsPST()
{
return result;
}
-#if PLATFORM(CF)
-// Test the JavaScriptCore specific API for converting JSStringRefs to/from CFStrings.
-static void testJSStringRefCF()
-{
- UniChar singleUniChar = 65; // Capital A
- CFMutableStringRef cfString =
- CFStringCreateMutableWithExternalCharactersNoCopy(kCFAllocatorDefault,
- &singleUniChar,
- 1,
- 1,
- kCFAllocatorNull);
-
- JSStringRef jsCFIString = JSStringCreateWithCFString(cfString);
- JSValueRef jsCFString = JSValueMakeString(context, jsCFIString);
-
- CFStringRef cfEmptyString = CFStringCreateWithCString(kCFAllocatorDefault, "", kCFStringEncodingUTF8);
-
- JSStringRef jsCFEmptyIString = JSStringCreateWithCFString(cfEmptyString);
- JSValueRef jsCFEmptyString = JSValueMakeString(context, jsCFEmptyIString);
-
- CFIndex cfStringLength = CFStringGetLength(cfString);
- UniChar *buffer = (UniChar*)malloc(cfStringLength * sizeof(UniChar));
- CFStringGetCharacters(cfString,
- CFRangeMake(0, cfStringLength),
- buffer);
- JSStringRef jsCFIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, cfStringLength);
- JSValueRef jsCFStringWithCharacters = JSValueMakeString(context, jsCFIStringWithCharacters);
-
- JSStringRef jsCFEmptyIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, CFStringGetLength(cfEmptyString));
- free(buffer);
- JSValueRef jsCFEmptyStringWithCharacters = JSValueMakeString(context, jsCFEmptyIStringWithCharacters);
-
- ASSERT(JSValueGetType(context, jsCFString) == kJSTypeString);
- ASSERT(JSValueGetType(context, jsCFStringWithCharacters) == kJSTypeString);
- ASSERT(JSValueGetType(context, jsCFEmptyString) == kJSTypeString);
- ASSERT(JSValueGetType(context, jsCFEmptyStringWithCharacters) == kJSTypeString);
-
- assertEqualsAsBoolean(jsCFString, true);
- assertEqualsAsBoolean(jsCFStringWithCharacters, true);
- assertEqualsAsBoolean(jsCFEmptyString, false);
- assertEqualsAsBoolean(jsCFEmptyStringWithCharacters, false);
-
- assertEqualsAsNumber(jsCFString, nan(""));
- assertEqualsAsNumber(jsCFStringWithCharacters, nan(""));
- assertEqualsAsNumber(jsCFEmptyString, 0);
- assertEqualsAsNumber(jsCFEmptyStringWithCharacters, 0);
- ASSERT(sizeof(JSChar) == sizeof(UniChar));
-
- assertEqualsAsCharactersPtr(jsCFString, "A");
- assertEqualsAsCharactersPtr(jsCFStringWithCharacters, "A");
- assertEqualsAsCharactersPtr(jsCFEmptyString, "");
- assertEqualsAsCharactersPtr(jsCFEmptyStringWithCharacters, "");
-
- assertEqualsAsUTF8String(jsCFString, "A");
- assertEqualsAsUTF8String(jsCFStringWithCharacters, "A");
- assertEqualsAsUTF8String(jsCFEmptyString, "");
- assertEqualsAsUTF8String(jsCFEmptyStringWithCharacters, "");
-
- CFStringRef cfJSString = JSStringCopyCFString(kCFAllocatorDefault, jsCFIString);
- CFStringRef cfJSEmptyString = JSStringCopyCFString(kCFAllocatorDefault, jsCFEmptyIString);
- ASSERT(CFEqual(cfJSString, cfString));
- ASSERT(CFEqual(cfJSEmptyString, cfEmptyString));
- CFRelease(cfJSString);
- CFRelease(cfJSEmptyString);
-
- CFRelease(cfString);
- CFRelease(cfEmptyString);
-
- JSStringRelease(jsCFIString);
- JSStringRelease(jsCFEmptyIString);
- JSStringRelease(jsCFIStringWithCharacters);
- JSStringRelease(jsCFEmptyIStringWithCharacters);
-}
-#endif
-
int main(int argc, char* argv[])
{
const char *scriptPath = "testapi.js";
JSStringRef jsOneIString = JSStringCreateWithUTF8CString("1");
JSValueRef jsOneString = JSValueMakeString(context, jsOneIString);
+ UniChar singleUniChar = 65; // Capital A
+ CFMutableStringRef cfString =
+ CFStringCreateMutableWithExternalCharactersNoCopy(kCFAllocatorDefault,
+ &singleUniChar,
+ 1,
+ 1,
+ kCFAllocatorNull);
+
+ JSStringRef jsCFIString = JSStringCreateWithCFString(cfString);
+ JSValueRef jsCFString = JSValueMakeString(context, jsCFIString);
+
+ CFStringRef cfEmptyString = CFStringCreateWithCString(kCFAllocatorDefault, "", kCFStringEncodingUTF8);
+
+ JSStringRef jsCFEmptyIString = JSStringCreateWithCFString(cfEmptyString);
+ JSValueRef jsCFEmptyString = JSValueMakeString(context, jsCFEmptyIString);
+
+ CFIndex cfStringLength = CFStringGetLength(cfString);
+ UniChar* buffer = (UniChar*)malloc(cfStringLength * sizeof(UniChar));
+ CFStringGetCharacters(cfString,
+ CFRangeMake(0, cfStringLength),
+ buffer);
+ JSStringRef jsCFIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, cfStringLength);
+ JSValueRef jsCFStringWithCharacters = JSValueMakeString(context, jsCFIStringWithCharacters);
+
+ JSStringRef jsCFEmptyIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, CFStringGetLength(cfEmptyString));
+ free(buffer);
+ JSValueRef jsCFEmptyStringWithCharacters = JSValueMakeString(context, jsCFEmptyIStringWithCharacters);
+
ASSERT(JSValueGetType(context, jsUndefined) == kJSTypeUndefined);
ASSERT(JSValueGetType(context, jsNull) == kJSTypeNull);
ASSERT(JSValueGetType(context, jsTrue) == kJSTypeBoolean);
ASSERT(JSValueGetType(context, jsOneThird) == kJSTypeNumber);
ASSERT(JSValueGetType(context, jsEmptyString) == kJSTypeString);
ASSERT(JSValueGetType(context, jsOneString) == kJSTypeString);
-
- // FIXME: Add tests for JSStringCreateWithCharacters, they are only covered in the
- // CoreFoundation-specific tests.
-
-#if PLATFORM(CF)
- testJSStringRefCF();
-#endif
+ ASSERT(JSValueGetType(context, jsCFString) == kJSTypeString);
+ ASSERT(JSValueGetType(context, jsCFStringWithCharacters) == kJSTypeString);
+ ASSERT(JSValueGetType(context, jsCFEmptyString) == kJSTypeString);
+ ASSERT(JSValueGetType(context, jsCFEmptyStringWithCharacters) == kJSTypeString);
JSObjectRef myObject = JSObjectMake(context, MyObject_class(context), NULL);
JSStringRef myObjectIString = JSStringCreateWithUTF8CString("MyObject");
JSGarbageCollect(context);
- int i;
- for (i = 0; i < 10000; i++)
+ for (int i = 0; i < 10000; i++)
JSObjectMake(context, 0, 0);
aHeapRef = JSValueToObject(context, JSObjectGetPrivateProperty(context, myObject, privatePropertyName), 0);
assertEqualsAsBoolean(jsOneThird, true);
assertEqualsAsBoolean(jsEmptyString, false);
assertEqualsAsBoolean(jsOneString, true);
+ assertEqualsAsBoolean(jsCFString, true);
+ assertEqualsAsBoolean(jsCFStringWithCharacters, true);
+ assertEqualsAsBoolean(jsCFEmptyString, false);
+ assertEqualsAsBoolean(jsCFEmptyStringWithCharacters, false);
assertEqualsAsNumber(jsUndefined, nan(""));
assertEqualsAsNumber(jsNull, 0);
assertEqualsAsNumber(jsOneThird, 1.0 / 3.0);
assertEqualsAsNumber(jsEmptyString, 0);
assertEqualsAsNumber(jsOneString, 1);
+ assertEqualsAsNumber(jsCFString, nan(""));
+ assertEqualsAsNumber(jsCFStringWithCharacters, nan(""));
+ assertEqualsAsNumber(jsCFEmptyString, 0);
+ assertEqualsAsNumber(jsCFEmptyStringWithCharacters, 0);
+ ASSERT(sizeof(JSChar) == sizeof(UniChar));
-// FIXME: Implement assertEqualsAsCharactersPtr for non-CF platforms.
-#if PLATFORM(CF)
assertEqualsAsCharactersPtr(jsUndefined, "undefined");
assertEqualsAsCharactersPtr(jsNull, "null");
assertEqualsAsCharactersPtr(jsTrue, "true");
assertEqualsAsCharactersPtr(jsOneThird, "0.3333333333333333");
assertEqualsAsCharactersPtr(jsEmptyString, "");
assertEqualsAsCharactersPtr(jsOneString, "1");
-#endif
+ assertEqualsAsCharactersPtr(jsCFString, "A");
+ assertEqualsAsCharactersPtr(jsCFStringWithCharacters, "A");
+ assertEqualsAsCharactersPtr(jsCFEmptyString, "");
+ assertEqualsAsCharactersPtr(jsCFEmptyStringWithCharacters, "");
assertEqualsAsUTF8String(jsUndefined, "undefined");
assertEqualsAsUTF8String(jsNull, "null");
assertEqualsAsUTF8String(jsOneThird, "0.3333333333333333");
assertEqualsAsUTF8String(jsEmptyString, "");
assertEqualsAsUTF8String(jsOneString, "1");
+ assertEqualsAsUTF8String(jsCFString, "A");
+ assertEqualsAsUTF8String(jsCFStringWithCharacters, "A");
+ assertEqualsAsUTF8String(jsCFEmptyString, "");
+ assertEqualsAsUTF8String(jsCFEmptyStringWithCharacters, "");
ASSERT(JSValueIsStrictEqual(context, jsTrue, jsTrue));
ASSERT(!JSValueIsStrictEqual(context, jsOne, jsOneString));
ASSERT(JSValueIsEqual(context, jsOne, jsOneString, NULL));
ASSERT(!JSValueIsEqual(context, jsTrue, jsFalse, NULL));
+ CFStringRef cfJSString = JSStringCopyCFString(kCFAllocatorDefault, jsCFIString);
+ CFStringRef cfJSEmptyString = JSStringCopyCFString(kCFAllocatorDefault, jsCFEmptyIString);
+ ASSERT(CFEqual(cfJSString, cfString));
+ ASSERT(CFEqual(cfJSEmptyString, cfEmptyString));
+ CFRelease(cfJSString);
+ CFRelease(cfJSEmptyString);
+ CFRelease(cfString);
+ CFRelease(cfEmptyString);
+
jsGlobalValue = JSObjectMake(context, NULL, NULL);
makeGlobalNumberValue(context);
JSValueProtect(context, jsGlobalValue);
o = JSObjectMake(context, NULL, NULL);
JSObjectSetProperty(context, o, jsOneIString, JSValueMakeNumber(context, 1), kJSPropertyAttributeNone, NULL);
- JSObjectSetProperty(context, o, propertyName, JSValueMakeNumber(context, 1), kJSPropertyAttributeDontEnum, NULL);
+ JSObjectSetProperty(context, o, jsCFIString, JSValueMakeNumber(context, 1), kJSPropertyAttributeDontEnum, NULL);
JSPropertyNameArrayRef nameArray = JSObjectCopyPropertyNames(context, o);
size_t expectedCount = JSPropertyNameArrayGetCount(nameArray);
size_t count;
else {
printf("FAIL: Test script returned unexpected value:\n");
JSStringRef exceptionIString = JSValueToStringCopy(context, exception, NULL);
-
- size_t sizeUTF8 = JSStringGetMaximumUTF8CStringSize(exceptionIString);
- char *exceptionUTF8 = malloc(sizeUTF8);
- JSStringGetUTF8CString(exceptionIString, exceptionUTF8, sizeUTF8);
- printf("%s\n", exceptionUTF8);
- free(exceptionUTF8);
-
+ CFStringRef exceptionCF = JSStringCopyCFString(kCFAllocatorDefault, exceptionIString);
+ CFShow(exceptionCF);
+ CFRelease(exceptionCF);
JSStringRelease(exceptionIString);
failed = 1;
}
JSStringRelease(jsEmptyIString);
JSStringRelease(jsOneIString);
+ JSStringRelease(jsCFIString);
+ JSStringRelease(jsCFEmptyIString);
+ JSStringRelease(jsCFIStringWithCharacters);
+ JSStringRelease(jsCFEmptyIStringWithCharacters);
JSStringRelease(goodSyntax);
JSStringRelease(badSyntax);