Files
smart-city-digital-twin-mar…/smart-app-city/frontend/node_modules/is-async-function/test/index.js
Eric FELIXINE e30ae8ed09 feat(smart-app): implement complete mobile app MVP
- App.tsx: full navigation (Auth stack + Main tabs with 5 screens)
- Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen
- HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors
- MapScreen: interactive map with layer toggles (6 layers)
- MarketplaceScreen: categories (6), products (5), search
- ChatScreen: AI chat with quick prompts (4), bot responses
- ProfileScreen: user info, stats, menu (9 items), logout
- AlertsScreen: alert list with severity, acknowledge
- SensorsScreen: sensor list with type filters (6 types), search
- ZonesScreen: zone cards with stats
- SettingsScreen: language picker (FR/EN/ES/DE), privacy, about
- Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n
- Hooks: useSensors, useAlerts, useNotifications, useLocation
- Components: Card, Button, LoadingSpinner, ErrorBoundary, Header
- Services: iotService, notificationService (with axios API client)
- Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN)
- Theme: colors.ts with full design system (Blue Ocean palette)
- Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
2026-06-01 18:00:35 -04:00

92 lines
2.9 KiB
JavaScript

'use strict';
/* globals window */
var test = require('tape');
var isAsyncFunction = require('../index');
var generatorFuncs = require('make-generator-function')();
var asyncFuncs = require('make-async-function').list();
var hasToStringTag = require('has-tostringtag/shams')();
var forEach = require('for-each');
test('returns false for non-functions', function (t) {
var nonFuncs = [
true,
false,
null,
undefined,
{},
[],
/a/g,
'string',
42,
new Date()
];
t.plan(nonFuncs.length);
forEach(nonFuncs, function (nonFunc) {
t.notOk(isAsyncFunction(nonFunc), nonFunc + ' is not a function');
});
t.end();
});
test('returns false for non-async functions', function (t) {
var func = function () {};
t.notOk(isAsyncFunction(func), 'anonymous function is not an async function');
var namedFunc = function foo() {};
t.notOk(isAsyncFunction(namedFunc), 'named function is not an async function');
if (typeof window === 'undefined') {
t.skip('window.alert is not an async function');
} else {
t.notOk(isAsyncFunction(window.alert), 'window.alert is not an async function');
}
t.end();
});
var fakeToString = function () { return 'async function () { return "TOTALLY REAL I SWEAR!"; }'; };
test('returns false for non-async function with faked toString', function (t) {
var func = function () {};
func.toString = fakeToString;
t.notEqual(String(func), Function.prototype.toString.apply(func), 'faked toString is not real toString');
t.notOk(isAsyncFunction(func), 'anonymous function with faked toString is not an async function');
t.end();
});
test('returns false for generator functions', function (t) {
if (generatorFuncs.length > 0) {
forEach(generatorFuncs, function (generatorFunc) {
t.notOk(isAsyncFunction(generatorFunc), generatorFunc + ' is not async function');
});
} else {
t.skip('generator function is not async function - this environment does not support ES6 generator functions. Please use an engine that supports them.');
}
t.end();
});
test('returns false for non-async function with faked @@toStringTag', { skip: !hasToStringTag || asyncFuncs.length === 0 }, function (t) {
var asyncFunc = asyncFuncs[0];
/** @type {{ toString(): unknown; valueOf(): unknown; [Symbol.toStringTag]?: unknown }} */
var fakeAsyncFunction = {
toString: function () { return String(asyncFunc); },
valueOf: function () { return asyncFunc; }
};
fakeAsyncFunction[Symbol.toStringTag] = 'AsyncFunction';
t.notOk(isAsyncFunction(fakeAsyncFunction), 'fake AsyncFunction with @@toStringTag "AsyncFunction" is not an async function');
t.end();
});
test('returns true for async functions', function (t) {
if (asyncFuncs.length > 0) {
forEach(asyncFuncs, function (asyncFunc) {
t.ok(isAsyncFunction(asyncFunc), asyncFunc + ' is async function');
});
} else {
t.skip('async function is async function - this environment does not support ES2018 async functions. Please use an engine that supports them.');
}
t.end();
});