summaryrefslogtreecommitdiffstats
blob: 53dc0b3224a4c7545bdae690a4578686c71fbfc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
 * Copyright (c) 2012 Isode Limited, London, England.
 * All rights reserved.
 */
/*
 * Copyright (c) 2010 Remko Tronçon
 * All rights reserved.
 */

package com.isode.stroke.parser.payloadparsers;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import com.isode.stroke.elements.Command;
import com.isode.stroke.elements.Form;
import com.isode.stroke.elements.Payload;
import com.isode.stroke.elements.Command.Action;
import com.isode.stroke.elements.Command.Note;
import com.isode.stroke.elements.Command.Status;
import com.isode.stroke.elements.Command.Note.Type;
import com.isode.stroke.eventloop.DummyEventLoop;

public class CommandParserTest {
    @BeforeClass
    public static void init() throws Exception {
    }

    private static Command parse(String xmlString) {
        DummyEventLoop eventLoop = new DummyEventLoop();
        PayloadsParserTester parser = new PayloadsParserTester(eventLoop);
        assertTrue(parser.parse(xmlString));

        Payload payload = null;
        do {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            eventLoop.processEvents();
            payload = parser.getPayload();
        } while (payload == null);

        return (Command) payload;
    }

    @Test
    public void testParse() {
        Command payload = parse("<command xmlns='http://jabber.org/protocol/commands' node='list' action='prev' sessionid='myid'/>");

        assertEquals(Action.PREV, payload.getAction());
        assertEquals("list", payload.getNode());
        assertEquals("myid", payload.getSessionID());
    }

    @Test
    public void testParse_Result() {
        Command payload = parse("<command xmlns='http://jabber.org/protocol/commands' node='config' status='completed' sessionid='myid'>"
                + "<note type='warn'>Service 'httpd' has been configured.</note>"
                + "<note type='error'>I lied.</note>"
                + "<actions execute='next'>"
                + "<prev/>"
                + "<next/>"
                + "</actions>" + "</command>");

        assertEquals(Status.COMPLETED, payload.getStatus());

        List<Note> notes = payload.getNotes();
        assertEquals(2, notes.size());
        assertEquals(Type.WARN, notes.get(0).type);
        assertEquals("Service 'httpd' has been configured.", notes.get(0).note);
        assertEquals(Type.ERROR, notes.get(1).type);
        assertEquals("I lied.", notes.get(1).note);
        List<Action> actions = payload.getAvailableActions();
        assertEquals(2, actions.size());
        assertEquals(Action.PREV, actions.get(0));
        assertEquals(Action.NEXT, actions.get(1));
        assertEquals(Action.NEXT, payload.getExecuteAction());
    }

    @Test
    public void testParse_Form() {
        Command payload = parse("<command xmlns='http://jabber.org/protocol/commands' node='config' status='completed'>"
                + "<x type=\"result\" xmlns=\"jabber:x:data\">"
                + "<title>Bot Configuration</title>"
                + "<instructions>Hello!</instructions>"
                + "<instructions>Fill out this form to configure your new bot!</instructions>"
                + "</x>" + "</command>");

        Form form = payload.getForm();
        assertEquals("Bot Configuration", form.getTitle());
        assertEquals("Hello!\nFill out this form to configure your new bot!",
                form.getInstructions());
        assertEquals(Form.Type.RESULT_TYPE, form.getType());
    }
}