{"action":"created","comment":{"url":"https://api.github.com/repos/qreal/qreal/pulls/comments/51584787","id":51584787,"diff_hunk":"@@ -0,0 +1,337 @@\n+/* Copyright 2015 QReal Research Group\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License. */\n+\n+#include <QtTest/QTest>\n+#include <QtCore/QDebug>\n+#include <QtWidgets/QRadioButton>\n+#include <QtCore/QPropertyAnimation>\n+#include <QtGui/QWidgetList>\n+#include <QtWidgets/QApplication>\n+#include <QtWidgets/QComboBox>\n+\n+#include <qrkernel/exception/exception.h>\n+#include <qrutils/inFile.h>\n+#include <editor/editorView.h>\n+#include <models/commands/createElementCommand.h>\n+\n+#include \"qrgui/mainWindow/mainWindow.h\"\n+#include \"qrgui/mainWindow/palette/draggableElement.h\"\n+\n+#include \"qrgui/mainWindow/scriptAPI/scriptAPI.h\"\n+#include \"qrgui/mainWindow/scriptAPI/utils.h\"\n+#include \"qrgui/mainWindow/scriptAPI/guiFacade.h\"\n+#include \"qrgui/mainWindow/scriptAPI/virtualCursor.h\"\n+#include \"qrgui/mainWindow/scriptAPI/virtualKeyboard.h\"\n+#include \"qrgui/mainWindow/scriptAPI/hintAPI.h\"\n+#include \"qrgui/mainWindow/scriptAPI/sceneAPI.h\"\n+#include \"qrgui/mainWindow/scriptAPI/paletteAPI.h\"\n+\n+using namespace qReal;\n+using namespace gui;\n+\n+Utils::Utils(ScriptAPI &scriptAPI, MainWindow &mainWindow, VirtualCursor &virtualCursor, HintAPI &hintAPI)\n+\t: mScriptAPI(scriptAPI)\n+\t, mMainWindow(mainWindow)\n+\t, mVirtualCursor(virtualCursor)\n+\t, mHintAPI(hintAPI)\n+{\n+}\n+\n+void Utils::activateMenu(QMenu *menu)\n+{\n+\tif (menu == nullptr) {\n+\t\tthrowScriptException(\"Utils::activateMenu: (menu == nullptr)\");\n+\t}\n+\n+\tQTest::keyClick(&mMainWindow, menu->title().at(1).toLatin1(), Qt::AltModifier);\n+}\n+\n+void Utils::activateMenuAction(QMenu *menu, QAction *actionForExec)\n+{\n+\tif (menu == nullptr) {\n+\t\tthrowScriptException(\"Utils::activateMenuAction: (menu == nullptr)\");\n+\t}\n+\n+\tfor (const QAction *action : menu->actions()) {\n+\t\tif (action == actionForExec) {\n+\t\t\tQTest::keyClick(menu, Qt::Key_Enter);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (!action->isSeparator()) {\n+\t\t\tQTest::qWait(25);\n+\t\t\tQTest::keyClick(menu, Qt::Key_Down);\n+\t\t\tQTest::qWait(25);\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"doesnt exist \" + actionForExec->objectName() + \" \" + actionForExec->text() + \" action\");\n+}\n+\n+void Utils::fillLineEdit(const QString &widgetName, const QString &lineEditObjectName, const QString &text)\n+{\n+\tdoSmthInWidget(widgetName, lineEditObjectName, text, &Utils::writeIn);\n+}\n+\n+void Utils::clickButton(const QString &widgetName, const QString &buttonType, const QString &buttonText)\n+{\n+\tdoSmthInWidget(widgetName, buttonType, buttonText, &Utils::clickNeededButton);\n+}\n+\n+void Utils::chooseComboBoxItem(const QString &widgetName, const QString &comboBoxObjectName, const QString &itemName)\n+{\n+\tdoSmthInWidget(widgetName, comboBoxObjectName, itemName, &Utils::pickNeededItem);\n+}\n+\n+void Utils::activateContextMenuAction(const QString &actionName)\n+{\n+\tQMenu *contextMenu = dynamic_cast<QMenu *>(QApplication::activePopupWidget());\n+\tQTest::keyClick(contextMenu, Qt::Key_Down);\n+\tif (contextMenu == nullptr) {\n+\t\tthrowScriptException(\"Utils::activateContextMenuAction: contextMenu == nullptr\");\n+\t}\n+\n+\tQList<QAction *> actions = contextMenu->actions();\n+\tQAction *neededAction = nullptr;\n+\tfor (QAction *action: actions) {\n+\t\tif (action->objectName() == actionName || action->text() == actionName) {\n+\t\t\tneededAction = action;\n+\t\t}\n+\t}\n+\n+\tif (neededAction == nullptr) {\n+\t\tthrowScriptException(\"Utils::activateContextMenuAction: neededAction == nullptr\");\n+\t}\n+\n+\tfor (const QAction *action : actions) {\n+\t\tif (action == neededAction) {\n+\t\t\tQTest::keyClick(contextMenu, Qt::Key_Enter);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (!action->isSeparator()) {\n+\t\t\tQTest::qWait(50);\n+\t\t\tQTest::keyClick(contextMenu, Qt::Key_Down);\n+\t\t}\n+\t}\n+}\n+\n+void Utils::closeContextMenu()\n+{\n+\tQMenu *contextMenu = dynamic_cast<QMenu *>(QApplication::activePopupWidget());\n+\tif (!contextMenu) {\n+\t\tthrowScriptException(\"Utils::closeContextMenu: contextMenu == nullptr\");\n+\t}\n+\n+\tQTest::keyClick(contextMenu, Qt::Key_Escape);\n+}\n+\n+QRect Utils::actionRect(const QMenu *menu, QAction *action) const\n+{\n+\treturn menu->actionGeometry(action);\n+}\n+\n+QPoint Utils::topLeftWidgetCorner(const QWidget *widget) const\n+{\n+\treturn widget->pos();\n+}\n+\n+int Utils::length(const QStringList &list) const\n+{\n+\treturn list.length();\n+}\n+\n+bool Utils::isEnabledAndVisible(const QAction *action) const\n+{\n+\treturn action->isEnabled() && action->isVisible();\n+}\n+\n+bool Utils::isEnabledAndVisible(const QWidget *widget) const\n+{\n+\treturn widget->isEnabled() && widget->isVisible();\n+}\n+\n+bool Utils::actionIsChecked(const QAction *action) const\n+{\n+\treturn action->isChecked();\n+}\n+\n+bool Utils::actionIsCheckable(const QAction *action) const\n+{\n+\treturn action->isCheckable();\n+}\n+\n+void Utils::printPaletteElementsInfo() const\n+{\n+\tQList<DraggableElement *> const paletteWidgets = mMainWindow.findChildren<DraggableElement *>();\n+\tfor (DraggableElement * const paletteElement : paletteWidgets) {\n+\t\tpaletteElement->id().toString();\n+\t}\n+}\n+\n+void Utils::writeIn(QWidget *widget, const QString &lineEditObjectName, const QString &text) const\n+{\n+\tconst QList<QLineEdit *> lineEditList = widget->findChildren<QLineEdit *>(QString(), Qt::FindChildrenRecursively);\n+\tfor (QLineEdit * lineEdit : lineEditList) {\n+\t\tif (((!lineEditObjectName.isEmpty() && lineEdit->objectName() == lineEditObjectName)\n+\t\t\t\t|| lineEditObjectName.isEmpty()) && lineEdit->isEnabled()) {\n+\t\t\tQTest::mouseClick(lineEdit, Qt::LeftButton);\n+\t\t\tQTest::keyClicks(lineEdit, text, Qt::NoModifier, 20);\n+\t\t\tif (text != lineEdit->text()) {\n+\t\t\t\tthrowScriptException(\"Utils::writeIn: '\" + text + \"' != '\" + lineEdit->text() + \"'\");\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"QLineEdit with \" + lineEditObjectName + \" objectName was not found\");\n+}\n+\n+void Utils::clickNeededButton(QWidget *widget, const QString &buttonType, const QString &buttonText) const\n+{\n+\tenum class Button { PUSHBUTTON = 1, RADIOBUTTON, CHECKBUTTON };\n+\tQMap<QString, Button> map;\n+\n+\tmap[\"QPushButton\"] = Button::PUSHBUTTON;\n+\tmap[\"QRadioButton\"] = Button::RADIOBUTTON;\n+\tmap[\"QCheckBox\"] = Button::CHECKBUTTON;\n+\n+\tif (!map.contains(buttonType)) {\n+\t\tthrowScriptException(\"Utils::clickButton: needed type: '\" + buttonType + \"' was not found\");\n+\t\treturn;\n+\t}\n+\n+\tswitch (map.value(buttonType))\n+\t{\n+\t\tcase Button::PUSHBUTTON:\n+\t\t\tclickPushButton(widget, buttonText);\n+\t\t\tbreak;\n+\t\tcase Button::RADIOBUTTON:\n+\t\t\tclickRadioButton(widget, buttonText);\n+\t\t\tbreak;\n+\t\tcase Button::CHECKBUTTON:\n+\t\t\tclickCheckBox(widget, buttonText);\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t// check enum, map, switch. we should not be here!\n+\t\t\tqWarning() << \"Utils::clickNeededButton: we should not be in default of a switch!\";\n+\t}\n+}\n+\n+void Utils::pickNeededItem(QWidget *widget, const QString &comboBoxObjectName, const QString &itemName) const\n+{\n+\tconst QList<QComboBox *> boxList =\n+\t\t\twidget->findChildren<QComboBox *>(QString(), Qt::FindChildrenRecursively);\n+\tfor (QComboBox *box : boxList) {\n+\t\tif (box->objectName() == comboBoxObjectName && box->isEnabled() && box->isVisible()) {\n+\t\t\tQTest::mouseClick(box, Qt::LeftButton);\n+\t\t\tint currentIndex = box->currentIndex();\n+\t\t\tif (currentIndex == -1) {\n+\t\t\t\tthrowScriptException(QString(\"Utils::pickNeededItem: \") + \"box->currentIndex() == -1\");\n+\t\t\t}\n+\n+\t\t\tint neededIndex = box->findText(itemName, Qt::MatchExactly | Qt::MatchCaseSensitive);\n+\t\t\tif (neededIndex == -1) {\n+\t\t\t\tthrowScriptException(QString(\"Utils::pickNeededItem: \") + \"neededIndex == -1\");\n+\t\t\t}\n+\n+\t\t\tQt::Key\tkey = (currentIndex >= neededIndex) ? Qt::Key_Up : Qt::Key_Down;\n+\t\t\tint direction = (key == Qt::Key_Up) ? 1 : -1;\n+\t\t\tfor (int i = currentIndex; i != neededIndex;) {\n+\t\t\t\tQTest::keyClick(box, key);\n+\t\t\t\ti -= direction;\n+\t\t\t}\n+\n+\t\t\tQTest::keyClick(box, Qt::Key_Enter);\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"QComboBox with \" + comboBoxObjectName + \"objectName was not found\");\n+}\n+\n+void Utils::clickPushButton(QWidget *widget, const QString &buttonText) const\n+{\n+\tconst QList<QPushButton *> buttonList =\n+\t\t\twidget->findChildren<QPushButton *>(QString(), Qt::FindChildrenRecursively);\n+\tfor (QPushButton * button : buttonList) {\n+\t\tif ((button->text() == buttonText || button->objectName() == buttonText)\n+\t\t\t\t&& button->isVisible() && button->isEnabled()) {\n+\t\t\tQTest::mouseClick(button, Qt::LeftButton);\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"QPushButton (\" + buttonText + \") was not found\");\n+}\n+\n+void Utils::clickRadioButton(QWidget *widget, const QString &buttonText) const\n+{\n+\tconst QList<QRadioButton *> buttonList =\n+\t\t\twidget->findChildren<QRadioButton *>(QString(), Qt::FindChildrenRecursively);\n+\tfor (QRadioButton * button : buttonList) {\n+\t\tif (((button->text() == buttonText || button->objectName() == buttonText))\n+\t\t\t&& button->isVisible() && button->isEnabled()) {\n+\t\t\tQTest::mouseClick(button, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));\n+\t\t\tif (!button->isChecked()) {\n+\t\t\t\tthrowScriptException(\"Utils::clickRadioButton: !button->isChecked()\");\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"QRadioButton (\" + buttonText + \") was not found\");\n+}\n+\n+void Utils::clickCheckBox(QWidget *widget, const QString &buttonText) const\n+{\n+\tconst QList<QCheckBox *> buttonList =\n+\t\t\twidget->findChildren<QCheckBox *>(QString(), Qt::FindChildrenRecursively);\n+\tfor (QCheckBox * button : buttonList) {\n+\t\tif ((button->text() == buttonText || button->objectName() == buttonText)\n+\t\t\t\t&& button->isVisible() && button->isEnabled()) {\n+\t\t\tbool isChecked = button->isChecked();\n+\t\t\tQTest::mouseClick(button, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));\n+\t\t\tif (button->isChecked() == isChecked) {\n+\t\t\t\t\tthrowScriptException(\"Utils::clickCheckBox: button->isChecked() == isChecked\");\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\t}\n+\n+\tthrowScriptException(\"QCheckBox (\" + buttonText + \") was not found\");\n+}\n+\n+void Utils::throwScriptException(const QString &msg) const\n+{\n+\tmScriptAPI.getEngine()->currentContext()->throwError(msg);\n+}\n+\n+void Utils::doSmthInWidget(const QString &widgetName, const QString &identifier\n+\t\t, const QString &associatedAction\n+\t\t, std::function<void(const Utils &, QWidget *, const QString &, const QString &)> doAction) const\n+{\n+\tQList<QWidget *> allWidgets = mMainWindow.findChildren<QWidget *>();","path":"qrgui/mainWindow/scriptAPI/utils.cpp","position":328,"original_position":328,"commit_id":"32ef8ec69b3b9c5323b50382f8314e669b13dfbe","original_commit_id":"32ef8ec69b3b9c5323b50382f8314e669b13dfbe","user":{"login":"dvvrd","id":734254,"avatar_url":"https://avatars.githubusercontent.com/u/734254?v=3","gravatar_id":"","url":"https://api.github.com/users/dvvrd","html_url":"https://github.com/dvvrd","followers_url":"https://api.github.com/users/dvvrd/followers","following_url":"https://api.github.com/users/dvvrd/following{/other_user}","gists_url":"https://api.github.com/users/dvvrd/gists{/gist_id}","starred_url":"https://api.github.com/users/dvvrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dvvrd/subscriptions","organizations_url":"https://api.github.com/users/dvvrd/orgs","repos_url":"https://api.github.com/users/dvvrd/repos","events_url":"https://api.github.com/users/dvvrd/events{/privacy}","received_events_url":"https://api.github.com/users/dvvrd/received_events","type":"User","site_admin":false},"body":"const","created_at":"2016-02-02T15:38:45Z","updated_at":"2016-02-02T15:38:45Z","html_url":"https://github.com/qreal/qreal/pull/1607#discussion_r51584787","pull_request_url":"https://api.github.com/repos/qreal/qreal/pulls/1607","_links":{"self":{"href":"https://api.github.com/repos/qreal/qreal/pulls/comments/51584787"},"html":{"href":"https://github.com/qreal/qreal/pull/1607#discussion_r51584787"},"pull_request":{"href":"https://api.github.com/repos/qreal/qreal/pulls/1607"}}},"pull_request":{"url":"https://api.github.com/repos/qreal/qreal/pulls/1607","id":45686929,"html_url":"https://github.com/qreal/qreal/pull/1607","diff_url":"https://github.com/qreal/qreal/pull/1607.diff","patch_url":"https://github.com/qreal/qreal/pull/1607.patch","issue_url":"https://api.github.com/repos/qreal/qreal/issues/1607","number":1607,"state":"open","locked":false,"title":"improved ScriptAPI + implemented guiTests + test coverage statistic program done","user":{"login":"Kirill-NiK","id":1159821,"avatar_url":"https://avatars.githubusercontent.com/u/1159821?v=3","gravatar_id":"","url":"https://api.github.com/users/Kirill-NiK","html_url":"https://github.com/Kirill-NiK","followers_url":"https://api.github.com/users/Kirill-NiK/followers","following_url":"https://api.github.com/users/Kirill-NiK/following{/other_user}","gists_url":"https://api.github.com/users/Kirill-NiK/gists{/gist_id}","starred_url":"https://api.github.com/users/Kirill-NiK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kirill-NiK/subscriptions","organizations_url":"https://api.github.com/users/Kirill-NiK/orgs","repos_url":"https://api.github.com/users/Kirill-NiK/repos","events_url":"https://api.github.com/users/Kirill-NiK/events{/privacy}","received_events_url":"https://api.github.com/users/Kirill-NiK/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-22T16:39:14Z","updated_at":"2016-02-02T15:38:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7920999ceba3e46bc4b2773f03a7cc8e907f42cb","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/qreal/qreal/pulls/1607/commits","review_comments_url":"https://api.github.com/repos/qreal/qreal/pulls/1607/comments","review_comment_url":"https://api.github.com/repos/qreal/qreal/pulls/comments{/number}","comments_url":"https://api.github.com/repos/qreal/qreal/issues/1607/comments","statuses_url":"https://api.github.com/repos/qreal/qreal/statuses/32ef8ec69b3b9c5323b50382f8314e669b13dfbe","head":{"label":"Kirill-NiK:master","ref":"master","sha":"32ef8ec69b3b9c5323b50382f8314e669b13dfbe","user":{"login":"Kirill-NiK","id":1159821,"avatar_url":"https://avatars.githubusercontent.com/u/1159821?v=3","gravatar_id":"","url":"https://api.github.com/users/Kirill-NiK","html_url":"https://github.com/Kirill-NiK","followers_url":"https://api.github.com/users/Kirill-NiK/followers","following_url":"https://api.github.com/users/Kirill-NiK/following{/other_user}","gists_url":"https://api.github.com/users/Kirill-NiK/gists{/gist_id}","starred_url":"https://api.github.com/users/Kirill-NiK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kirill-NiK/subscriptions","organizations_url":"https://api.github.com/users/Kirill-NiK/orgs","repos_url":"https://api.github.com/users/Kirill-NiK/repos","events_url":"https://api.github.com/users/Kirill-NiK/events{/privacy}","received_events_url":"https://api.github.com/users/Kirill-NiK/received_events","type":"User","site_admin":false},"repo":{"id":39894481,"name":"qreal","full_name":"Kirill-NiK/qreal","owner":{"login":"Kirill-NiK","id":1159821,"avatar_url":"https://avatars.githubusercontent.com/u/1159821?v=3","gravatar_id":"","url":"https://api.github.com/users/Kirill-NiK","html_url":"https://github.com/Kirill-NiK","followers_url":"https://api.github.com/users/Kirill-NiK/followers","following_url":"https://api.github.com/users/Kirill-NiK/following{/other_user}","gists_url":"https://api.github.com/users/Kirill-NiK/gists{/gist_id}","starred_url":"https://api.github.com/users/Kirill-NiK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kirill-NiK/subscriptions","organizations_url":"https://api.github.com/users/Kirill-NiK/orgs","repos_url":"https://api.github.com/users/Kirill-NiK/repos","events_url":"https://api.github.com/users/Kirill-NiK/events{/privacy}","received_events_url":"https://api.github.com/users/Kirill-NiK/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Kirill-NiK/qreal","description":"CASE and metaCASE system","fork":true,"url":"https://api.github.com/repos/Kirill-NiK/qreal","forks_url":"https://api.github.com/repos/Kirill-NiK/qreal/forks","keys_url":"https://api.github.com/repos/Kirill-NiK/qreal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kirill-NiK/qreal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kirill-NiK/qreal/teams","hooks_url":"https://api.github.com/repos/Kirill-NiK/qreal/hooks","issue_events_url":"https://api.github.com/repos/Kirill-NiK/qreal/issues/events{/number}","events_url":"https://api.github.com/repos/Kirill-NiK/qreal/events","assignees_url":"https://api.github.com/repos/Kirill-NiK/qreal/assignees{/user}","branches_url":"https://api.github.com/repos/Kirill-NiK/qreal/branches{/branch}","tags_url":"https://api.github.com/repos/Kirill-NiK/qreal/tags","blobs_url":"https://api.github.com/repos/Kirill-NiK/qreal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kirill-NiK/qreal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kirill-NiK/qreal/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kirill-NiK/qreal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kirill-NiK/qreal/statuses/{sha}","languages_url":"https://api.github.com/repos/Kirill-NiK/qreal/languages","stargazers_url":"https://api.github.com/repos/Kirill-NiK/qreal/stargazers","contributors_url":"https://api.github.com/repos/Kirill-NiK/qreal/contributors","subscribers_url":"https://api.github.com/repos/Kirill-NiK/qreal/subscribers","subscription_url":"https://api.github.com/repos/Kirill-NiK/qreal/subscription","commits_url":"https://api.github.com/repos/Kirill-NiK/qreal/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kirill-NiK/qreal/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kirill-NiK/qreal/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kirill-NiK/qreal/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kirill-NiK/qreal/contents/{+path}","compare_url":"https://api.github.com/repos/Kirill-NiK/qreal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kirill-NiK/qreal/merges","archive_url":"https://api.github.com/repos/Kirill-NiK/qreal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kirill-NiK/qreal/downloads","issues_url":"https://api.github.com/repos/Kirill-NiK/qreal/issues{/number}","pulls_url":"https://api.github.com/repos/Kirill-NiK/qreal/pulls{/number}","milestones_url":"https://api.github.com/repos/Kirill-NiK/qreal/milestones{/number}","notifications_url":"https://api.github.com/repos/Kirill-NiK/qreal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kirill-NiK/qreal/labels{/name}","releases_url":"https://api.github.com/repos/Kirill-NiK/qreal/releases{/id}","deployments_url":"https://api.github.com/repos/Kirill-NiK/qreal/deployments","created_at":"2015-07-29T13:21:10Z","updated_at":"2015-07-29T13:21:18Z","pushed_at":"2015-09-22T16:34:56Z","git_url":"git://github.com/Kirill-NiK/qreal.git","ssh_url":"git@github.com:Kirill-NiK/qreal.git","clone_url":"https://github.com/Kirill-NiK/qreal.git","svn_url":"https://github.com/Kirill-NiK/qreal","homepage":"","size":114215,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"qreal:master","ref":"master","sha":"ee23c77268daac1168d216d8c164887053698cf3","user":{"login":"qreal","id":706806,"avatar_url":"https://avatars.githubusercontent.com/u/706806?v=3","gravatar_id":"","url":"https://api.github.com/users/qreal","html_url":"https://github.com/qreal","followers_url":"https://api.github.com/users/qreal/followers","following_url":"https://api.github.com/users/qreal/following{/other_user}","gists_url":"https://api.github.com/users/qreal/gists{/gist_id}","starred_url":"https://api.github.com/users/qreal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qreal/subscriptions","organizations_url":"https://api.github.com/users/qreal/orgs","repos_url":"https://api.github.com/users/qreal/repos","events_url":"https://api.github.com/users/qreal/events{/privacy}","received_events_url":"https://api.github.com/users/qreal/received_events","type":"Organization","site_admin":false},"repo":{"id":1563281,"name":"qreal","full_name":"qreal/qreal","owner":{"login":"qreal","id":706806,"avatar_url":"https://avatars.githubusercontent.com/u/706806?v=3","gravatar_id":"","url":"https://api.github.com/users/qreal","html_url":"https://github.com/qreal","followers_url":"https://api.github.com/users/qreal/followers","following_url":"https://api.github.com/users/qreal/following{/other_user}","gists_url":"https://api.github.com/users/qreal/gists{/gist_id}","starred_url":"https://api.github.com/users/qreal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qreal/subscriptions","organizations_url":"https://api.github.com/users/qreal/orgs","repos_url":"https://api.github.com/users/qreal/repos","events_url":"https://api.github.com/users/qreal/events{/privacy}","received_events_url":"https://api.github.com/users/qreal/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/qreal/qreal","description":"CASE and metaCASE system","fork":false,"url":"https://api.github.com/repos/qreal/qreal","forks_url":"https://api.github.com/repos/qreal/qreal/forks","keys_url":"https://api.github.com/repos/qreal/qreal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qreal/qreal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qreal/qreal/teams","hooks_url":"https://api.github.com/repos/qreal/qreal/hooks","issue_events_url":"https://api.github.com/repos/qreal/qreal/issues/events{/number}","events_url":"https://api.github.com/repos/qreal/qreal/events","assignees_url":"https://api.github.com/repos/qreal/qreal/assignees{/user}","branches_url":"https://api.github.com/repos/qreal/qreal/branches{/branch}","tags_url":"https://api.github.com/repos/qreal/qreal/tags","blobs_url":"https://api.github.com/repos/qreal/qreal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qreal/qreal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qreal/qreal/git/refs{/sha}","trees_url":"https://api.github.com/repos/qreal/qreal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qreal/qreal/statuses/{sha}","languages_url":"https://api.github.com/repos/qreal/qreal/languages","stargazers_url":"https://api.github.com/repos/qreal/qreal/stargazers","contributors_url":"https://api.github.com/repos/qreal/qreal/contributors","subscribers_url":"https://api.github.com/repos/qreal/qreal/subscribers","subscription_url":"https://api.github.com/repos/qreal/qreal/subscription","commits_url":"https://api.github.com/repos/qreal/qreal/commits{/sha}","git_commits_url":"https://api.github.com/repos/qreal/qreal/git/commits{/sha}","comments_url":"https://api.github.com/repos/qreal/qreal/comments{/number}","issue_comment_url":"https://api.github.com/repos/qreal/qreal/issues/comments{/number}","contents_url":"https://api.github.com/repos/qreal/qreal/contents/{+path}","compare_url":"https://api.github.com/repos/qreal/qreal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qreal/qreal/merges","archive_url":"https://api.github.com/repos/qreal/qreal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qreal/qreal/downloads","issues_url":"https://api.github.com/repos/qreal/qreal/issues{/number}","pulls_url":"https://api.github.com/repos/qreal/qreal/pulls{/number}","milestones_url":"https://api.github.com/repos/qreal/qreal/milestones{/number}","notifications_url":"https://api.github.com/repos/qreal/qreal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qreal/qreal/labels{/name}","releases_url":"https://api.github.com/repos/qreal/qreal/releases{/id}","deployments_url":"https://api.github.com/repos/qreal/qreal/deployments","created_at":"2011-04-03T15:38:06Z","updated_at":"2016-01-26T17:41:14Z","pushed_at":"2016-02-02T15:27:00Z","git_url":"git://github.com/qreal/qreal.git","ssh_url":"git@github.com:qreal/qreal.git","clone_url":"https://github.com/qreal/qreal.git","svn_url":"https://github.com/qreal/qreal","homepage":"","size":127837,"stargazers_count":41,"watchers_count":41,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":80,"mirror_url":null,"open_issues_count":156,"forks":80,"open_issues":156,"watchers":41,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/qreal/qreal/pulls/1607"},"html":{"href":"https://github.com/qreal/qreal/pull/1607"},"issue":{"href":"https://api.github.com/repos/qreal/qreal/issues/1607"},"comments":{"href":"https://api.github.com/repos/qreal/qreal/issues/1607/comments"},"review_comments":{"href":"https://api.github.com/repos/qreal/qreal/pulls/1607/comments"},"review_comment":{"href":"https://api.github.com/repos/qreal/qreal/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/qreal/qreal/pulls/1607/commits"},"statuses":{"href":"https://api.github.com/repos/qreal/qreal/statuses/32ef8ec69b3b9c5323b50382f8314e669b13dfbe"}}}}