本文整理汇总了C++中QScriptSyntaxCheckResult::errorLineNumber方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptSyntaxCheckResult::errorLineNumber方法的具体用法?C++ QScriptSyntaxCheckResult::errorLineNumber怎么用?C++ QScriptSyntaxCheckResult::errorLineNumber使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptSyntaxCheckResult
的用法示例。
在下文中一共展示了QScriptSyntaxCheckResult::errorLineNumber方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: js_include
static QScriptValue js_include(QScriptContext *context, QScriptEngine *engine)
{
ARG_COUNT_EXACT(1);
ARG_STRING(0);
// TODO -- implement this somehow -- not sure how to handle paths here
#if 0
QString path = context->argument(0).toString();
UDWORD size;
char *bytes = NULL;
if (!loadFile(path.toAscii().constData(), &bytes, &size))
{
debug(LOG_ERROR, "Failed to read include file \"%s\"", path.toAscii().constData());
return false;
}
QString source = QString::fromAscii(bytes, size);
free(bytes);
QScriptSyntaxCheckResult syntax = QScriptEngine::checkSyntax(source);
if (syntax.state() != QScriptSyntaxCheckResult::Valid)
{
debug(LOG_ERROR, "Syntax error in include %s line %d: %s",
path.toAscii().constData(), syntax.errorLineNumber(), syntax.errorMessage().toAscii().constData());
return false;
}
context->setActivationObject(engine->globalObject());
context->setThisObject(engine->globalObject());
QScriptValue result = engine->evaluate(source, path);
if (engine->hasUncaughtException())
{
int line = engine->uncaughtExceptionLineNumber();
debug(LOG_ERROR, "Uncaught exception at line %d, include file %s: %s",
line, path.toAscii().constData(), result.toString().toAscii().constData());
return false;
}
#endif
return QScriptValue();
}
示例2: AddScript
bool ScriptManager::AddScript(QString script, QString name) {
if(name == "") {
Logger::Get().Error("Cannot add script without name.");
return false;
}
if(HasScript(name)) {
Logger::Get().Error("Cannot add script \"" + name + "\": a script with this name already exists.");
return false;
}
// check the syntax
QScriptSyntaxCheckResult syntax = mScriptEngine->checkSyntax(script);
if(syntax.state() != QScriptSyntaxCheckResult::Valid) {
Logger::Get().Error("Syntax error in script \"" + name + "\" at line "
+ Utils::ToString(syntax.errorLineNumber()) + " column "
+ Utils::ToString(syntax.errorColumnNumber()) + ":");
Logger::Get().Error(" " + syntax.errorMessage());
} else {
Logger::Get().Debug("Adding script \"" + name + "\".");
mScripts[name] = QScriptProgram(script, name);
}
return true;
}
示例3: uploadComplete
void DroneshareUploadDialog::uploadComplete(const QString& jsonResponse)
{
QLOG_DEBUG() << "droneshare: upload success: " << jsonResponse;
m_droneshareUpload->deleteLater();
m_droneshareUpload = NULL;
QScriptSyntaxCheckResult syntaxCheck = QScriptEngine::checkSyntax(jsonResponse);
QScriptEngine engine;
QScriptValue result = engine.evaluate("("+jsonResponse+")");
if (engine.hasUncaughtException()){
QLOG_ERROR() << "Error evaluating version object";
QLOG_ERROR() << "Error @line#" << engine.uncaughtExceptionLineNumber();
QLOG_ERROR() << "Backtrace:" << engine.uncaughtExceptionBacktrace();
QLOG_ERROR() << "Syntax Check:" << syntaxCheck.errorMessage();
QLOG_ERROR() << "Syntax Check line:" << syntaxCheck.errorLineNumber()
<< " col:" << syntaxCheck.errorColumnNumber();
return;
}
QString viewURL = result.property(0).property("viewURL").toString();
ui->statusLabel->setOpenExternalLinks(true);
ui->statusLabel->setText(tr("<html><head/><body><p>Upload Suceeded!<br><a href=\"%1\"><span style=\" text-decoration: underline; color:#0000ff;\">Click to view on Droneshare</span></a></p></body></html>").arg(viewURL));
}
示例4: uploadFailed
void DroneshareUploadDialog::uploadFailed(const QString& jsonResponse, const QString& errorString)
{
QLOG_DEBUG() << "droneshare: upload failed: " << errorString
<< "JSON response:" << jsonResponse;
m_droneshareUpload->deleteLater();
m_droneshareUpload = NULL;
QScriptSyntaxCheckResult syntaxCheck = QScriptEngine::checkSyntax(jsonResponse);
QScriptEngine engine;
QScriptValue result = engine.evaluate("("+jsonResponse+")");
if (engine.hasUncaughtException()){
QLOG_ERROR() << "Error evaluating version object";
QLOG_ERROR() << "Error @line#" << engine.uncaughtExceptionLineNumber();
QLOG_ERROR() << "Backtrace:" << engine.uncaughtExceptionBacktrace();
QLOG_ERROR() << "Syntax Check:" << syntaxCheck.errorMessage();
QLOG_ERROR() << "Syntax Check line:" << syntaxCheck.errorLineNumber()
<< " col:" << syntaxCheck.errorColumnNumber();
return;
}
QString message = result.property("message").toString();
ui->statusLabel->setText(tr("Upload Failed!\n%1").arg(message));
}
示例5: loadPlayerScript
bool loadPlayerScript(QString path, int player, int difficulty)
{
ASSERT_OR_RETURN(false, player < MAX_PLAYERS, "Player index %d out of bounds", player);
QScriptEngine *engine = new QScriptEngine();
UDWORD size;
char *bytes = NULL;
if (!loadFile(path.toAscii().constData(), &bytes, &size))
{
debug(LOG_ERROR, "Failed to read script file \"%s\"", path.toAscii().constData());
return false;
}
QString source = QString::fromAscii(bytes, size);
free(bytes);
QScriptSyntaxCheckResult syntax = QScriptEngine::checkSyntax(source);
ASSERT_OR_RETURN(false, syntax.state() == QScriptSyntaxCheckResult::Valid, "Syntax error in %s line %d: %s",
path.toAscii().constData(), syntax.errorLineNumber(), syntax.errorMessage().toAscii().constData());
// Special functions
engine->globalObject().setProperty("setTimer", engine->newFunction(js_setTimer));
engine->globalObject().setProperty("queue", engine->newFunction(js_queue));
engine->globalObject().setProperty("removeTimer", engine->newFunction(js_removeTimer));
engine->globalObject().setProperty("include", engine->newFunction(js_include));
engine->globalObject().setProperty("bind", engine->newFunction(js_bind));
// Special global variables
//== \item[version] Current version of the game, set in \emph{major.minor} format.
engine->globalObject().setProperty("version", "3.2", QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[selectedPlayer] The player ontrolled by the client on which the script runs.
engine->globalObject().setProperty("selectedPlayer", selectedPlayer, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[gameTime] The current game time. Updated before every invokation of a script.
engine->globalObject().setProperty("gameTime", gameTime, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[difficulty] The currently set campaign difficulty, or the current AI's difficulty setting. It will be one of
//== EASY, MEDIUM, HARD or INSANE.
engine->globalObject().setProperty("difficulty", difficulty, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[mapName] The name of the current map.
engine->globalObject().setProperty("mapName", game.map, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[baseType] The type of base that the game starts with. It will be one of CAMP_CLEAN, CAMP_BASE or CAMP_WALLS.
engine->globalObject().setProperty("baseType", game.base, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[alliancesType] The type of alliances permitted in this game. It will be one of NO_ALLIANCES, ALLIANCES or ALLIANCES_TEAMS.
engine->globalObject().setProperty("alliancesType", game.alliance, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[powerType] The power level set for this game.
engine->globalObject().setProperty("powerType", game.power, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[maxPlayers] The number of active players in this game.
engine->globalObject().setProperty("maxPlayers", game.maxPlayers, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[scavengers] Whether or not scavengers are activated in this game.
engine->globalObject().setProperty("scavengers", game.scavengers, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[mapWidth] Width of map in tiles.
engine->globalObject().setProperty("mapWidth", mapWidth, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[mapHeight] Height of map in tiles.
engine->globalObject().setProperty("mapHeight", mapHeight, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//== \item[scavengerPlayer] Index of scavenger player. (3.2+ only)
engine->globalObject().setProperty("scavengerPlayer", scavengerPlayer(), QScriptValue::ReadOnly | QScriptValue::Undeletable);
// Regular functions
registerFunctions(engine);
// Remember internal, reserved names
QScriptValueIterator it(engine->globalObject());
while (it.hasNext())
{
it.next();
internalNamespace.insert(it.name(), 1);
}
// We need to always save the 'me' special variable.
//== \item[me] The player the script is currently running as.
engine->globalObject().setProperty("me", player, QScriptValue::ReadOnly | QScriptValue::Undeletable);
QScriptValue result = engine->evaluate(source, path);
ASSERT_OR_RETURN(false, !engine->hasUncaughtException(), "Uncaught exception at line %d, file %s: %s",
engine->uncaughtExceptionLineNumber(), path.toAscii().constData(), result.toString().toAscii().constData());
// We also need to save the special 'scriptName' variable.
//== \item[scriptName] Base name of the script that is running.
QFileInfo basename(path);
engine->globalObject().setProperty("scriptName", basename.baseName(), QScriptValue::ReadOnly | QScriptValue::Undeletable);
// Register script
scripts.push_back(engine);
debug(LOG_SAVE, "Created script engine %d for player %d from %s", scripts.size() - 1, player, path.toUtf8().constData());
return true;
}
示例6: loadEntityScript
QScriptValue EntityTreeRenderer::loadEntityScript(EntityItem* entity) {
if (!entity) {
return QScriptValue(); // no entity...
}
// NOTE: we keep local variables for the entityID and the script because
// below in loadScriptContents() it's possible for us to execute the
// application event loop, which may cause our entity to be deleted on
// us. We don't really need access the entity after this point, can
// can accomplish all we need to here with just the script "text" and the ID.
EntityItemID entityID = entity->getEntityItemID();
QString entityScript = entity->getScript();
if (_entityScripts.contains(entityID)) {
EntityScriptDetails details = _entityScripts[entityID];
// check to make sure our script text hasn't changed on us since we last loaded it
if (details.scriptText == entityScript) {
return details.scriptObject; // previously loaded
}
// if we got here, then we previously loaded a script, but the entity's script value
// has changed and so we need to reload it.
_entityScripts.remove(entityID);
}
if (entityScript.isEmpty()) {
return QScriptValue(); // no script
}
bool isURL = false; // loadScriptContents() will tell us if this is a URL or just text.
QString scriptContents = loadScriptContents(entityScript, isURL);
QScriptSyntaxCheckResult syntaxCheck = QScriptEngine::checkSyntax(scriptContents);
if (syntaxCheck.state() != QScriptSyntaxCheckResult::Valid) {
qDebug() << "EntityTreeRenderer::loadEntityScript() entity:" << entityID;
qDebug() << " " << syntaxCheck.errorMessage() << ":"
<< syntaxCheck.errorLineNumber() << syntaxCheck.errorColumnNumber();
qDebug() << " SCRIPT:" << entityScript;
return QScriptValue(); // invalid script
}
if (isURL) {
_entitiesScriptEngine->setParentURL(entity->getScript());
}
QScriptValue entityScriptConstructor = _sandboxScriptEngine->evaluate(scriptContents);
if (!entityScriptConstructor.isFunction()) {
qDebug() << "EntityTreeRenderer::loadEntityScript() entity:" << entityID;
qDebug() << " NOT CONSTRUCTOR";
qDebug() << " SCRIPT:" << entityScript;
return QScriptValue(); // invalid script
} else {
entityScriptConstructor = _entitiesScriptEngine->evaluate(scriptContents);
}
QScriptValue entityScriptObject = entityScriptConstructor.construct();
EntityScriptDetails newDetails = { entityScript, entityScriptObject };
_entityScripts[entityID] = newDetails;
if (isURL) {
_entitiesScriptEngine->setParentURL("");
}
return entityScriptObject; // newly constructed
}
示例7: Load
void JavascriptInstance::Load()
{
PROFILE(JSInstance_Load);
if (!engine_)
CreateEngine();
if (sourceFile.isEmpty() && scriptRefs_.empty())
{
LogError("JavascriptInstance::Load: No script content to load!");
return;
}
// Can't specify both a file source and an Asset API source.
if (!sourceFile.isEmpty() && !scriptRefs_.empty())
{
LogError("JavascriptInstance::Load: Cannot specify both an local input source file and a list of script refs to load!");
return;
}
bool useAssetAPI = !scriptRefs_.empty();
size_t numScripts = useAssetAPI ? scriptRefs_.size() : 1;
// Determine based on code origin whether it can be trusted with system access or not
if (useAssetAPI)
{
trusted_ = true;
for(unsigned i = 0; i < scriptRefs_.size(); ++i)
trusted_ = trusted_ && scriptRefs_[i]->IsTrusted();
}
else // Local file: always trusted.
{
program_ = LoadScript(sourceFile);
trusted_ = true; // This is a file on the local filesystem. We are making an assumption nobody can inject untrusted code here.
// Actually, we are assuming the attacker does not know the absolute location of the asset cache locally here, since if he makes
// the client to load a script into local cache, he could use this code path to automatically load that unsafe script from cache, and make it trusted. -jj.
}
// Check the validity of the syntax in the input.
for (size_t i = 0; i < numScripts; ++i)
{
QString scriptSourceFilename = (useAssetAPI ? scriptRefs_[i]->Name() : sourceFile);
QString &scriptContent = (useAssetAPI ? scriptRefs_[i]->scriptContent : program_);
QScriptSyntaxCheckResult syntaxResult = engine_->checkSyntax(scriptContent);
if (syntaxResult.state() != QScriptSyntaxCheckResult::Valid)
{
LogError("Syntax error in script " + scriptSourceFilename + "," + QString::number(syntaxResult.errorLineNumber()) +
": " + syntaxResult.errorMessage());
// Delete our loaded script content (if any exists).
program_ == "";
}
}
}
示例8: load
void ScriptingAsset::load()
{
if( !isLoaded() )
{
QFile script( file().toLocalFile() );
if( script.open( QIODevice::ReadOnly ) )
{
d->script = script.readAll();
mimeData()->setText( d->script );
}
// Don't attempt to do anything if the script is empty
if( d->script.isEmpty() )
return;
QScriptSyntaxCheckResult result = ScriptingEngine::instance()->registerAsset( this );
if( result.state() != QScriptSyntaxCheckResult::Valid )
{
debug( tr( "Script error %1 (%2,%3): %4" ).arg( fullyQualifiedName() ).arg( result.errorLineNumber() ).arg( result.errorColumnNumber() ).arg( result.errorMessage() ) );
}
else
{
Asset::load();
}
}
}
示例9: testPlayerScript
//.........这里部分代码省略.........
vector.setProperty("isAI", i != 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
vector.setProperty("isHuman", i == 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
playerData.setProperty(i, vector, QScriptValue::ReadOnly | QScriptValue::Undeletable);
}
engine->globalObject().setProperty("playerData", playerData, QScriptValue::ReadOnly | QScriptValue::Undeletable);
// Static map knowledge about start positions
//== \item[derrickPositions] An array of derrick starting positions on the current map. Each item in the array is an
//== object containing the x and y variables for a derrick.
//== \item[startPositions] An array of player start positions on the current map. Each item in the array is an
//== object containing the x and y variables for a player start position.
QScriptValue startPositions = engine->newArray(CUR_PLAYERS);
for (int i = 0; i < CUR_PLAYERS; i++)
{
QScriptValue vector = engine->newObject();
vector.setProperty("x", 40, QScriptValue::ReadOnly | QScriptValue::Undeletable);
vector.setProperty("y", 40, QScriptValue::ReadOnly | QScriptValue::Undeletable);
startPositions.setProperty(i, vector, QScriptValue::ReadOnly | QScriptValue::Undeletable);
}
QScriptValue derrickPositions = engine->newArray(6);
for (int i = 0; i < 6; i++)
{
QScriptValue vector = engine->newObject();
vector.setProperty("x", 40, QScriptValue::ReadOnly | QScriptValue::Undeletable);
vector.setProperty("y", 40, QScriptValue::ReadOnly | QScriptValue::Undeletable);
derrickPositions.setProperty(i, vector, QScriptValue::ReadOnly | QScriptValue::Undeletable);
}
engine->globalObject().setProperty("derrickPositions", derrickPositions, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("startPositions", startPositions, QScriptValue::ReadOnly | QScriptValue::Undeletable);
QScriptSyntaxCheckResult syntax = QScriptEngine::checkSyntax(source);
if (syntax.state() != QScriptSyntaxCheckResult::Valid)
{
qFatal("Syntax error in %s line %d: %s", path.toUtf8().constData(), syntax.errorLineNumber(), syntax.errorMessage().toUtf8().constData());
return false;
}
QScriptValue result = engine->evaluate(source, path);
if (engine->hasUncaughtException())
{
int line = engine->uncaughtExceptionLineNumber();
qFatal("Uncaught exception at line %d, file %s: %s", line, path.toUtf8().constData(), result.toString().toUtf8().constData());
return false;
}
// Call init
callFunction(engine, "eventGameInit", QScriptValueList());
// Now set gameTime to something proper
engine->globalObject().setProperty("gameTime", 10101, QScriptValue::ReadOnly | QScriptValue::Undeletable);
callFunction(engine, "eventStartLevel", QScriptValueList());
callFunction(engine, "eventLaunchTransporter", QScriptValueList());
callFunction(engine, "eventReinforcementsArrived", QScriptValueList());
callFunction(engine, "eventMissionTimeout", QScriptValueList());
callFunction(engine, "eventVideoDone", QScriptValueList());
// Call other events
{
QScriptValueList args;
args += convDroid(engine);
args += convStructure(engine);
callFunction(engine, "eventDroidBuilt", args);
}
{
QScriptValueList args;
args += convStructure(engine);
示例10: main
//.........这里部分代码省略.........
splash->showMessage( QObject::tr("Setting up the main window..."), topRight, Qt::black );
QDir pluginsDirectory( qApp->applicationDirPath() );
pluginsDirectory.cd( "plugins" );
PluginManager pluginManager;
pluginManager.LoadAvailablePlugins( pluginsDirectory );
int exit;
if( argc > 1 )
{
QString tonatiuhFile = argv[1];
QFileInfo fileInfo( tonatiuhFile );
if( fileInfo.completeSuffix() == QLatin1String( "tnhs") )
{
QString fileName( argv[1] );
QFileInfo fileInfo( fileName );
QDir testDirectory( fileInfo.absolutePath() );
testDirectory.cd( "." );
QScriptEngine* interpreter = new QScriptEngine;
qScriptRegisterSequenceMetaType<QVector<QVariant> >(interpreter);
MainWindow* mw = new MainWindow( QLatin1String("") );
mw->SetPluginManager( &pluginManager );
QScriptValue tonatiuh = interpreter->newQObject( mw );
interpreter->globalObject().setProperty( "tonatiuh", tonatiuh );
QFile scriptFile( fileName );
if( !scriptFile.open( QIODevice::ReadOnly) )
{
QString errorMessage = QString( "Cannot open file %1." ).arg( fileName );
std::cerr<<errorMessage.toStdString()<<std::endl;
}
QTextStream in( &scriptFile );
QString program = in.readAll();
scriptFile.close();
QScriptSyntaxCheckResult checkResult = interpreter->checkSyntax( program );
if( checkResult.state() != QScriptSyntaxCheckResult::Valid )
{
QString errorMessage = QString( "Script Syntaxis Error.\n"
"Line: %1. %2" ).arg( QString::number( checkResult.errorLineNumber() ), checkResult.errorMessage () );
std::cerr<<errorMessage.toStdString()<<std::endl;
return -1;
}
QScriptValue result = interpreter->evaluate( program );
if( result.isError () )
{
QScriptValue lineNumber = result.property( "lineNumber");
QString errorMessage = QString( "Script Execution Error.\nLine %1. %2" ).arg( QString::number( lineNumber.toNumber() ), result.toString() );
std::cerr<<errorMessage.toStdString()<<std::endl;
return -1;
}
delete mw;
delete interpreter;
exit = 0;
}
else
{
MainWindow* mw = new MainWindow( tonatiuhFile );
mw->SetPluginManager( &pluginManager );
mw->show();
splash->finish( mw );
delete splash;
exit = a.exec();
delete mw;
}
}
else
{
MainWindow* mw = new MainWindow("");
mw->SetPluginManager( &pluginManager );
mw->show();
splash->finish( mw );
delete splash;
exit = a.exec();
delete mw;
}
return exit;
}
示例11: testPlayerScript
bool testPlayerScript(QString path, int player, int difficulty)
{
QScriptEngine *engine = new QScriptEngine();
QFile input(path);
input.open(QIODevice::ReadOnly);
QString source(QString::fromUtf8(input.readAll()));
input.close();
QScriptSyntaxCheckResult syntax = QScriptEngine::checkSyntax(source);
if (syntax.state() != QScriptSyntaxCheckResult::Valid)
{
fprintf(stderr, "Syntax error in %s line %d: %s\n", path.toAscii().constData(), syntax.errorLineNumber(), syntax.errorMessage().toAscii().constData());
return false;
}
QScriptValue result = engine->evaluate(source, path);
if (engine->hasUncaughtException())
{
int line = engine->uncaughtExceptionLineNumber();
fprintf(stderr, "Uncaught exception at line %d, file %s: %s\n", line, path.toAscii().constData(), result.toString().toAscii().constData());
return false;
}
// Special functions
engine->globalObject().setProperty("setTimer", engine->newFunction(js_setTimer));
engine->globalObject().setProperty("queue", engine->newFunction(js_queue));
engine->globalObject().setProperty("removeTimer", engine->newFunction(js_removeTimer));
engine->globalObject().setProperty("include", engine->newFunction(js_include));
// Special global variables
engine->globalObject().setProperty("me", player, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("gameTime", 2, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("difficulty", difficulty, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("mapName", "Test", QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("baseType", CAMP_BASE, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("alliancesType", ALLIANCES_TEAMS, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("powerType", LEV_MED, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("maxPlayers", 4, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("scavengers", true, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("_", engine->newFunction(js_translate));
// General functions -- geared for use in AI scripts
engine->globalObject().setProperty("debug", engine->newFunction(js_debug));
engine->globalObject().setProperty("console", engine->newFunction(js_console));
engine->globalObject().setProperty("structureIdle", engine->newFunction(js_structureIdle));
engine->globalObject().setProperty("buildDroid", engine->newFunction(js_buildDroid));
engine->globalObject().setProperty("enumStruct", engine->newFunction(js_enumStruct));
engine->globalObject().setProperty("enumDroid", engine->newFunction(js_enumDroid));
engine->globalObject().setProperty("enumGroup", engine->newFunction(js_enumGroup));
engine->globalObject().setProperty("distBetweenTwoPoints", engine->newFunction(js_distBetweenTwoPoints));
engine->globalObject().setProperty("newGroup", engine->newFunction(js_newGroup));
engine->globalObject().setProperty("groupAddArea", engine->newFunction(js_groupAddArea));
engine->globalObject().setProperty("groupAddDroid", engine->newFunction(js_groupAddDroid));
engine->globalObject().setProperty("groupSize", engine->newFunction(js_groupSize));
engine->globalObject().setProperty("orderDroidLoc", engine->newFunction(js_orderDroidLoc));
engine->globalObject().setProperty("playerPower", engine->newFunction(js_playerPower));
engine->globalObject().setProperty("isStructureAvailable", engine->newFunction(js_isStructureAvailable));
// Functions that operate on the current player only
engine->globalObject().setProperty("centreView", engine->newFunction(js_centreView));
engine->globalObject().setProperty("playSound", engine->newFunction(js_playSound));
engine->globalObject().setProperty("gameOverMessage", engine->newFunction(js_gameOverMessage));
// Global state manipulation -- not for use with skirmish AI (unless you want it to cheat, obviously)
engine->globalObject().setProperty("setStructureLimits", engine->newFunction(js_setStructureLimits));
engine->globalObject().setProperty("applyLimitSet", engine->newFunction(js_applyLimitSet));
engine->globalObject().setProperty("setMissionTime", engine->newFunction(js_setMissionTime));
engine->globalObject().setProperty("setReinforcementTime", engine->newFunction(js_setReinforcementTime));
engine->globalObject().setProperty("completeResearch", engine->newFunction(js_completeResearch));
engine->globalObject().setProperty("enableResearch", engine->newFunction(js_enableResearch));
engine->globalObject().setProperty("setPower", engine->newFunction(js_setPower));
engine->globalObject().setProperty("addReticuleButton", engine->newFunction(js_addReticuleButton));
engine->globalObject().setProperty("enableStructure", engine->newFunction(js_enableStructure));
engine->globalObject().setProperty("makeComponentAvailable", engine->newFunction(js_makeComponentAvailable));
engine->globalObject().setProperty("enableComponent", engine->newFunction(js_enableComponent));
engine->globalObject().setProperty("allianceExistsBetween", engine->newFunction(js_allianceExistsBetween));
// Set some useful constants
engine->globalObject().setProperty("DORDER_ATTACK", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("DORDER_MOVE", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("DORDER_SCOUT", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("DORDER_BUILD", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("mapWidth", 64, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("mapHeight", 64, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("COMMAND", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("OPTIONS", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("BUILD", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("MANUFACTURE", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("RESEARCH", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("INTELMAP", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("DESIGN", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("CANCEL", 0, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("CAMP_CLEAN", CAMP_CLEAN, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("CAMP_BASE", CAMP_BASE, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("CAMP_WALLS", CAMP_WALLS, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("NO_ALLIANCES", NO_ALLIANCES, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("ALLIANCES", ALLIANCES, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("ALLIANCES_TEAMS", ALLIANCES_TEAMS, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("BEING_BUILT", SS_BEING_BUILT, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("BUILT", SS_BUILT, QScriptValue::ReadOnly | QScriptValue::Undeletable);
engine->globalObject().setProperty("BEING_DEMOLISHED", SS_BEING_DEMOLISHED, QScriptValue::ReadOnly | QScriptValue::Undeletable);
//.........这里部分代码省略.........
示例12: tests
void ScriptRunner::tests()
{
QFile file(m_testScriptFileName);
if (m_doExit) return;
TestFunctionResult *tf = m_resultLogger->getTestFunctionResult("initTestCase");
if (!tf)
tf = m_resultLogger->createTestFunctionResult("initTestCase");
if(file.open(QIODevice::ReadOnly)) {
QString scriptContent = file.readAll();
if (scriptContent.length() <= 0) {
tf->addError("Can't evaluate empty script from file: '" + m_testScriptFileName +"'");
stop();
return;
}
QScriptSyntaxCheckResult result = QScriptEngine::checkSyntax(scriptContent);
if (result.state() != QScriptSyntaxCheckResult::Valid)
{
QString err = "Can't evaluate script content from file. Check syntax of script on file: '" + m_testScriptFileName +"'"
+ " Error: " + result.errorMessage()
+ " line: " + result.errorLineNumber()
+ " column: " + result.errorColumnNumber();
tf->addError(err);
stop();
return;
}
if (m_doExit) return;
QScriptValue val = m_engine->evaluate(scriptContent, m_testScriptFileName);
if(m_engine->hasUncaughtException()) {
QString err = "Can't evaluate script content from file. Check syntax of script on file: '" + m_testScriptFileName + "'"
+ " Error: " + m_engine->uncaughtExceptionBacktrace().join(" ")
+ " at line " + m_engine->uncaughtExceptionLineNumber();
tf->addError(err);
stop();
return;
}
}
else {
stop();
tf->addError("Failed to read script from file '" + m_testScriptFileName +"'");
return;
}
if (m_doExit) return;
QScriptValue ctor = m_engine->evaluate("Tests");
QScriptValue script = m_engine->newQObject(this, QScriptEngine::QtOwnership);
QScriptValue scripttests = ctor.construct(QScriptValueList() << script);
if(m_engine->hasUncaughtException()) {
QString err = "Can't evaluate script content from file. Check syntax of script on file: '" + m_testScriptFileName +"'"
+ " Error: " + m_engine->uncaughtExceptionBacktrace().join(" ");
tf->addError(err);
stop();
return;
}
}