// Copyright 2016 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.

module mojo.common.test;

import "mojo/common/common_custom_types.mojom";

interface TestFilePath {
  BounceFilePath(mojo.common.mojom.FilePath in)
      => (mojo.common.mojom.FilePath out);
};

interface TestUnguessableToken {
  BounceNonce(mojo.common.mojom.UnguessableToken in)
      => (mojo.common.mojom.UnguessableToken out);
};

interface TestTime {
  BounceTime(mojo.common.mojom.Time time) => (mojo.common.mojom.Time time);
  BounceTimeDelta(mojo.common.mojom.TimeDelta time_delta)
      => (mojo.common.mojom.TimeDelta time_delta);
  BounceTimeTicks(mojo.common.mojom.TimeTicks time_ticks)
      => (mojo.common.mojom.TimeTicks time_ticks);
};

interface TestValue {
  BounceDictionaryValue(mojo.common.mojom.DictionaryValue in)
      => (mojo.common.mojom.DictionaryValue out);
  BounceListValue(mojo.common.mojom.ListValue in)
      => (mojo.common.mojom.ListValue out);
};

interface TestString16 {
  [Sync]
  BounceString16(mojo.common.mojom.String16 in)
      => (mojo.common.mojom.String16 out);
};
