is* API methods should be @properties
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Apr 2015 22:18:05 +0000 (22:18 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Apr 2015 22:18:05 +0000 (22:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143388

Reviewed by Mark Lam.

This appears to be the preferred idiom in WebKit, CA, AppKit, and
Foundation.

* API/JSValue.h: Be @properties.

* API/tests/testapi.mm:
(testObjectiveCAPI): Use the @properties.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@182336 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/API/JSValue.h
Source/JavaScriptCore/API/tests/testapi.mm
Source/JavaScriptCore/ChangeLog

index ac0af7e..3613233 100644 (file)
@@ -380,19 +380,19 @@ OBJC_VISIBLE
 @method
 @abstract Check if a JSValue corresponds to the JavaScript value <code>undefined</code>.
 */ 
-- (BOOL)isUndefined;
+@property (readonly) BOOL isUndefined;
 
 /*!
 @method
 @abstract Check if a JSValue corresponds to the JavaScript value <code>null</code>.
 */
-- (BOOL)isNull;
+@property (readonly) BOOL isNull;
 
 /*!
 @method
 @abstract Check if a JSValue is a boolean.
 */
-- (BOOL)isBoolean;
+@property (readonly) BOOL isBoolean;
 
 /*!
 @method
@@ -401,31 +401,31 @@ OBJC_VISIBLE
  Semantically all numbers behave like doubles except in special cases like bit
  operations. 
 */
-- (BOOL)isNumber;
+@property (readonly) BOOL isNumber;
 
 /*!
 @method
 @abstract Check if a JSValue is a string.
 */
-- (BOOL)isString;
+@property (readonly) BOOL isString;
 
 /*!
 @method
 @abstract Check if a JSValue is an object.
 */
-- (BOOL)isObject;
+@property (readonly) BOOL isObject;
 
 /*!
 @method
 @abstract Check if a JSValue is an array.
 */ 
-- (BOOL)isArray NS_AVAILABLE(10_11, 9_0);
+@property (readonly) BOOL isArray NS_AVAILABLE(10_11, 9_0);
 
 /*!
 @method
 @abstract Check if a JSValue is a date.
 */ 
-- (BOOL)isDate NS_AVAILABLE(10_11, 9_0);
+@property (readonly) BOOL isDate NS_AVAILABLE(10_11, 9_0);
 
 /*!
 @method
index 7bada6b..344c37e 100644 (file)
@@ -496,7 +496,7 @@ void testObjectiveCAPI()
     @autoreleasepool {
         JSContext *context = [[JSContext alloc] init];
         JSValue *result = [context evaluateScript:@"2 + 2"];
-        checkResult(@"2 + 2", [result isNumber] && [result toInt32] == 4);
+        checkResult(@"2 + 2", result.isNumber && [result toInt32] == 4);
     }
 
     @autoreleasepool {
@@ -509,20 +509,20 @@ void testObjectiveCAPI()
         JSContext *context = [[JSContext alloc] init];
         context[@"message"] = @"Hello";
         JSValue *result = [context evaluateScript:@"message + ', World!'"];
-        checkResult(@"Hello, World!", [result isString] && [result isEqualToObject:@"Hello, World!"]);
+        checkResult(@"Hello, World!", result.isString && [result isEqualToObject:@"Hello, World!"]);
     }
 
     @autoreleasepool {
         JSContext *context = [[JSContext alloc] init];
         checkResult(@"Promise is not exposed", [context[@"Promise"] isUndefined]);
         JSValue *result = [context evaluateScript:@"typeof Promise"];
-        checkResult(@"typeof Promise is 'undefined'", [result isString] && [result isEqualToObject:@"undefined"]);
+        checkResult(@"typeof Promise is 'undefined'", result.isString && [result isEqualToObject:@"undefined"]);
     }
 
     @autoreleasepool {
         JSContext *context = [[JSContext alloc] init];
         JSValue *result = [context evaluateScript:@"({ x:42 })"];
-        checkResult(@"({ x:42 })", [result isObject] && [result[@"x"] isEqualToObject:@42]);
+        checkResult(@"({ x:42 })", result.isObject && [result[@"x"] isEqualToObject:@42]);
         id obj = [result toObject];
         checkResult(@"Check dictionary literal", [obj isKindOfClass:[NSDictionary class]]);
         id num = (NSDictionary *)obj[@"x"];
@@ -532,13 +532,13 @@ void testObjectiveCAPI()
     @autoreleasepool {
         JSContext *context = [[JSContext alloc] init];
         JSValue *result = [context evaluateScript:@"[ ]"];
-        checkResult(@"[ ]", [result isArray]);
+        checkResult(@"[ ]", result.isArray);
     }
 
     @autoreleasepool {
         JSContext *context = [[JSContext alloc] init];
         JSValue *result = [context evaluateScript:@"new Date"];
-        checkResult(@"new Date", [result isDate]);
+        checkResult(@"new Date", result.isDate);
     }
 
     @autoreleasepool {
@@ -562,11 +562,11 @@ void testObjectiveCAPI()
             JSValue *myNumber = [myPrivateProperties valueForKey:@"my_number"];
             JSValue *definitelyNull = [myPrivateProperties valueForKey:@"definitely_null"];
             JSValue *notSureIfUndefined = [myPrivateProperties valueForKey:@"not_sure_if_undefined"];
-            checkResult(@"is_ham is true", [isHam isBoolean] && [isHam toBool]);
-            checkResult(@"message is hello!", [message isString] && [@"hello!" isEqualToString:[message toString]]);
-            checkResult(@"my_number is 42", [myNumber isNumber] && [myNumber toInt32] == 42);
-            checkResult(@"definitely_null is null", [definitelyNull isNull]);
-            checkResult(@"not_sure_if_undefined is undefined", [notSureIfUndefined isUndefined]);
+            checkResult(@"is_ham is true", isHam.isBoolean && [isHam toBool]);
+            checkResult(@"message is hello!", message.isString && [@"hello!" isEqualToString:[message toString]]);
+            checkResult(@"my_number is 42", myNumber.isNumber && [myNumber toInt32] == 42);
+            checkResult(@"definitely_null is null", definitelyNull.isNull);
+            checkResult(@"not_sure_if_undefined is undefined", notSureIfUndefined.isUndefined);
         }
 
         checkResult(@"is_ham is nil", ![myPrivateProperties valueForKey:@"is_ham"]);
@@ -652,7 +652,7 @@ void testObjectiveCAPI()
         JSContext *context = [[JSContext alloc] init];
         __block bool emptyExceptionSourceURL = false;
         context.exceptionHandler = ^(JSContext *, JSValue *exception) {
-            emptyExceptionSourceURL = [exception[@"sourceURL"] isUndefined];
+            emptyExceptionSourceURL = exception[@"sourceURL"].isUndefined;
         };
         [context evaluateScript:@"!@#$%^&*() THIS IS NOT VALID JAVASCRIPT SYNTAX !@#$%^&*()"];
         checkResult(@"evaluteScript: exception has no sourceURL", emptyExceptionSourceURL);
@@ -713,7 +713,7 @@ void testObjectiveCAPI()
                 return result; \
             })"];
         JSValue *result = [mulAddFunction callWithArguments:@[ @[ @2, @4, @8 ], @{ @"x":@0.5, @"y":@42 } ]];
-        checkResult(@"mulAddFunction", [result isObject] && [[result toString] isEqual:@"43,44,46"]);
+        checkResult(@"mulAddFunction", result.isObject && [[result toString] isEqual:@"43,44,46"]);
     }
 
     @autoreleasepool {
@@ -738,7 +738,7 @@ void testObjectiveCAPI()
         checkResult(@"array.length after put to maxLength + 1", [[array[@"length"] toNumber] unsignedIntegerValue] == maxLength);
 
         if (sizeof(NSUInteger) == 8)
-            checkResult(@"valueAtIndex:0 is undefined", [[array valueAtIndex:0] isUndefined]);
+            checkResult(@"valueAtIndex:0 is undefined", [array valueAtIndex:0].isUndefined);
         else
             checkResult(@"valueAtIndex:0", [[array valueAtIndex:0] toInt32] == 24);
         checkResult(@"valueAtIndex:lowIndex", [[array valueAtIndex:lowIndex] toInt32] == 42);
@@ -862,7 +862,7 @@ void testObjectiveCAPI()
         context[@"testObjectA"] = testObject;
         context[@"testObjectB"] = testObject;
         JSValue *result = [context evaluateScript:@"testObjectA == testObjectB"];
-        checkResult(@"testObjectA == testObjectB", [result isBoolean] && [result toBool]);
+        checkResult(@"testObjectA == testObjectB", result.isBoolean && [result toBool]);
     }
 
     @autoreleasepool {
@@ -882,7 +882,7 @@ void testObjectiveCAPI()
         context[@"testObject"] = testObject;
         context[@"mul"] = ^(int x, int y){ return x * y; };
         JSValue *result = [context evaluateScript:@"mul(testObject.six, 7)"];
-        checkResult(@"mul(testObject.six, 7)", [result isNumber] && [result toInt32] == 42);
+        checkResult(@"mul(testObject.six, 7)", result.isNumber && [result toInt32] == 42);
     }
 
     @autoreleasepool {
@@ -913,7 +913,7 @@ void testObjectiveCAPI()
         TestObject* testObject = [TestObject testObject];
         context[@"testObject"] = testObject;
         JSValue *result = [context evaluateScript:@"testObject.getString()"];
-        checkResult(@"testObject.getString()", [result isString] && [result toInt32] == 42);
+        checkResult(@"testObject.getString()", result.isString && [result toInt32] == 42);
     }
 
     @autoreleasepool {
@@ -929,7 +929,7 @@ void testObjectiveCAPI()
         TestObject* testObject = [TestObject testObject];
         context[@"testObject"] = testObject;
         JSValue *result = [context evaluateScript:@"testObject.getString.call(testObject)"];
-        checkResult(@"testObject.getString.call(testObject)", [result isString] && [result toInt32] == 42);
+        checkResult(@"testObject.getString.call(testObject)", result.isString && [result toInt32] == 42);
     }
 
     @autoreleasepool {
@@ -946,9 +946,9 @@ void testObjectiveCAPI()
         TestObject* testObject = [TestObject testObject];
         context[@"testObject"] = testObject;
         JSValue *result = [context evaluateScript:@"var result = 0; testObject.callback(function(x){ result = x; }); result"];
-        checkResult(@"testObject.callback", [result isNumber] && [result toInt32] == 42);
+        checkResult(@"testObject.callback", result.isNumber && [result toInt32] == 42);
         result = [context evaluateScript:@"testObject.bogusCallback"];
-        checkResult(@"testObject.bogusCallback == undefined", [result isUndefined]);
+        checkResult(@"testObject.bogusCallback == undefined", result.isUndefined);
     }
 
     @autoreleasepool {
@@ -956,7 +956,7 @@ void testObjectiveCAPI()
         TestObject *testObject = [TestObject testObject];
         context[@"testObject"] = testObject;
         JSValue *result = [context evaluateScript:@"Function.prototype.toString.call(testObject.callback)"];
-        checkResult(@"Function.prototype.toString", !context.exception && ![result isUndefined]);
+        checkResult(@"Function.prototype.toString", !context.exception && !result.isUndefined);
     }
 
     @autoreleasepool {
@@ -1037,13 +1037,13 @@ void testObjectiveCAPI()
 
         @autoreleasepool {
             JSValue *result = [context evaluateScript:@"testXYZ.onclick"];
-            checkResult(@"onclick still around after GC", !([result isNull] || [result isUndefined]));
+            checkResult(@"onclick still around after GC", !(result.isNull || result.isUndefined));
         }
 
 
         @autoreleasepool {
             JSValue *result = [context evaluateScript:@"testXYZ.weakOnclick"];
-            checkResult(@"weakOnclick not around after GC", [result isNull] || [result isUndefined]);
+            checkResult(@"weakOnclick not around after GC", result.isNull || result.isUndefined);
         }
 
         @autoreleasepool {
@@ -1077,7 +1077,7 @@ void testObjectiveCAPI()
             context[@"testObject"] = testObject;
             JSSynchronousGarbageCollectForDebugging([context JSGlobalContextRef]);
             checkResult(@"weak value == nil", ![weakValue value]);
-            checkResult(@"root is still alive", ![context[@"testObject"] isUndefined]);
+            checkResult(@"root is still alive", !context[@"testObject"].isUndefined);
         }
     }
 
@@ -1107,7 +1107,7 @@ void testObjectiveCAPI()
         JSSynchronousGarbageCollectForDebugging([context JSGlobalContextRef]);
 
         JSValue *myCustomProperty = [context evaluateScript:@"getLastNodeInChain(root).myCustomProperty"];
-        checkResult(@"My custom property == 42", [myCustomProperty isNumber] && [myCustomProperty toInt32] == 42);
+        checkResult(@"My custom property == 42", myCustomProperty.isNumber && [myCustomProperty toInt32] == 42);
     }
 
     @autoreleasepool {
@@ -1139,7 +1139,7 @@ void testObjectiveCAPI()
         JSSynchronousGarbageCollectForDebugging([context JSGlobalContextRef]);
 
         JSValue *myCustomProperty = [context evaluateScript:@"getLastNodeInChain(root).myCustomProperty"];
-        checkResult(@"duplicate calls to addManagedReference don't cause things to die", [myCustomProperty isNumber] && [myCustomProperty toInt32] == 42);
+        checkResult(@"duplicate calls to addManagedReference don't cause things to die", myCustomProperty.isNumber && [myCustomProperty toInt32] == 42);
     }
 
     @autoreleasepool {
@@ -1228,7 +1228,7 @@ void testObjectiveCAPI()
             NSLog(@"I'm intentionally not returning anything.");
         };
         JSValue *result = [context evaluateScript:@"new MyClass()"];
-        checkResult(@"result === undefined", [result isUndefined]);
+        checkResult(@"result === undefined", result.isUndefined);
         checkResult(@"exception.message is correct'", context.exception 
             && [@"Objective-C blocks called as constructors must return an object." isEqualToString:[context.exception[@"message"] toString]]);
     }
@@ -1350,7 +1350,7 @@ void testObjectiveCAPI()
             return [[UnexportedObject alloc] init];
         };
         JSValue *result = [context evaluateScript:@"(makeObject() instanceof UnexportedObject)"];
-        checkResult(@"makeObject() instanceof UnexportedObject", [result isBoolean] && [result toBool]);
+        checkResult(@"makeObject() instanceof UnexportedObject", result.isBoolean && [result toBool]);
     }
 
     @autoreleasepool {
index d8463eb..9fc139c 100644 (file)
@@ -1,3 +1,18 @@
+2015-04-03  Geoffrey Garen  <ggaren@apple.com>
+
+        is* API methods should be @properties
+        https://bugs.webkit.org/show_bug.cgi?id=143388
+
+        Reviewed by Mark Lam.
+
+        This appears to be the preferred idiom in WebKit, CA, AppKit, and
+        Foundation.
+
+        * API/JSValue.h: Be @properties.
+
+        * API/tests/testapi.mm:
+        (testObjectiveCAPI): Use the @properties.
+
 2015-04-03  Mark Lam  <mark.lam@apple.com>
 
         Some JSC Options refactoring and enhancements.