--- /dev/null
+function test(actual, expected) {
+ if (actual !== expected)
+ throw new Error('bad value: ' + actual);
+}
+
+(function () {
+ var array = [];
+ var values = 42;
+
+ with (array) {
+ test(values, 42);
+ }
+
+ array[Symbol.unscopables].values = false;
+
+ with (array) {
+ test(values, Array.prototype.values);
+ }
+}());
+
+(function () {
+ var map = new Map();
+ var values = 42;
+
+ with (map) {
+ test(values, Map.prototype.values);
+ }
+
+ map[Symbol.unscopables] = {
+ values: true
+ };
+
+ with (map) {
+ test(values, 42);
+ }
+}());
+
+(function () {
+ var set = new Set();
+ var values = 42;
+
+ with (set) {
+ test(values, Set.prototype.values);
+ }
+
+ set[Symbol.unscopables] = {
+ values: true
+ };
+
+ with (set) {
+ test(values, 42);
+ }
+}());