Skip to content

Commit b4b3fda

Browse files
committed
getSymbol docs and tests
1 parent a34df2a commit b4b3fda

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

src/Core__Object.res

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,20 @@
2626
*/
2727
@get_index
2828
external get: ({..}, string) => option<'a> = ""
29-
@get_index external getSymbol: ({..}, Core__Symbol.t) => option<'a> = ""
29+
/**
30+
`getSymbol` gets the value of a property by symbol. Returns `None` if the property does not exist or has the value `undefined`. Otherwise returns `Some`, including if the value is `null`.
31+
32+
## Examples
33+
34+
```rescript
35+
let fruit = Symbol.make("fruit")
36+
let x = Object.empty()
37+
x->Object.setSymbol(fruit, "banana")
38+
x->Object.getSymbol(fruit) // Some("banana")
39+
```
40+
*/
41+
@get_index
42+
external getSymbol: ({..}, Core__Symbol.t) => option<'a> = ""
3043
@get_index external getSymbolUnsafe: ({..}, Core__Symbol.t) => 'a = ""
3144

3245
@set_index external set: ({..}, string, 'a) => unit = ""

test/ObjectTests.mjs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,37 @@ runGetTest({
112112
]
113113
});
114114

115+
function getSymbolTestWhenExists(param) {
116+
var obj = {};
117+
var fruit = Symbol("fruit");
118+
obj[fruit] = "banana";
119+
var retrieved = obj[fruit];
120+
Test.run([
121+
[
122+
"ObjectTests.res",
123+
75,
124+
15,
125+
63
126+
],
127+
"Object.getSymbol when exists return it as Some"
128+
], retrieved, eq, "banana");
129+
}
130+
131+
getSymbolTestWhenExists(undefined);
132+
133+
Test.run([
134+
[
135+
"ObjectTests.res",
136+
84,
137+
13,
138+
65
139+
],
140+
"Object.getSymbol when not exists return it as None"
141+
], ({})[Symbol("fruit")], eq, undefined);
142+
115143
export {
116144
eq ,
117145
runGetTest ,
146+
getSymbolTestWhenExists ,
118147
}
119148
/* Not a pure module */

test/ObjectTests.res

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,26 @@ let runGetTest = i =>
6363
// get: i => i->Object.get("a")->Option.map(i => i->Array.concat([4, 5]))->Option.getWithDefault([]),
6464
// expected: [],
6565
// }->runGetTest
66+
67+
// ===== getSymbol =====
68+
69+
let getSymbolTestWhenExists = () => {
70+
let obj = Object.empty()
71+
let fruit = Symbol.make("fruit")
72+
obj->Object.setSymbol(fruit, "banana")
73+
let retrieved = obj->Object.getSymbol(fruit)
74+
Test.run(
75+
__POS_OF__(`Object.getSymbol when exists return it as Some`),
76+
retrieved,
77+
eq,
78+
Some("banana"),
79+
)
80+
}
81+
getSymbolTestWhenExists()
82+
83+
Test.run(
84+
__POS_OF__(`Object.getSymbol when not exists return it as None`),
85+
Object.empty()->Object.getSymbol(Symbol.make("fruit")),
86+
eq,
87+
None,
88+
)

test/TestSuite.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ var eq = ObjectTests.eq;
3333

3434
var runGetTest = ObjectTests.runGetTest;
3535

36+
var getSymbolTestWhenExists = ObjectTests.getSymbolTestWhenExists;
37+
3638
export {
3739
bign ,
3840
TestError ,
@@ -47,5 +49,6 @@ export {
4749
$$catch ,
4850
eq ,
4951
runGetTest ,
52+
getSymbolTestWhenExists ,
5053
}
5154
/* IntTests Not a pure module */

0 commit comments

Comments
 (0)