forked from parmanoir/jscocoa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
27 type modifier o.js
91 lines (60 loc) · 2.18 KB
/
27 type modifier o.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
type o arguments (as named by the ObjC runtime)
Given pointers to arguments, a function can write multiple return values to them.
// Return OpenGL version
int major, minor;
NSOpenGLGetVersion(&major, &minor);
// JSCocoa eq
var major = new outArgument
var minor = new outArgument
NSOpenGLGetVersion(major, minor)
log('major=' + major + ' minor=' + minor)
outArgument value can be accessed with .outValue
var error = new outArgument
var r = [@"hello" writeToURL:url atomically:NO encoding:NSUTF8StringEncoding error:error]
-> error.outValue == NSError (if any)
*/
//
// Test basic type encoding (int)
//
var major = new outArgument
var minor = new outArgument
NSOpenGLGetVersion(major, minor)
if (typeof (major.valueOf()) != 'number') throw 'type o failed (1)'
if (typeof (minor.valueOf()) != 'number') throw 'type o failed (2)'
if (!(major >= 1)) throw 'type o failed (3)'
// log('OpenGL version major=' + major + ' minor=' + minor)
var windowCount = new outArgument
NSCountWindows(windowCount)
// log('windowCount=' + windowCount)
if (typeof (minor.valueOf()) != 'number') throw 'type o failed (4)'
if (!(major >= 1 && major < 500)) throw 'type o failed (5)'
//
// Test structs
//
var rect = new NSRect(10, 20, 30, 40)
var rect1 = new outArgument
var rect2 = new outArgument
NSDivideRect(rect, rect1, rect2, 5, NSMinXEdge)
// log('rect1=' + rect1)
if (rect1.origin.x != 10 || rect1.origin.y != 20 || rect1.size.width != 5 || rect1.size.height != 40) throw 'type o failed (6)'
if (rect2.origin.x != 15 || rect2.origin.y != 20 || rect2.size.width != 25 || rect2.size.height != 40) throw 'type o failed (7)'
//
// Test ObjC call
//
var scanner = NSScanner.scannerWithString('4.56 123')
var extractedFloat = new outArgument
scanner.scanFloat(extractedFloat)
// log(extractedFloat)
if (Math.abs(4.56-extractedFloat) > 0.01) throw 'type o failed (6)'
var extractedInteger = new outArgument
scanner.scanInteger(extractedInteger)
// log(extractedInteger)
if (extractedInteger != 123) throw 'type o failed (7)'
major = null
minor = null
windowCount = null
rect1 = null
rect2 = null
extractedInteger = null
extractedFloat = null