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

#ifndef SYNC_TEST_MOCK_INVALIDATION_H_
#define SYNC_TEST_MOCK_INVALIDATION_H_

#include "base/memory/scoped_ptr.h"
#include "sync/internal_api/public/base/invalidation_interface.h"

namespace syncer {

// An InvalidationInterface used by sync for testing.
// It does not support any form of acknowledgements.
class MockInvalidation : public InvalidationInterface {
 public:
  // Helpers to build new MockInvalidations.
  static scoped_ptr<MockInvalidation> BuildUnknownVersion();
  static scoped_ptr<MockInvalidation> Build(int64 version,
                                            const std::string& payload);

  ~MockInvalidation() override;

  // Implementation of InvalidationInterface.
  bool IsUnknownVersion() const override;
  const std::string& GetPayload() const override;
  int64 GetVersion() const override;
  void Acknowledge() override;
  void Drop() override;

 protected:
  MockInvalidation(bool is_unknown_version,
                   int64 version,
                   const std::string& payload);

  // Whether or not this is an 'unknown version' invalidation.
  const bool is_unknown_version_;

  // The version of this invalidation.  Valid only if !is_unknown_version_.
  const int64 version_;

  // The payload of this invalidation.  Valid only if !is_unknown_version_.
  const std::string payload_;
};

}  // namespace syncer

#endif  // SYNC_TEST_MOCK_INVALIDATION_H_
