tst_encoding.cpp
1 2 #include <QtTest/QtTest> 3 #include <QLocalSocket> 4 #include <neovimconnector.h> 5 #include <util.h> 6 7 #include "common.h" 8 9 class TestEncoding: public QObject 10 { 11 Q_OBJECT 12 private slots: 13 void initTestCase(); 14 void encodeString(); 15 void map(); 16 void stringsAreBinaryNotUtf8(); 17 18 protected: 19 NeovimQt::NeovimConnector* m_c; 20 }; 21 22 void TestEncoding::encodeString() 23 { 24 QMetaObject::Connection conn; 25 m_c->api1()->vim_set_var("testing-neovim-qt", QStringLiteral("value")); 26 m_c->api1()->vim_get_var("testing-neovim-qt"); 27 QSignalSpy onVimGetVar{ m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_var }; 28 conn = connect(m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_var, 29 [](const QVariant& v) { 30 QVERIFY(v == QByteArray("value")); 31 }); 32 QVERIFY(SPYWAIT(onVimGetVar)); 33 disconnect(conn); 34 } 35 36 void TestEncoding::map() 37 { 38 QMetaObject::Connection conn; 39 QVariantMap map; 40 map.insert("answer", 42); 41 42 m_c->api1()->vim_set_var("test-map", map); 43 QSignalSpy onVimSetVar{ m_c->api1(), &NeovimQt::NeovimApi1::on_vim_set_var }; 44 QVERIFY(SPYWAIT(onVimSetVar)); 45 46 m_c->api1()->vim_get_var("test-map"); 47 QSignalSpy onVimGetVar{ m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_var }; 48 conn = connect(m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_var, 49 [map](const QVariant& v) { 50 qDebug() << "Expected:" << map; 51 qDebug() << "Observed:" << v; 52 QVERIFY(v == map); 53 }); 54 QVERIFY(SPYWAIT(onVimGetVar)); 55 disconnect(conn); 56 } 57 58 // A reminder that Strings in the Neovim API are binary data 59 // that may or may not conform to encoding 60 void TestEncoding::stringsAreBinaryNotUtf8() 61 { 62 QByteArray data = "\xc3\x28"; 63 64 m_c->api1()->vim_set_current_line(data); 65 QSignalSpy onVimSetCurrentLine{ m_c->api1(), &NeovimQt::NeovimApi1::on_vim_set_current_line}; 66 QVERIFY(SPYWAIT(onVimSetCurrentLine)); 67 68 m_c->api1()->vim_get_current_line(); 69 QMetaObject::Connection conn; 70 QSignalSpy onVimGetCurrentLine{ m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_current_line}; 71 conn = connect(m_c->api1(), &NeovimQt::NeovimApi1::on_vim_get_current_line, 72 [data](const QVariant& v) { 73 QCOMPARE(v.toByteArray(), data); 74 }); 75 QVERIFY(SPYWAIT(onVimGetCurrentLine)); 76 disconnect(conn); 77 } 78 79 void TestEncoding::initTestCase() 80 { 81 m_c = NeovimQt::NeovimConnector::spawn({"-u", "NONE"}); 82 QVERIFY(m_c->errorCause() == NeovimQt::NeovimConnector::NoError); 83 QSignalSpy onReady(m_c, SIGNAL(ready())); 84 QVERIFY(onReady.isValid()); 85 QVERIFY(SPYWAIT(onReady)); 86 } 87 88 QTEST_MAIN(TestEncoding) 89 #include "tst_encoding.moc" 90