/*
 * Copyright (C) 2012 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.
 */

#include "AudioRecordPlayTestCommon.h"

#include <Log.h>

class AudioRecordPlayLocalTest: public AudioRecordPlayTestCommon {
public:
    virtual ~AudioRecordPlayLocalTest() {};
protected:
    android::sp<AudioHardware> createRecordingHw() {
        return AudioHardware::createAudioHw(true, false);
    };

    android::sp<AudioHardware> createPlaybackHw() {
        return AudioHardware::createAudioHw(true, true);
    }
};



TEST_F(AudioRecordPlayLocalTest, PlayAndRecordTest) {
    PlayAndRecord(4);
}


