blob: 11d27dcfbd5967a81a827029de81755e52727eb3 [file] [log] [blame]
package com.android.bluetooth.tests;
import java.io.IOException;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;
import junit.framework.Assert;
import android.util.Log;
import com.android.bluetooth.map.BluetoothMapAppParams;
import com.android.bluetooth.map.BluetoothMapFolderElement;
import com.android.bluetooth.tests.TestSequencer.OPTYPE;
public class MapStepsFolder {
private final static String TAG = "MapStepsFolder";
/**
* Request and expect the following folder structure:
* root
* telecom
* msg
* inbox
* outbox
* draft
* sent
* deleted
*
* The order in which they occur in the listing will not matter.
* @param sequencer
*/
protected static void addGoToMsgFolderSteps(TestSequencer sequencer) {
SeqStep step;
//BluetoothMapFolderElement rootDir = new BluetoothMapFolderElement("root", null);
// MAP Get Folder Listing Steps
// The telecom folder
step = sequencer.addStep(OPTYPE.GET, null);
HeaderSet hs = new HeaderSet();
hs.setHeader(HeaderSet.TYPE, MapObexLevelTest.TYPE_GET_FOLDER_LISTING);
step.mReqHeaders = hs;
step.mValidator = new MapBuildFolderStructurValidator(1, null);
step = sequencer.addStep(OPTYPE.SET_PATH, ObexTest.getResponsecodevalidator());
hs = new HeaderSet();
hs.setHeader(HeaderSet.NAME, "telecom");
step.mReqHeaders = hs;
step.mClientPostAction = new MapSetClientFolder("telecom");
// The msg folder
step = sequencer.addStep(OPTYPE.GET, null);
hs = new HeaderSet();
hs.setHeader(HeaderSet.TYPE, MapObexLevelTest.TYPE_GET_FOLDER_LISTING);
step.mReqHeaders = hs;
step.mValidator = new MapBuildFolderStructurValidator(1, null);
step = sequencer.addStep(OPTYPE.SET_PATH, ObexTest.getResponsecodevalidator());
hs = new HeaderSet();
hs.setHeader(HeaderSet.NAME, "msg");
step.mReqHeaders = hs;
step.mClientPostAction = new MapSetClientFolder("msg");
// The msg folder
step = sequencer.addStep(OPTYPE.GET, null);
hs = new HeaderSet();
hs.setHeader(HeaderSet.TYPE, MapObexLevelTest.TYPE_GET_FOLDER_LISTING);
step.mReqHeaders = hs;
step.mValidator = new MapBuildFolderStructurValidator(5, buildDefaultFolderStructure());
}
/**
* Sets the current folder on the client, to the folder name specified in the constructor.
* TODO: Could be extended to be able to navigate back and forth in the folder structure.
*/
private static class MapSetClientFolder implements ISeqStepAction {
final String mFolderName;
public MapSetClientFolder(String folderName) {
super();
this.mFolderName = folderName;
}
@Override
public void execute(SeqStep step, HeaderSet request, Operation op)
throws IOException {
MapBuildFolderStructurValidator.sCurrentFolder =
MapBuildFolderStructurValidator.sCurrentFolder.getSubFolder(mFolderName);
Assert.assertNotNull(MapBuildFolderStructurValidator.sCurrentFolder);
Log.i(TAG, "MapSetClientFolder(): Current path: " +
MapBuildFolderStructurValidator.sCurrentFolder.getFullPath());
}
}
/* Functions to validate results */
private static class MapBuildFolderStructurValidator implements ISeqStepValidator {
final int mExpectedListingSize;
static BluetoothMapFolderElement sCurrentFolder = null;
final BluetoothMapFolderElement mExpectedFolderElement;
public MapBuildFolderStructurValidator(int mExpectedListingSize,
BluetoothMapFolderElement folderElement) {
super();
if(sCurrentFolder == null) {
sCurrentFolder = new BluetoothMapFolderElement("root", null);
}
this.mExpectedListingSize = mExpectedListingSize;
this.mExpectedFolderElement = folderElement;
}
@Override
public boolean validate(SeqStep step, HeaderSet response, Operation op)
throws IOException {
Assert.assertNotNull(op);
op.noBodyHeader();
try {
// For some odd reason, the request will not be send before we start to read the
// reply data, hence we need to do this first?
sCurrentFolder.appendSubfolders(op.openInputStream());
response = op.getReceivedHeader();
byte[] appParamsRaw = (byte[])response.getHeader(HeaderSet.APPLICATION_PARAMETER);
Assert.assertNotNull(appParamsRaw);
BluetoothMapAppParams appParams;
appParams = new BluetoothMapAppParams(appParamsRaw);
Assert.assertNotNull(appParams);
if(mExpectedFolderElement != null) {
// Recursively compare
Assert.assertTrue(mExpectedFolderElement.compareTo(sCurrentFolder.getRoot())
== 0);
}
int responseCode = op.getResponseCode();
Assert.assertEquals(ResponseCodes.OBEX_HTTP_OK, responseCode);
op.close();
} catch (Exception e) {
Log.e(TAG,"",e);
Assert.fail();
}
return true;
}
}
private static BluetoothMapFolderElement buildDefaultFolderStructure(){
BluetoothMapFolderElement root =
new BluetoothMapFolderElement("root", null); // This will be the root element
BluetoothMapFolderElement tmpFolder;
tmpFolder = root.addFolder("telecom"); // root/telecom
tmpFolder = tmpFolder.addFolder("msg"); // root/telecom/msg
tmpFolder.addFolder("inbox"); // root/telecom/msg/inbox
tmpFolder.addFolder("outbox"); // root/telecom/msg/outbox
tmpFolder.addFolder("sent"); // root/telecom/msg/sent
tmpFolder.addFolder("deleted"); // root/telecom/msg/deleted
tmpFolder.addFolder("draft"); // root/telecom/msg/draft
return root;
}
}