// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Feel free to clone this file to work on a new test.

#include <zxtest/zxtest.h>

#include "third_party/iwlwifi/test/single-ap-test.h"

namespace wlan::testing {
namespace {

// To test helper functions only.
//
// This is used when you only need to test some hardware-independent functions.
// Easy to use. Just call the function you want to test.
//
class DummyTest : public ::zxtest::Test {
 public:
  DummyTest() {}
  ~DummyTest() {}
};

TEST_F(DummyTest, DummyTestFunction) {}

// For more complicated cases that requires the simulated firmware/hardware/
// environment.
//
// This example code uses the SimSingleAp class, which creates an virtual
// AP in the environment so that we can test the client driver.
//
class MvmTest : public SingleApTest {
 public:
  MvmTest() {}
  ~MvmTest() {}
};

TEST_F(MvmTest, MvmTestFunction) {}

}  // namespace
}  // namespace wlan::testing
