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

Commit c01c393c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add BrowseTreeTest" into tm-qpr-dev am: 483ae0d8

parents 786c98ae 483ae0d8
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -23,6 +23,8 @@ import android.util.Log;


import com.android.bluetooth.Utils;
import com.android.bluetooth.Utils;


import com.google.common.annotations.VisibleForTesting;

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


    // Static instance of Folder ID <-> Folder Instance (for navigation purposes)
    // 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 mCurrentBrowseNode;
    private BrowseNode mCurrentBrowsedPlayer;
    private BrowseNode mCurrentBrowsedPlayer;
    private BrowseNode mCurrentAddressedPlayer;
    private BrowseNode mCurrentAddressedPlayer;
+202 −0
Original line number Original line 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