Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e2e02ad authored by Kihong Seong's avatar Kihong Seong Committed by Gerrit Code Review
Browse files

Merge "Add BrowseTreeTest"

parents a1b15cf4 37bd2872
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.util.Log;

import com.android.bluetooth.Utils;

import com.google.common.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -57,7 +59,8 @@ public class BrowseTree {
    public static final String PLAYER_PREFIX = "PLAYER";

    // Static instance of Folder ID <-> Folder Instance (for navigation purposes)
    private final HashMap<String, BrowseNode> mBrowseMap = new HashMap<String, BrowseNode>();
    @VisibleForTesting
    final HashMap<String, BrowseNode> mBrowseMap = new HashMap<String, BrowseNode>();
    private BrowseNode mCurrentBrowseNode;
    private BrowseNode mCurrentBrowsedPlayer;
    private BrowseNode mCurrentAddressedPlayer;
+202 −0
Original line number Diff line number Diff line
/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.bluetooth.avrcpcontroller;

import static com.google.common.truth.Truth.assertThat;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;

import com.android.bluetooth.avrcpcontroller.BrowseTree.BrowseNode;

import org.junit.Before;
import org.junit.Test;

import java.util.Set;

public class BrowseTreeTest {
    private static final String ILLEGAL_ID = "illegal_id";
    private static final String TEST_HANDLE = "test_handle";
    private static final String TEST_NODE_ID = "test_node_id";

    private final byte[] mTestAddress = new byte[]{01, 01, 01, 01, 01, 01};
    private BluetoothAdapter mAdapter;
    private BluetoothDevice mTestDevice = null;

    @Before
    public void setUp() {
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mTestDevice = mAdapter.getRemoteDevice(mTestAddress);
    }

    @Test
    public void constructor_withoutDevice() {
        BrowseTree browseTree = new BrowseTree(null);

        assertThat(browseTree.mRootNode.mItem.getDevice()).isEqualTo(null);
    }

    @Test
    public void constructor_withDevice() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.mRootNode.mItem.getDevice()).isEqualTo(mTestDevice);
    }

    @Test
    public void clear() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        browseTree.clear();

        assertThat(browseTree.mBrowseMap).isEmpty();
    }

    @Test
    public void getTrackFromNowPlayingList() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);
        BrowseNode trackInNowPlayingList = browseTree.new BrowseNode(new AvrcpItem.Builder()
                .setUuid(ILLEGAL_ID).setTitle(ILLEGAL_ID).setBrowsable(true).build());

        browseTree.mNowPlayingNode.addChild(trackInNowPlayingList);

        assertThat(browseTree.getTrackFromNowPlayingList(0)).isEqualTo(
                trackInNowPlayingList);
    }

    @Test
    public void onConnected() {
        BrowseTree browseTree = new BrowseTree(null);

        assertThat(browseTree.mRootNode.getChildrenCount()).isEqualTo(0);

        browseTree.onConnected(mTestDevice);

        assertThat(browseTree.mRootNode.getChildrenCount()).isEqualTo(1);
    }

    @Test
    public void findBrowseNodeByID() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.findBrowseNodeByID(ILLEGAL_ID)).isNull();
        assertThat(browseTree.findBrowseNodeByID(BrowseTree.ROOT)).isEqualTo(browseTree.mRootNode);
    }

    @Test
    public void setAndGetCurrentBrowsedFolder() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.setCurrentBrowsedFolder(ILLEGAL_ID)).isFalse();
        assertThat(browseTree.setCurrentBrowsedFolder(BrowseTree.NOW_PLAYING_PREFIX)).isTrue();
        assertThat(browseTree.getCurrentBrowsedFolder()).isEqualTo(browseTree.mNowPlayingNode);
    }

    @Test
    public void setAndGetCurrentBrowsedPlayer() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.setCurrentBrowsedPlayer(ILLEGAL_ID, 0, 0)).isFalse();
        assertThat(
                browseTree.setCurrentBrowsedPlayer(BrowseTree.NOW_PLAYING_PREFIX, 2, 1)).isTrue();
        assertThat(browseTree.getCurrentBrowsedPlayer()).isEqualTo(browseTree.mNowPlayingNode);
    }

    @Test
    public void setAndGetCurrentAddressedPlayer() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.setCurrentAddressedPlayer(ILLEGAL_ID)).isFalse();
        assertThat(browseTree.setCurrentAddressedPlayer(BrowseTree.NOW_PLAYING_PREFIX)).isTrue();
        assertThat(browseTree.getCurrentAddressedPlayer()).isEqualTo(browseTree.mNowPlayingNode);
    }

    @Test
    public void indicateCoverArtUsedAndUnused() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);
        assertThat(browseTree.getNodesUsingCoverArt(TEST_HANDLE)).isEmpty();

        browseTree.indicateCoverArtUsed(TEST_NODE_ID, TEST_HANDLE);

        assertThat(browseTree.getNodesUsingCoverArt(TEST_HANDLE).get(0)).isEqualTo(TEST_NODE_ID);

        browseTree.indicateCoverArtUnused(TEST_NODE_ID, TEST_HANDLE);

        assertThat(browseTree.getNodesUsingCoverArt(TEST_HANDLE)).isEmpty();
        assertThat(browseTree.getAndClearUnusedCoverArt().get(0)).isEqualTo(TEST_HANDLE);
    }

    @Test
    public void notifyImageDownload() {
        BrowseTree browseTree = new BrowseTree(null);
        String testDeviceId = BrowseTree.PLAYER_PREFIX + mTestDevice.getAddress();

        browseTree.onConnected(mTestDevice);
        browseTree.indicateCoverArtUsed(TEST_NODE_ID, TEST_HANDLE);
        browseTree.indicateCoverArtUsed(testDeviceId, TEST_HANDLE);
        Set<BrowseTree.BrowseNode> parents = browseTree.notifyImageDownload(TEST_HANDLE, null);

        assertThat(parents.contains(browseTree.mRootNode)).isTrue();
    }

    @Test
    public void getEldestChild_whenNodesAreNotAncestorDescendantRelation() {
        BrowseTree browseTree = new BrowseTree(null);

        browseTree.onConnected(mTestDevice);

        assertThat(BrowseTree.getEldestChild(browseTree.mNowPlayingNode,
                browseTree.mRootNode)).isNull();
    }

    @Test
    public void getEldestChild_whenNodesAreAncestorDescendantRelation() {
        BrowseTree browseTree = new BrowseTree(null);

        browseTree.onConnected(mTestDevice);

        assertThat(BrowseTree.getEldestChild(browseTree.mRootNode,
                browseTree.mRootNode.getChild(0))).isEqualTo(browseTree.mRootNode.getChild(0));
    }

    @Test
    public void getNextStepFolder() {
        BrowseTree browseTree = new BrowseTree(null);
        BrowseNode nodeOutOfMap = browseTree.new BrowseNode(new AvrcpItem.Builder()
                .setUuid(ILLEGAL_ID).setTitle(ILLEGAL_ID).setBrowsable(true).build());

        browseTree.onConnected(mTestDevice);

        assertThat(browseTree.getNextStepToFolder(null)).isNull();
        assertThat(browseTree.getNextStepToFolder(browseTree.mRootNode)).isEqualTo(
                browseTree.mRootNode);
        assertThat(browseTree.getNextStepToFolder(browseTree.mRootNode.getChild(0))).isEqualTo(
                browseTree.mRootNode.getChild(0));
        assertThat(browseTree.getNextStepToFolder(nodeOutOfMap)).isNull();

        browseTree.setCurrentBrowsedPlayer(BrowseTree.NOW_PLAYING_PREFIX, 2, 1);
        assertThat(browseTree.getNextStepToFolder(browseTree.mRootNode.getChild(0))).isEqualTo(
                browseTree.mNavigateUpNode);
    }

    @Test
    public void toString_returnsSizeInfo() {
        BrowseTree browseTree = new BrowseTree(mTestDevice);

        assertThat(browseTree.toString()).isEqualTo("Size: " + browseTree.mBrowseMap.size());
    }
}
 No newline at end of file