// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Author: mwr@google.com (Mark Rawling)

syntax = "proto2";

option java_package = "com.google.apps.jspb.proto";
option java_multiple_files = true;

import "google/protobuf/descriptor.proto";

package jspb.test;

message Empty {}

enum OuterEnum {
  FOO = 1;
  BAR = 2;
}

message EnumContainer {
  optional OuterEnum outer_enum = 1;
}

message Simple1 {
  required string a_string = 1;
  repeated string a_repeated_string = 2;
  optional bool a_boolean = 3;
}

// A message that differs from Simple1 only by name
message Simple2 {
  required string a_string = 1;
  repeated string a_repeated_string = 2;
}

message SpecialCases {
  required string normal = 1;
  // Examples of Js reserved names that are converted to pb_<name>.
  required string default = 2;
  required string function = 3;
  required string var = 4;
}

message OptionalFields {
  message Nested {
    optional int32 an_int = 1;
  }
  optional string a_string = 1;
  required bool a_bool = 2;
  optional Nested a_nested_message = 3;
  repeated Nested a_repeated_message = 4;
  repeated string a_repeated_string = 5;
}

message HasExtensions {
  optional string str1 = 1;
  optional string str2 = 2;
  optional string str3 = 3;
  extensions 10 to max;
}

message Complex {
  message Nested {
    required int32 an_int = 2;
  }
  required string a_string = 1;
  optional bool an_out_of_order_bool = 9;
  optional Nested a_nested_message = 4;
  repeated Nested a_repeated_message = 5;
  repeated string a_repeated_string = 7;
  optional double a_floating_point_field = 10;
}

message OuterMessage {
  // Make sure this doesn't conflict with the other Complex message.
  message Complex {
    optional int32 inner_complex_field = 1;
  }
}

message MineField {
  // document.cookie is a banned property in a couple of conformance check
  // configs at Google. Verify that having a field called cookie doesn't confuse
  // the compiler and break the build.
  optional string cookie = 1;
}

message IsExtension {
  extend HasExtensions {
    optional IsExtension ext_field = 100;
  }
  optional string ext1 = 1;

  // Extensions of proto2 Descriptor messages will be ignored.
  extend google.protobuf.EnumOptions {
    optional string simple_option = 42113038;
  }
}

message IndirectExtension {
  extend HasExtensions {
    optional Simple1 simple = 101;
    optional string str = 102;
    repeated string repeated_str = 103;
    repeated Simple1 repeated_simple = 104;
  }
}

extend HasExtensions {
  optional Simple1 simple1 = 105;
}

message DefaultValues {
  enum Enum {
    E1 = 13;
    E2 = 77;
  }
  optional string string_field = 1 [default = "default<>\'\"abc"];
  optional bool bool_field = 2 [default = true];
  optional int64 int_field = 3 [default = 11];
  optional Enum enum_field = 4 [default = E1];
  optional string empty_field = 6 [default = ""];
  optional bytes bytes_field = 8
      [default = "moo"];  // Base64 encoding is "bW9v"
}

message FloatingPointFields {
  optional float optional_float_field = 1;
  required float required_float_field = 2;
  repeated float repeated_float_field = 3;
  optional float default_float_field = 4 [default = 2.0];
  optional double optional_double_field = 5;
  required double required_double_field = 6;
  repeated double repeated_double_field = 7;
  optional double default_double_field = 8 [default = 2.0];
}

message BooleanFields {
  optional bool optional_boolean_field = 1;
  required bool required_boolean_field = 2;
  repeated bool repeated_boolean_field = 3;
  optional bool default_boolean_field = 4 [default = true];
}

message TestClone {
  optional string str = 1;
  optional Simple1 simple1 = 3;
  repeated Simple1 simple2 = 5;
  optional bytes bytes_field = 6;
  optional string unused = 7;
  extensions 10 to max;
}

message TestCloneExtension {
  extend TestClone {
    optional TestCloneExtension low_ext = 11;
  }
  optional int32 f = 1;
}

message CloneExtension {
  extend TestClone {
    optional CloneExtension ext_field = 100;
  }
  optional string ext = 2;
}

message TestGroup {
  repeated group RepeatedGroup = 1 {
    required string id = 1;
    repeated bool some_bool = 2;
  }
  required group RequiredGroup = 2 {
    required string id = 1;
  }
  optional group OptionalGroup = 3 {
    required string id = 1;
  }
  optional string id = 4;
  required Simple2 required_simple = 5;
  optional Simple2 optional_simple = 6;
}

message TestGroup1 {
  optional TestGroup.RepeatedGroup group = 1;
}

message TestReservedNames {
  optional int32 extension = 1;
  extensions 10 to max;
}

message TestReservedNamesExtension {
  extend TestReservedNames {
    optional int32 foo = 10;
  }
}

message TestMessageWithOneof {

  oneof partial_oneof {
    string pone = 3;
    string pthree = 5;
  }

  oneof recursive_oneof {
    TestMessageWithOneof rone = 6;
    string rtwo = 7;
  }

  optional bool normal_field = 8;
  repeated string repeated_field = 9;

  oneof default_oneof_a {
    int32 aone = 10 [default = 1234];
    int32 atwo = 11;
  }

  oneof default_oneof_b {
    int32 bone = 12;
    int32 btwo = 13 [default = 1234];
  }
}

message TestEndsWithBytes {
  optional int32 value = 1;
  optional bytes data = 2;
}

// This message is for testing extension handling doesn't affect fields before
// pivot. Don't add new field to this message. See b/117298778 for more detail.
message TestLastFieldBeforePivot {
  optional int32 last_field_before_pivot = 1;
  extensions 100 to max;
}

extend TestLastFieldBeforePivot {
  optional int32 extend_test_last_field_before_pivot_field = 101;
}


message Int64Types {
  optional int64 int64_normal = 1 [jstype = JS_NORMAL];
  optional sint64 int64_string = 2 [jstype = JS_STRING];
  optional uint64 int64_number = 3 [jstype = JS_NUMBER];

}

message TestMapFieldsNoBinary {
  map<string, string> map_string_string = 1;
  map<string, int32> map_string_int32 = 2;
  map<string, int64> map_string_int64 = 3;
  map<string, bool> map_string_bool = 4;
  map<string, double> map_string_double = 5;
  map<string, MapValueEnumNoBinary> map_string_enum = 6;
  map<string, MapValueMessageNoBinary> map_string_msg = 7;

  map<int32, string> map_int32_string = 8;
  map<int64, string> map_int64_string = 9;
  map<bool, string> map_bool_string = 10;

  optional TestMapFieldsNoBinary test_map_fields = 11;
  map<string, TestMapFieldsNoBinary> map_string_testmapfields = 12;
}

enum MapValueEnumNoBinary {
  MAP_VALUE_FOO_NOBINARY = 0;
  MAP_VALUE_BAR_NOBINARY = 1;
  MAP_VALUE_BAZ_NOBINARY = 2;
}

message MapValueMessageNoBinary {
  optional int32 foo = 1;
}

message Deeply {
  message Nested {
    message Message {
      optional int32 count = 1;
    }
  }
}


