// Copyright (c) 2011 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.

#include "chrome/browser/sync/sessions/test_util.h"

namespace browser_sync {
namespace sessions {
namespace test_util {

void SimulateHasMoreToSync(sessions::SyncSession* session,
                           SyncerStep begin, SyncerStep end) {
  session->status_controller()->update_conflicts_resolved(true);
  ASSERT_TRUE(session->HasMoreToSync());
}

void SimulateDownloadUpdatesFailed(sessions::SyncSession* session,
                                   SyncerStep begin, SyncerStep end) {
  // Note that a non-zero value of changes_remaining once a session has
  // completed implies that the Syncer was unable to exhaust this count during
  // the GetUpdates cycle.  This is an indication that an error occurred.
  session->status_controller()->set_num_server_changes_remaining(1);
}

void SimulateCommitFailed(sessions::SyncSession* session,
                          SyncerStep begin, SyncerStep end) {
  // Note that a non-zero number of unsynced handles once a session has
  // completed implies that the Syncer was unable to make forward progress
  // during a commit, indicating an error occurred.
  // See implementation of SyncSession::HasMoreToSync.
  std::vector<int64> handles;
  handles.push_back(1);
  session->status_controller()->set_unsynced_handles(handles);
}

void SimulateSuccess(sessions::SyncSession* session,
                     SyncerStep begin, SyncerStep end) {
  if (session->HasMoreToSync()) {
    ADD_FAILURE() << "Shouldn't have more to sync";
  }
  ASSERT_EQ(0U, session->status_controller()->num_server_changes_remaining());
  ASSERT_EQ(0U, session->status_controller()->unsynced_handles().size());
}

void SimulateThrottledImpl(sessions::SyncSession* session,
    const base::TimeDelta& delta) {
  session->delegate()->OnSilencedUntil(base::TimeTicks::Now() + delta);
}

void SimulatePollIntervalUpdateImpl(sessions::SyncSession* session,
    const base::TimeDelta& new_poll) {
  session->delegate()->OnReceivedLongPollIntervalUpdate(new_poll);
}

}  // namespace test_util
}  // namespace sessions
}  // namespace browser_sync