summaryrefslogtreecommitdiff
path: root/sdl_android/src/androidTest/java/com/smartdevicelink/test/transport/MultiplexBluetoothTransportTest.java
blob: cdf83079c01a3941d77493ae63a8a01fb22b8ab4 (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
package com.smartdevicelink.test.transport;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;

import com.smartdevicelink.test.util.DeviceUtil;
import com.smartdevicelink.transport.MultiplexBluetoothTransport;
import com.smartdevicelink.transport.SdlRouterService;

import junit.framework.TestCase;


public class MultiplexBluetoothTransportTest extends TestCase {
	
	private static final Object REQUEST_LOCK = new Object();
	
	MultiplexBluetoothTransport bluetooth;
	boolean didCorrectThing = false, isWaitingForResponse = false;
	
	//Example handler
	Handler stateChangeHandler;
	
	public void testStateTransitions() {
		if(Looper.myLooper() == null){
			Looper.prepare();
		}

		stateChangeHandler = new Handler(){
			int stateDesired = MultiplexBluetoothTransport.STATE_LISTEN;
			@Override
			public void handleMessage(Message msg) {
				if(!isWaitingForResponse){
					return;
				}
				switch(msg.what){
					case SdlRouterService.MESSAGE_STATE_CHANGE:
						if(msg.arg1 == stateDesired){
							didCorrectThing = true;
							break;
						}
					default:
						didCorrectThing = false;
				}
				REQUEST_LOCK.notify();
			}

		};

		//TODO test for more than the two states
		bluetooth = MultiplexBluetoothTransport.getBluetoothSerialServerInstance();
		assertNull(bluetooth);

		bluetooth = MultiplexBluetoothTransport.getBluetoothSerialServerInstance(stateChangeHandler);
		assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_NONE);

		bluetooth.start();
		if(DeviceUtil.isEmulator()){
			assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_NONE);
		}else{
			assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_LISTEN);
		}

		bluetooth.stop();
		assertEquals(bluetooth.getState(), MultiplexBluetoothTransport.STATE_NONE);
	}
	
	private void notifyResponseReceived(){
		REQUEST_LOCK.notify();
	}
	
	private void waitForResponse(){
		synchronized(REQUEST_LOCK){
			try {
				REQUEST_LOCK.wait();
				assertTrue(didCorrectThing);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}