/ test / tst_encoding.cpp
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