/*
 * This file is part of the Owl Positioning System (OwlPS) project.
 * It is subject to the copyright notice and license terms in the
 * COPYRIGHT.t2t file found in the top-level directory of this
 * distribution and at
 *   https://code.lm7.fr/mcy/owlps/src/master/COPYRIGHT.t2t
 * No part of the OwlPS Project, including this file, may be copied,
 * modified, propagated, or distributed except according to the terms
 * contained in the COPYRIGHT.t2t file; the COPYRIGHT.t2t file must be
 * distributed along with this file, either separately or by replacing
 * this notice by the COPYRIGHT.t2t file's contents.
 */

#ifndef _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_
#define _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_

#include "capturepoint.hh"
#include "mobile.hh"
#include "request.hh"
#include "measurement.hh"
#include "referencepoint.hh"
#include "result.hh"

#include <string>
#include <vector>
#include <unordered_map>

class TestUtil
{
private:
  static void create_mobile_list(void) ;
  static void create_cp_list(void) ;
  static void create_request_list(void) ;
  static void create_result_list(void) ;
  static void setup_configuration(void) ;

public:
  static std::vector<CapturePoint> aps ;
  static std::vector<Mobile> mobiles ;
  static std::vector<Request*> requests ;
  static std::vector<Result> results ;
  static std::vector<ReferencePoint> reference_points ;

  static void set_up(void) ;
  static void tear_down(void) ;

  static void fill_file(const std::string &output_file_name,
                        const std::vector<std::string> output_lines) ;
  static void remove_file(const std::string &file_name) ;

  static void create_test_csv_file(const std::string &file_name,
                                   bool with_spaces = false) ;

  static bool request_equals(const Request &first,
                             const Request &second) ;
  static bool measurements_unordered_map_equals(
    std::unordered_map<std::string,Measurement> first,
    std::unordered_map<std::string,Measurement> second) ;
  static bool measurement_equals(const Measurement &first,
                                 const Measurement &second) ;


  static bool file_size_equals(const std::string &file1_name,
                               const std::string &file2_name) ;
  static off_t file_size(const std::string &file_name) ;

} ;

#endif // _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_
