[View]  [Edit]  [Lock]  [References]  [Attachments]  [History]  [Home]  [Changes]  [Search]  [Help] 

test[jscocoa] 001 C and ObjC calls

Code

"ObjectiveC class resolution & calls"
| numBundles nsBundle |
nsBundle := Smalltalk nativeObjectAt: #NSBundle.
numBundles := nsBundle#allBundles#count.
numBundles < 1 ifTrue: [ self error: 'no bundles found' ].
self print: 'numBundles=',numBundles.
Smalltalk gc.


"ObjectiveC function resolution & call"
self print: 'NSUserName()=',# #NSUserName.
self print: 'NSFullUserName()=',# #NSFullUserName.
self print: 'NSHomeDirectory()=',# #NSHomeDirectory.
self print: 'NSHomeDirectoryForUser()=',# #NSHomeDirectoryForUser.
self print: 'NSTemporaryDirectory()=',# #NSTemporaryDirectory.
Smalltalk gc.


"ObjectiveC constant resolution"
| value aName |
aName := #NSBundleDidLoadNotification.
value := Smalltalk nativeObjectAt: aName ifAbsent: [].
value isNil ifTrue: [ self error: 'Missing Constant ' ,aName ].
self print: aName ,'=' ,value.
Smalltalk gc.


"External(C) functions resolution & evaluation"
| value |
value := # #CFAbsoluteTimeGetCurrent.
value isNumber ifFalse: [ self error: #mustBeNumber ].
self print: 'Result=',value.
Smalltalk gc.


"External(C) constants resolution"
| value aName |
aName := #CFAbsoluteTimeGetCurrent.
value := Smalltalk nativeObjectAt: aName ifAbsent: [].
value isNil ifTrue: [ self error: 'Missing Constant ' ,aName ].
self print: aName ,'=' ,value.
Smalltalk gc.


References

IMPORTANT
Ensure that you have defined the required constants and functions for testing in the ".bridgesupport" file.
 self cancelFileIn"
 the following definitions are samples to edit
 your default.bridgetsupport file"!


    <!- required for testing >
    <function name='NSUserName'> <retval type='@' /> </function>
    <function name='NSFullUserName'> <retval type='@' /> </function>
    <function name='NSHomeDirectory'> <retval type='@' /> </function>
    <function name='NSHomeDirectoryForUser'> <retval type='@' /> </function>
    <function name='NSTemporaryDirectory'> <retval type='@' /> </function>
    <function name='CFAbsoluteTimeGetCurrent'> <retval type='d' /> </function>
    <constant name='NSBundleDidLoadNotification' declared_type='NSString*' type='^{__CFString=}' const='true'/>