/** * Validate auto complete works for various javascript types implemented by C++. * @tags: [ * # TODO SERVER-77024: Shell collection creation are broken when name is a js property identifier * assumes_no_implicit_collection_creation_on_get_collection * ] */ function testAutoComplete(prefix) { // This method updates a global object with an array of strings on success. shellAutocomplete(prefix); return __autocomplete__; } // eslint-disable-next-line db = db.getSiblingDB("test_autocomplete"); // Create a collection. db.auto_complete_coll.insert({}); // Validate DB auto completion. const db_stuff = testAutoComplete("db."); print(db_stuff); // Verify we enumerate built-in methods. assert.contains("db.prototype", db_stuff); assert.contains("db.hasOwnProperty", db_stuff); assert.contains("db.toString(", db_stuff); // Verify we have some methods we added. assert.contains("db.adminCommand(", db_stuff); assert.contains("db.runCommand(", db_stuff); assert.contains("db.watch(", db_stuff); // Verify we enumerate collections. assert.contains("db.auto_complete_coll", db_stuff); // Validate Collection autocompletion. const coll_stuff = testAutoComplete("db.auto_complete_coll."); // Verify we enumerate built-in methods. assert.contains("db.auto_complete_coll.prototype", coll_stuff); assert.contains("db.auto_complete_coll.hasOwnProperty", coll_stuff); assert.contains("db.auto_complete_coll.toString(", coll_stuff); // Verify we have some methods we added. assert.contains("db.auto_complete_coll.aggregate(", coll_stuff); assert.contains("db.auto_complete_coll.runCommand(", coll_stuff); // Validate autocompletion when prefix is specified. const empty_stuff = testAutoComplete(""); assert.contains("Array(", empty_stuff); assert.contains("print(", empty_stuff); assert.contains("ErrorCodes", empty_stuff); // Validate autocompletion returns ErrorCodes when ErrorCodes is specified. const error_codes_autocomplete = testAutoComplete("ErrorCodes."); assert.contains("ErrorCodes.BadValue", error_codes_autocomplete);