Changeset 63262 in webkit


Ignore:
Timestamp:
Jul 13, 2010 4:59:57 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-07-13 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>

Reviewed by Oliver Hunt.

Separate CoreFoundation specific tests in JSC's testapi.c

testapi.c depends on the Core Foundation.
https://bugs.webkit.org/show_bug.cgi?id=40058

  • WebKit.pro: enable compilation of JSC C API test.

2010-07-13 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>

Reviewed by Oliver Hunt.

testapi.c depends on the Core Foundation.
https://bugs.webkit.org/show_bug.cgi?id=40058

Separate CoreFoundation specific tests in JSC's testapi.c. Enabling it
to compile in Qt environments.

All tests should work except for the JSStringCreateWithCharacters() function,
because its tests depend on Core Foundation specific functions.

  • API/tests/testapi.c: (testJSStringRefCF): moved CoreFoundation specific tests to this function. (main): The moves plus some minor tweaks.
  • testapi.pro: Added.
Location:
trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r63236 r63262  
     12010-07-13  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Separate CoreFoundation specific tests in JSC's testapi.c
     6
     7        testapi.c depends on the Core Foundation.
     8        https://bugs.webkit.org/show_bug.cgi?id=40058
     9
     10        * WebKit.pro: enable compilation of JSC C API test.
     11
    1122010-07-13  Scott Violet  <sky@chromium.org>
    213
  • trunk/JavaScriptCore/API/tests/testapi.c

    r61946 r63262  
    2424 */
    2525
     26#include "config.h"
     27
     28#if PLATFORM(CF)
    2629#include "JavaScriptCore.h"
     30#else
     31#include "JavaScript.h"
     32#include <stdio.h>
     33#include <stdlib.h>
     34#include <string.h>
     35#include <time.h>
     36#endif
     37
    2738#include "JSBasePrivate.h"
    2839#include "JSContextRefPrivate.h"
     
    92103}
    93104
     105// FIXME: define this assert for non-CF platforms.
     106#if PLATFORM(CF)
    94107static void assertEqualsAsCharactersPtr(JSValueRef value, const char* expectedValue)
    95108{
     
    120133    JSStringRelease(valueAsString);
    121134}
     135#endif
    122136
    123137static bool timeZoneIsPST()
     
    818832}
    819833
     834#if PLATFORM(CF)
     835// Test the JavaScriptCore specific API for converting JSStringRefs to/from CFStrings.
     836static void testJSStringRefCF()
     837{
     838    UniChar singleUniChar = 65; // Capital A
     839    CFMutableStringRef cfString =
     840        CFStringCreateMutableWithExternalCharactersNoCopy(kCFAllocatorDefault,
     841                                                          &singleUniChar,
     842                                                          1,
     843                                                          1,
     844                                                          kCFAllocatorNull);
     845
     846    JSStringRef jsCFIString = JSStringCreateWithCFString(cfString);
     847    JSValueRef jsCFString = JSValueMakeString(context, jsCFIString);
     848
     849    CFStringRef cfEmptyString = CFStringCreateWithCString(kCFAllocatorDefault, "", kCFStringEncodingUTF8);
     850
     851    JSStringRef jsCFEmptyIString = JSStringCreateWithCFString(cfEmptyString);
     852    JSValueRef jsCFEmptyString = JSValueMakeString(context, jsCFEmptyIString);
     853
     854    CFIndex cfStringLength = CFStringGetLength(cfString);
     855    UniChar *buffer = (UniChar*)malloc(cfStringLength * sizeof(UniChar));
     856    CFStringGetCharacters(cfString,
     857                          CFRangeMake(0, cfStringLength),
     858                          buffer);
     859    JSStringRef jsCFIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, cfStringLength);
     860    JSValueRef jsCFStringWithCharacters = JSValueMakeString(context, jsCFIStringWithCharacters);
     861
     862    JSStringRef jsCFEmptyIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, CFStringGetLength(cfEmptyString));
     863    free(buffer);
     864    JSValueRef jsCFEmptyStringWithCharacters = JSValueMakeString(context, jsCFEmptyIStringWithCharacters);
     865
     866    ASSERT(JSValueGetType(context, jsCFString) == kJSTypeString);
     867    ASSERT(JSValueGetType(context, jsCFStringWithCharacters) == kJSTypeString);
     868    ASSERT(JSValueGetType(context, jsCFEmptyString) == kJSTypeString);
     869    ASSERT(JSValueGetType(context, jsCFEmptyStringWithCharacters) == kJSTypeString);
     870
     871    assertEqualsAsBoolean(jsCFString, true);
     872    assertEqualsAsBoolean(jsCFStringWithCharacters, true);
     873    assertEqualsAsBoolean(jsCFEmptyString, false);
     874    assertEqualsAsBoolean(jsCFEmptyStringWithCharacters, false);
     875
     876    assertEqualsAsNumber(jsCFString, nan(""));
     877    assertEqualsAsNumber(jsCFStringWithCharacters, nan(""));
     878    assertEqualsAsNumber(jsCFEmptyString, 0);
     879    assertEqualsAsNumber(jsCFEmptyStringWithCharacters, 0);
     880    ASSERT(sizeof(JSChar) == sizeof(UniChar));
     881
     882    assertEqualsAsCharactersPtr(jsCFString, "A");
     883    assertEqualsAsCharactersPtr(jsCFStringWithCharacters, "A");
     884    assertEqualsAsCharactersPtr(jsCFEmptyString, "");
     885    assertEqualsAsCharactersPtr(jsCFEmptyStringWithCharacters, "");
     886
     887    assertEqualsAsUTF8String(jsCFString, "A");
     888    assertEqualsAsUTF8String(jsCFStringWithCharacters, "A");
     889    assertEqualsAsUTF8String(jsCFEmptyString, "");
     890    assertEqualsAsUTF8String(jsCFEmptyStringWithCharacters, "");
     891
     892    CFStringRef cfJSString = JSStringCopyCFString(kCFAllocatorDefault, jsCFIString);
     893    CFStringRef cfJSEmptyString = JSStringCopyCFString(kCFAllocatorDefault, jsCFEmptyIString);
     894    ASSERT(CFEqual(cfJSString, cfString));
     895    ASSERT(CFEqual(cfJSEmptyString, cfEmptyString));
     896    CFRelease(cfJSString);
     897    CFRelease(cfJSEmptyString);
     898
     899    CFRelease(cfString);
     900    CFRelease(cfEmptyString);
     901
     902    JSStringRelease(jsCFIString);
     903    JSStringRelease(jsCFEmptyIString);
     904    JSStringRelease(jsCFIStringWithCharacters);
     905    JSStringRelease(jsCFEmptyIStringWithCharacters);
     906}
     907#endif
     908
    820909int main(int argc, char* argv[])
    821910{
     
    870959    JSValueRef jsOneString = JSValueMakeString(context, jsOneIString);
    871960
    872     UniChar singleUniChar = 65; // Capital A
    873     CFMutableStringRef cfString =
    874         CFStringCreateMutableWithExternalCharactersNoCopy(kCFAllocatorDefault,
    875                                                           &singleUniChar,
    876                                                           1,
    877                                                           1,
    878                                                           kCFAllocatorNull);
    879 
    880     JSStringRef jsCFIString = JSStringCreateWithCFString(cfString);
    881     JSValueRef jsCFString = JSValueMakeString(context, jsCFIString);
    882    
    883     CFStringRef cfEmptyString = CFStringCreateWithCString(kCFAllocatorDefault, "", kCFStringEncodingUTF8);
    884    
    885     JSStringRef jsCFEmptyIString = JSStringCreateWithCFString(cfEmptyString);
    886     JSValueRef jsCFEmptyString = JSValueMakeString(context, jsCFEmptyIString);
    887 
    888     CFIndex cfStringLength = CFStringGetLength(cfString);
    889     UniChar* buffer = (UniChar*)malloc(cfStringLength * sizeof(UniChar));
    890     CFStringGetCharacters(cfString,
    891                           CFRangeMake(0, cfStringLength),
    892                           buffer);
    893     JSStringRef jsCFIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, cfStringLength);
    894     JSValueRef jsCFStringWithCharacters = JSValueMakeString(context, jsCFIStringWithCharacters);
    895    
    896     JSStringRef jsCFEmptyIStringWithCharacters = JSStringCreateWithCharacters((JSChar*)buffer, CFStringGetLength(cfEmptyString));
    897     free(buffer);
    898     JSValueRef jsCFEmptyStringWithCharacters = JSValueMakeString(context, jsCFEmptyIStringWithCharacters);
    899 
    900961    ASSERT(JSValueGetType(context, jsUndefined) == kJSTypeUndefined);
    901962    ASSERT(JSValueGetType(context, jsNull) == kJSTypeNull);
     
    907968    ASSERT(JSValueGetType(context, jsEmptyString) == kJSTypeString);
    908969    ASSERT(JSValueGetType(context, jsOneString) == kJSTypeString);
    909     ASSERT(JSValueGetType(context, jsCFString) == kJSTypeString);
    910     ASSERT(JSValueGetType(context, jsCFStringWithCharacters) == kJSTypeString);
    911     ASSERT(JSValueGetType(context, jsCFEmptyString) == kJSTypeString);
    912     ASSERT(JSValueGetType(context, jsCFEmptyStringWithCharacters) == kJSTypeString);
     970
     971    // FIXME: Add tests for JSStringCreateWithCharacters, they are only covered in the
     972    // CoreFoundation-specific tests.
     973
     974#if PLATFORM(CF)
     975    testJSStringRefCF();
     976#endif
    913977
    914978    JSObjectRef myObject = JSObjectMake(context, MyObject_class(context), NULL);
     
    9641028    JSGarbageCollect(context);
    9651029   
    966     for (int i = 0; i < 10000; i++)
     1030    int i;
     1031    for (i = 0; i < 10000; i++)
    9671032        JSObjectMake(context, 0, 0);
    9681033
     
    10661131    assertEqualsAsBoolean(jsEmptyString, false);
    10671132    assertEqualsAsBoolean(jsOneString, true);
    1068     assertEqualsAsBoolean(jsCFString, true);
    1069     assertEqualsAsBoolean(jsCFStringWithCharacters, true);
    1070     assertEqualsAsBoolean(jsCFEmptyString, false);
    1071     assertEqualsAsBoolean(jsCFEmptyStringWithCharacters, false);
    10721133   
    10731134    assertEqualsAsNumber(jsUndefined, nan(""));
     
    10801141    assertEqualsAsNumber(jsEmptyString, 0);
    10811142    assertEqualsAsNumber(jsOneString, 1);
    1082     assertEqualsAsNumber(jsCFString, nan(""));
    1083     assertEqualsAsNumber(jsCFStringWithCharacters, nan(""));
    1084     assertEqualsAsNumber(jsCFEmptyString, 0);
    1085     assertEqualsAsNumber(jsCFEmptyStringWithCharacters, 0);
    1086     ASSERT(sizeof(JSChar) == sizeof(UniChar));
    1087    
     1143   
     1144// FIXME: Implement assertEqualsAsCharactersPtr for non-CF platforms.
     1145#if PLATFORM(CF)
    10881146    assertEqualsAsCharactersPtr(jsUndefined, "undefined");
    10891147    assertEqualsAsCharactersPtr(jsNull, "null");
     
    10951153    assertEqualsAsCharactersPtr(jsEmptyString, "");
    10961154    assertEqualsAsCharactersPtr(jsOneString, "1");
    1097     assertEqualsAsCharactersPtr(jsCFString, "A");
    1098     assertEqualsAsCharactersPtr(jsCFStringWithCharacters, "A");
    1099     assertEqualsAsCharactersPtr(jsCFEmptyString, "");
    1100     assertEqualsAsCharactersPtr(jsCFEmptyStringWithCharacters, "");
     1155#endif
    11011156   
    11021157    assertEqualsAsUTF8String(jsUndefined, "undefined");
     
    11091164    assertEqualsAsUTF8String(jsEmptyString, "");
    11101165    assertEqualsAsUTF8String(jsOneString, "1");
    1111     assertEqualsAsUTF8String(jsCFString, "A");
    1112     assertEqualsAsUTF8String(jsCFStringWithCharacters, "A");
    1113     assertEqualsAsUTF8String(jsCFEmptyString, "");
    1114     assertEqualsAsUTF8String(jsCFEmptyStringWithCharacters, "");
    11151166   
    11161167    ASSERT(JSValueIsStrictEqual(context, jsTrue, jsTrue));
     
    11201171    ASSERT(!JSValueIsEqual(context, jsTrue, jsFalse, NULL));
    11211172   
    1122     CFStringRef cfJSString = JSStringCopyCFString(kCFAllocatorDefault, jsCFIString);
    1123     CFStringRef cfJSEmptyString = JSStringCopyCFString(kCFAllocatorDefault, jsCFEmptyIString);
    1124     ASSERT(CFEqual(cfJSString, cfString));
    1125     ASSERT(CFEqual(cfJSEmptyString, cfEmptyString));
    1126     CFRelease(cfJSString);
    1127     CFRelease(cfJSEmptyString);
    1128 
    1129     CFRelease(cfString);
    1130     CFRelease(cfEmptyString);
    1131    
     1173
    11321174    jsGlobalValue = JSObjectMake(context, NULL, NULL);
    11331175    makeGlobalNumberValue(context);
     
    12571299    o = JSObjectMake(context, NULL, NULL);
    12581300    JSObjectSetProperty(context, o, jsOneIString, JSValueMakeNumber(context, 1), kJSPropertyAttributeNone, NULL);
    1259     JSObjectSetProperty(context, o, jsCFIString, JSValueMakeNumber(context, 1), kJSPropertyAttributeDontEnum, NULL);
     1301    JSObjectSetProperty(context, o, propertyName, JSValueMakeNumber(context, 1), kJSPropertyAttributeDontEnum, NULL);
    12601302    JSPropertyNameArrayRef nameArray = JSObjectCopyPropertyNames(context, o);
    12611303    size_t expectedCount = JSPropertyNameArrayGetCount(nameArray);
     
    13581400            printf("FAIL: Test script returned unexpected value:\n");
    13591401            JSStringRef exceptionIString = JSValueToStringCopy(context, exception, NULL);
    1360             CFStringRef exceptionCF = JSStringCopyCFString(kCFAllocatorDefault, exceptionIString);
    1361             CFShow(exceptionCF);
    1362             CFRelease(exceptionCF);
     1402
     1403            size_t sizeUTF8 = JSStringGetMaximumUTF8CStringSize(exceptionIString);
     1404            char *exceptionUTF8 = malloc(sizeUTF8);
     1405            JSStringGetUTF8CString(exceptionIString, exceptionUTF8, sizeUTF8);
     1406            printf("%s\n", exceptionUTF8);
     1407            free(exceptionUTF8);
     1408
    13631409            JSStringRelease(exceptionIString);
    13641410            failed = 1;
     
    13771423    JSStringRelease(jsEmptyIString);
    13781424    JSStringRelease(jsOneIString);
    1379     JSStringRelease(jsCFIString);
    1380     JSStringRelease(jsCFEmptyIString);
    1381     JSStringRelease(jsCFIStringWithCharacters);
    1382     JSStringRelease(jsCFEmptyIStringWithCharacters);
    13831425    JSStringRelease(goodSyntax);
    13841426    JSStringRelease(badSyntax);
  • trunk/JavaScriptCore/ChangeLog

    r63244 r63262  
     12010-07-13  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        testapi.c depends on the Core Foundation.
     6        https://bugs.webkit.org/show_bug.cgi?id=40058
     7
     8        Separate CoreFoundation specific tests in JSC's testapi.c. Enabling it
     9        to compile in Qt environments.
     10
     11        All tests should work except for the JSStringCreateWithCharacters() function,
     12        because its tests depend on Core Foundation specific functions.
     13
     14        * API/tests/testapi.c:
     15        (testJSStringRefCF): moved CoreFoundation specific tests to this function.
     16        (main): The moves plus some minor tweaks.
     17        * testapi.pro: Added.
     18
    1192010-07-13  Gavin Barraclough  <barraclough@apple.com>
    220
  • trunk/WebKit.pro

    r62483 r63262  
    1414}
    1515exists($$PWD/JavaScriptCore/jsc.pro): SUBDIRS += JavaScriptCore/jsc.pro
     16exists($$PWD/JavaScriptCore/testapi.pro): SUBDIRS += JavaScriptCore/testapi.pro
    1617exists($$PWD/WebKit/qt/tests): SUBDIRS += WebKit/qt/tests
    1718exists($$PWD/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro): SUBDIRS += WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
Note: See TracChangeset for help on using the changeset viewer.