(function() {
"use strict";

// Tests for SERVER-20080
//
// Verify that various types cannot be invoked as constructors

var t = db.jstests_type4;
t.drop();
t.insert({});
t.insert({});
t.insert({});

var oldReadMode = db.getMongo().readMode();

assert.throws(function() {
    (new _rand())();
}, [], "invoke constructor on natively injected function");

assert.throws(function() {
    var doc = db.test.findOne();
    new doc();
}, [], "invoke constructor on BSON");

assert.throws(function() {
    db.getMongo().forceReadMode("commands");
    var cursor = t.find();
    cursor.next();

    new cursor._cursor._cursorHandle();
}, [], "invoke constructor on CursorHandle");

assert.throws(function() {
    db.getMongo().forceReadMode("legacy");
    var cursor = t.find();
    cursor.next();

    new cursor._cursor();
}, [], "invoke constructor on Cursor");

db.getMongo().forceReadMode(oldReadMode);
})();
