예제 #1
0
void tst_QDBusType::isValidBasicType_data()
{
    addColumns();
    addBasicTypes(Valid);
    addVariant(Invalid);
    addInvalidSingleLetterTypes();
}
예제 #2
0
UciEngine::UciEngine(QObject* parent)
	: ChessEngine(parent),
	  m_sendOpponentsName(false)
{
	addVariant("standard");
	setName("UciEngine");
}
예제 #3
0
void Evaluate::addArray(QVariantList &list) {
  m_buffer.append("[");
  for (int i = 0; i < list.length(); i++) {
    if (i > 0)
      m_buffer.append(",");
    addVariant(list[i]);
  }
  m_buffer.append("]");
}
예제 #4
0
void JsonSerializer::addArray(const QVariantList &list) {
  m_buffer.append("[");
  for (int i = 0; i < list.length(); i++) {
    if (i > 0)
      m_buffer.append(",");
    addVariant(list[i]);
  }
  m_buffer.append("]");
}
예제 #5
0
UciEngine::UciEngine(QObject* parent)
	: ChessEngine(parent),
	  m_sendOpponentsName(false),
	  m_canPonder(false),
	  m_ponderState(NotPondering),
	  m_ignoreThinking(false),
	  m_rePing(false)
{
	addVariant("standard");
	setName("UciEngine");
}
예제 #6
0
void Evaluate::addMap(QVariantMap &map) {
  m_buffer.append("{");
  QMapIterator<QString, QVariant> iterator(map);
  while (iterator.hasNext()) {
    iterator.next();
    QString key = iterator.key();
    QVariant value = iterator.value();
    addString(key);
    m_buffer.append(":");
    addVariant(value);
    if (iterator.hasNext())
      m_buffer.append(",");
  }
  m_buffer.append("}");
}
예제 #7
0
static void addSingleSignatures()
{
    addBasicTypes(Valid);
    addVariant(Valid);
    QTest::newRow("struct-1") << "(y)" << true;
    QTest::newRow("struct-2") << "(yy)" << true;
    QTest::newRow("struct-3") << "(yyv)" << true;

    QTest::newRow("struct-nested-1") << "((y))" << true;
    QTest::newRow("struct-nested-2") << "((yy))" << true;
    QTest::newRow("struct-nested-3") << "(y(y))" << true;
    QTest::newRow("struct-nested-4") << "((y)y)" << true;
    QTest::newRow("struct-nested-5") << "(y(y)y)" << true;
    QTest::newRow("struct-nested-6") << "((y)(y))" << true;

    QTest::newRow("array-1") << "as" << true;
    QTest::newRow("struct-array-1") << "(as)" << true;
    QTest::newRow("struct-array-2") << "(yas)" << true;
    QTest::newRow("struct-array-3") << "(asy)" << true;
    QTest::newRow("struct-array-4") << "(yasy)" << true;

    QTest::newRow("dict-1") << "a{sy}" << true;
    QTest::newRow("dict-2") << "a{sv}" << true;
    QTest::newRow("dict-struct-1") << "a{s(y)}" << true;
    QTest::newRow("dict-struct-2") << "a{s(yyyy)}" << true;
    QTest::newRow("dict-struct-array") << "a{s(ay)}" << true;
    QTest::newRow("dict-array") << "a{sas}" << true;
    QTest::newRow("dict-array-struct") << "a{sa(y)}" << true;

    addInvalidSingleLetterTypes();
    QTest::newRow("naked-dict-empty") << "{}" << false;
    QTest::newRow("naked-dict-missing-value") << "{i}" << false;

    QTest::newRow("dict-empty") << "a{}" << false;
    QTest::newRow("dict-missing-value") << "a{i}" << false;
    QTest::newRow("dict-non-basic-key") << "a{vi}" << false;
    QTest::newRow("dict-struct-key") << "a{(y)y}" << false;
    QTest::newRow("dict-missing-close") << "a{sv" << false;
    QTest::newRow("dict-mismatched-close") << "a{sv)" << false;
    QTest::newRow("dict-missing-value-close") << "a{s" << false;

    QTest::newRow("empty-struct") << "()" << false;
    QTest::newRow("struct-missing-close") << "(s" << false;
    QTest::newRow("struct-nested-missing-close-1") << "((s)" << false;
    QTest::newRow("struct-nested-missing-close-2") << "((s" << false;

    QTest::newRow("struct-ending-array-no-element") << "(a)" << false;
}
예제 #8
0
XboardEngine::XboardEngine(QObject* parent)
	: ChessEngine(parent),
	  m_forceMode(false),
	  m_drawOnNextMove(false),
	  m_ftName(false),
	  m_ftPing(false),
	  m_ftSetboard(false),
	  m_ftTime(true),
	  m_ftUsermove(false),
	  m_ftReuse(true),
	  m_ftNps(false),
	  m_gotResult(false),
	  m_lastPing(0),
	  m_notation(Chess::Board::LongAlgebraic),
	  m_initTimer(new QTimer(this))
{
	m_initTimer->setSingleShot(true);
	m_initTimer->setInterval(8000);
	connect(m_initTimer, SIGNAL(timeout()), this, SLOT(initialize()));

	addVariant("standard");
	setName("XboardEngine");
}
void addVariant(int pid, int varLocInRef, char *p)
{
    if (debug == 2) printf("addVariant %d %d %s\n", pid, varLocInRef, p);
    if (pid >= numT) fatal("addVariant Pid=%d >= number of threads %d\n", pid, numT);
    char s1[100];
    if (p[0] == '+' || (strlen(p) == 1 && p[0] != 'D')) {
	s1[0] = refseq[pid][varLocInRef];
	s1[1]= 0;
	if (p[0] == '+') {
	    p[0] = s1[0]; 
	    if (debug) printf("Insertion:%s\t%s\t%c%c%c\n", s1, p, refseq[pid][varLocInRef+1], refseq[pid][varLocInRef+2], refseq[pid][varLocInRef+3]);
	}
    } else { // ##D
	int x = atoi(p);
	if (x == 0) x = 1;
	strncpy(s1, refseq[pid]+varLocInRef, x+1);
	s1[x+1] = 0;
	p[0] = s1[0];
	p[1] = 0; 
	if (debug) printf("deletion:%s\t%s\n", s1, p);
    }	
    addVariant(pid, varLocInRef, p, s1);
}
예제 #10
0
void XboardEngine::setFeature(const QString& name, const QString& val)
{
	if (name == "ping")
		m_ftPing = (val == "1");
	else if (name == "setboard")
		m_ftSetboard = (val == "1");
	else if (name == "san")
	{
		if (val == "1")
			m_notation = Chess::Board::StandardAlgebraic;
		else
			m_notation = Chess::Board::LongAlgebraic;
	}
	else if (name == "usermove")
		m_ftUsermove = (val == "1");
	else if (name == "nps")
		m_ftNps = (val == "1");
	else if (name == "time")
		m_ftTime = (val == "1");
	else if (name == "reuse")
		m_ftReuse = (val == "1");
	else if (name == "myname")
	{
		if (this->name() == "XboardEngine")
			setName(val);
	}
	else if (name == "variants")
	{
		clearVariants();
		QStringList variants = val.split(',');
		foreach (const QString& str, variants)
		{
			QString variant = variantFromXboard(str.trimmed());
			if (!variant.isEmpty())
				addVariant(variant);
		}
예제 #11
0
void UciEngine::parseLine(const QString& line)
{
	const QStringRef command(firstToken(line));

	if (command == "info")
	{
		parseInfo(command);
	}
	else if (command == "bestmove")
	{
		if (state() != Thinking)
		{
			if (state() == FinishingGame)
				pong();
			else
				qDebug() << "Unexpected move from" << name();
			return;
		}

		QString moveString(nextToken(command).toString());
		m_moveStrings += " " + moveString;
		Chess::Move move = board()->moveFromString(moveString);

		if (!move.isNull())
			emitMove(move);
		else
			forfeit(Chess::Result::IllegalMove, moveString);
	}
	else if (command == "readyok")
	{
		pong();
	}
	else if (command == "uciok")
	{
		if (state() == Starting)
		{
			onProtocolStart();
			ping();
		}
	}
	else if (command == "id")
	{
		QStringRef tag(nextToken(command));
		if (tag == "name" && name() == "UciEngine")
			setName(nextToken(tag, true).toString());
	}
	else if (command == "registration")
	{
		if (nextToken(command) == "error")
		{
			qDebug("Failed to register UCI engine %s", qPrintable(name()));
			write("register later");
		}
	}
	else if (command == "option")
	{
		EngineOption* option = parseOption(command);
		QString variant;

		if (option == 0 || !option->isValid())
			qDebug("Invalid UCI option from %s: %s",
				qPrintable(name()), qPrintable(line));
		else if (!(variant = variantFromUci(option->name())).isEmpty())
			addVariant(variant);
		else if (option->name() == "UCI_Opponent")
			m_sendOpponentsName = true;
		else if (option->name() == "Ponder"
		     ||  (option->name().startsWith("UCI_") &&
			  option->name() != "UCI_LimitStrength" &&
			  option->name() != "UCI_Elo"))
		{
			// TODO: Deal with UCI features
		}
		else
		{
			addOption(option);
			return;
		}

		delete option;
	}
}
예제 #12
0
void Evaluate::start() {
  QVariant result = page()->currentFrame()->evaluateJavaScript(arguments()[0]);
  addVariant(result);
  emit finished(new Response(true, m_buffer));
}
예제 #13
0
void Evaluate::start(QStringList &arguments) {
  QVariant result = page()->mainFrame()->evaluateJavaScript(arguments[0]);
  addVariant(result);
  emit finished(true, m_buffer);
}
예제 #14
0
QByteArray JsonSerializer::serialize(const QVariant &object) {
  addVariant(object);
  return m_buffer;
}