// String.prototype.iterator is generic. load(libdir + "asserts.js"); load(libdir + "iteration.js"); load(libdir + "string.js"); function test(obj) { var it = String.prototype[Symbol.iterator].call(obj); var s = String(obj); for (var i = 0, length = s.length; i < length;) { var r = s[i++]; if (isHighSurrogate(r) && i < length && isLowSurrogate(s[i])) { r += s[i++]; } assertIteratorNext(it, r); } assertIteratorDone(it, undefined); } test({toString: () => ""}); test({toString: () => "xyz"}); test({toString: () => "\ud808\udf45"}); test({valueOf: () => ""}); test({valueOf: () => "xyz"}); test({valueOf: () => "\ud808\udf45"});