From 9f4dcd86a73694e8f958b02a778c529275603abf Mon Sep 17 00:00:00 2001 From: Marc Labrecque Date: Sat, 15 Nov 2014 16:26:45 -0500 Subject: [PATCH] Fix isAlien to properly identify built-in functions. Partially fixes #18244 --- _base/lang.js | 2 +- tests/_base/lang.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/_base/lang.js b/_base/lang.js index e544eabc4c..a1e332bc43 100644 --- a/_base/lang.js +++ b/_base/lang.js @@ -307,7 +307,7 @@ define(["./kernel", "../has", "../sniff"], function(dojo, has){ // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't - return it && !lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean + return !!it && lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean }, extend: function(ctor, props){ diff --git a/tests/_base/lang.js b/tests/_base/lang.js index 2f47fc1464..4baf65cf80 100644 --- a/tests/_base/lang.js +++ b/tests/_base/lang.js @@ -356,6 +356,23 @@ define(["doh/main", "dojo/_base/array", "dojo/_base/lang", "dojo/_base/kernel" var s4 = lang.replace("Hello, ${0} ${2}!", ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); t.is("Hello, Robert Cringely!", s4); + }, + + function isAlien(t){ + t.assertTrue(lang.isAlien(isNaN)); + t.assertTrue(lang.isAlien({}.toString)); + t.assertFalse(lang.isAlien(function() {})); + t.assertFalse(lang.isAlien(function() {/* [native code] */})); + t.assertFalse(lang.isAlien({})); + t.assertFalse(lang.isAlien('')); + t.assertFalse(lang.isAlien(0)); + t.assertFalse(lang.isAlien(NaN)); + t.assertFalse(lang.isAlien(null)); + t.assertFalse(lang.isAlien(undefined)); + if(typeof window != "undefined"){ + t.assertTrue(lang.isAlien(window.atob)); + t.assertFalse(lang.isAlien(window)); + } } ] );