import 'package:moxxmpp/moxxmpp.dart'; import 'package:moxxmpp/src/awaiter.dart'; import 'package:test/test.dart'; const bareJid = 'user4@example.org'; String getBareJidCallback() => bareJid; void main() { test('Test awaiting an awaited stanza with a from attribute', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending( 'user1@server.example', 'abc123', 'iq', ); // Receive the wrong answer final result1 = await awaiter.onData( XMLNode.fromString( '', ), ); expect(result1, false); final result2 = await awaiter.onData( XMLNode.fromString( '', ), ); expect(result2, false); // Receive the correct answer final stanza = XMLNode.fromString( '', ); final result3 = await awaiter.onData( stanza, ); expect(result3, true); expect(await future, stanza); }); test('Test awaiting an awaited stanza without a from attribute', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending(null, 'abc123', 'iq'); // Receive the wrong answer final result1 = await awaiter.onData( XMLNode.fromString(''), ); expect(result1, false); // Receive the correct answer final stanza = XMLNode.fromString(''); final result2 = await awaiter.onData( stanza, ); expect(result2, true); expect(await future, stanza); }); test('Test awaiting a stanza that was already awaited', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending(null, 'abc123', 'iq'); // Receive the correct answer final stanza = XMLNode.fromString(''); final result1 = await awaiter.onData( stanza, ); expect(result1, true); expect(await future, stanza); // Receive it again final result2 = await awaiter.onData( stanza, ); expect(result2, false); }); test('Test ignoring a stanza that has the wrong tag', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending(null, 'abc123', 'iq'); // Receive the wrong answer final stanza = XMLNode.fromString(''); final result1 = await awaiter.onData( XMLNode.fromString(''), ); expect(result1, false); // Receive the correct answer final result2 = await awaiter.onData( stanza, ); expect(result2, true); expect(await future, stanza); }); test('Sending a stanza to our bare JID', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending(bareJid, 'abc123', 'iq'); // Receive the response. final stanza = XMLNode.fromString(''); await awaiter.onData(stanza); expect(await future, stanza); }); test( 'Sending a stanza to our bare JID and receiving stanza with a from attribute', () async { final awaiter = StanzaAwaiter(getBareJidCallback); // "Send" a stanza final future = await awaiter.addPending(bareJid, 'abc123', 'iq'); // Receive the response. final stanza = XMLNode.fromString(''); await awaiter.onData(stanza); expect(await future, stanza); }); }