From 22f20cd51daebbeedf98b39ca2e5649051b0a016 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Tue, 7 Apr 2020 00:23:17 +0100 Subject: [PATCH] LibJS: Add String.prototype.toUpperCase() --- Libraries/LibJS/Runtime/StringPrototype.cpp | 9 +++++++++ Libraries/LibJS/Runtime/StringPrototype.h | 1 + .../LibJS/Tests/String.prototype.toLowerCase.js | 5 +++++ .../LibJS/Tests/String.prototype.toUpperCase.js | 16 ++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 Libraries/LibJS/Tests/String.prototype.toUpperCase.js diff --git a/Libraries/LibJS/Runtime/StringPrototype.cpp b/Libraries/LibJS/Runtime/StringPrototype.cpp index c864652c4f..fc0fbf344e 100644 --- a/Libraries/LibJS/Runtime/StringPrototype.cpp +++ b/Libraries/LibJS/Runtime/StringPrototype.cpp @@ -45,6 +45,7 @@ StringPrototype::StringPrototype() put_native_function("startsWith", starts_with, 1); put_native_function("indexOf", index_of, 1); put_native_function("toLowerCase", to_lowercase, 0); + put_native_function("toUpperCase", to_uppercase, 0); } StringPrototype::~StringPrototype() @@ -154,6 +155,14 @@ Value StringPrototype::to_lowercase(Interpreter& interpreter) return js_string(interpreter, string_object->primitive_string()->string().to_lowercase()); } +Value StringPrototype::to_uppercase(Interpreter& interpreter) +{ + auto* string_object = string_object_from(interpreter); + if (!string_object) + return {}; + return js_string(interpreter, string_object->primitive_string()->string().to_uppercase()); +} + Value StringPrototype::length_getter(Interpreter& interpreter) { auto* this_object = interpreter.this_value().to_object(interpreter.heap()); diff --git a/Libraries/LibJS/Runtime/StringPrototype.h b/Libraries/LibJS/Runtime/StringPrototype.h index 979530c5dd..b4982b71f9 100644 --- a/Libraries/LibJS/Runtime/StringPrototype.h +++ b/Libraries/LibJS/Runtime/StringPrototype.h @@ -43,6 +43,7 @@ private: static Value starts_with(Interpreter&); static Value index_of(Interpreter&); static Value to_lowercase(Interpreter&); + static Value to_uppercase(Interpreter&); static Value length_getter(Interpreter&); }; diff --git a/Libraries/LibJS/Tests/String.prototype.toLowerCase.js b/Libraries/LibJS/Tests/String.prototype.toLowerCase.js index 3ebc601e5a..f0969cfaf7 100644 --- a/Libraries/LibJS/Tests/String.prototype.toLowerCase.js +++ b/Libraries/LibJS/Tests/String.prototype.toLowerCase.js @@ -1,4 +1,9 @@ try { + // FIXME: Remove once we have the global String object + var String = { prototype: Object.getPrototypeOf("") }; + + assert(String.prototype.toLowerCase.length === 0); + assert("foo".toLowerCase() === "foo"); assert("Foo".toLowerCase() === "foo"); assert("FOO".toLowerCase() === "foo"); diff --git a/Libraries/LibJS/Tests/String.prototype.toUpperCase.js b/Libraries/LibJS/Tests/String.prototype.toUpperCase.js new file mode 100644 index 0000000000..98dba73e5f --- /dev/null +++ b/Libraries/LibJS/Tests/String.prototype.toUpperCase.js @@ -0,0 +1,16 @@ +try { + // FIXME: Remove once we have the global String object + var String = { prototype: Object.getPrototypeOf("") }; + + assert(String.prototype.toUpperCase.length === 0); + + assert("foo".toUpperCase() === "FOO"); + assert("Foo".toUpperCase() === "FOO"); + assert("FOO".toUpperCase() === "FOO"); + + assert(('b' + 'a' + + 'n' + 'a').toUpperCase() === "BANANA"); + + console.log("PASS"); +} catch (e) { + console.log("FAIL: " + e); +}