[ObjC] Test file cleanups

- Remove some types not needed.
- Remove some files not needed.
- Move some tests files into different prefixes to logically segment things.
- Add objc_class_prefix to the files.
- Use an expected prefix file during generation to exercise that code and
  validate things.
- Require prefixes for the test file.
diff --git a/objectivec/DevTools/compile_testing_protos.sh b/objectivec/DevTools/compile_testing_protos.sh
index 7bdfbb8..fb8a853 100755
--- a/objectivec/DevTools/compile_testing_protos.sh
+++ b/objectivec/DevTools/compile_testing_protos.sh
@@ -42,10 +42,8 @@
   objectivec/Tests/unittest_extension_chain_e.proto
   objectivec/Tests/unittest_extension_chain_f.proto
   objectivec/Tests/unittest_extension_chain_g.proto
-  objectivec/Tests/unittest_import_public_lite.proto
   objectivec/Tests/unittest_import_public.proto
   objectivec/Tests/unittest_import.proto
-  objectivec/Tests/unittest_mset_wire_format.proto
   objectivec/Tests/unittest_mset.proto
   objectivec/Tests/unittest_objc_options.proto
   objectivec/Tests/unittest_objc_startup.proto
@@ -128,8 +126,11 @@
 # -----------------------------------------------------------------------------
 # Generate the Objective C specific testing protos.
 
-"${PROTOC}"                                  \
-  --objc_out="${OUTPUT_DIR}"                 \
-  --proto_path=.                             \
-  --proto_path=src                           \
+"${PROTOC}"                                                                 \
+  --objc_out="${OUTPUT_DIR}"                                                \
+  --objc_opt=expected_prefixes_path=objectivec/Tests/expected_prefixes.txt  \
+  --objc_opt=prefixes_must_be_registered=yes                                \
+  --objc_opt=require_prefixes=yes                                           \
+  --proto_path=.                                                            \
+  --proto_path=src                                                          \
   "${OBJC_TEST_PROTO_FILES[@]}"
diff --git a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
index 96947b0..bb52e45 100644
--- a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
@@ -218,9 +218,7 @@
 		F44FEABE28B5465900EC57B3 /* unittest_deprecated_file.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_deprecated_file.proto; sourceTree = "<group>"; };
 		F44FEABF28B5465900EC57B3 /* unittest_mset.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_mset.proto; sourceTree = "<group>"; };
 		F44FEAC028B5465900EC57B3 /* unittest_import.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import.proto; sourceTree = "<group>"; };
-		F44FEAC128B5465900EC57B3 /* unittest_mset_wire_format.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_mset_wire_format.proto; sourceTree = "<group>"; };
 		F44FEAC228B5465900EC57B3 /* unittest.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest.proto; sourceTree = "<group>"; };
-		F44FEAC328B5465900EC57B3 /* unittest_import_public_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import_public_lite.proto; sourceTree = "<group>"; };
 		F44FEAC428B5465900EC57B3 /* unittest_preserve_unknown_enum.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_preserve_unknown_enum.proto; sourceTree = "<group>"; };
 		F44FEAC528B5465900EC57B3 /* any_test.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = any_test.proto; sourceTree = "<group>"; };
 		F44FEAC628B5465900EC57B3 /* unittest_import_public.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import_public.proto; sourceTree = "<group>"; };
@@ -519,10 +517,8 @@
 				F44FEAC928B5465900EC57B3 /* unittest_extension_chain_e.proto */,
 				F44FEAD028B5465A00EC57B3 /* unittest_extension_chain_f.proto */,
 				F44FEAC828B5465900EC57B3 /* unittest_extension_chain_g.proto */,
-				F44FEAC328B5465900EC57B3 /* unittest_import_public_lite.proto */,
 				F44FEAC628B5465900EC57B3 /* unittest_import_public.proto */,
 				F44FEAC028B5465900EC57B3 /* unittest_import.proto */,
-				F44FEAC128B5465900EC57B3 /* unittest_mset_wire_format.proto */,
 				F44FEABF28B5465900EC57B3 /* unittest_mset.proto */,
 				8B35468421A616F6000BD30D /* unittest_objc_options.proto */,
 				F4CF31701B162ED800BD9B06 /* unittest_objc_startup.proto */,
diff --git a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
index 5dccdeb..8bbe96b 100644
--- a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
@@ -226,8 +226,6 @@
 		F44FEAD628B546E300EC57B3 /* unittest_deprecated.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_deprecated.proto; sourceTree = "<group>"; };
 		F44FEAD728B546E300EC57B3 /* any_test.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = any_test.proto; sourceTree = "<group>"; };
 		F44FEAD828B546E300EC57B3 /* unittest_extension_chain_b.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_extension_chain_b.proto; sourceTree = "<group>"; };
-		F44FEAD928B546E300EC57B3 /* unittest_import_public_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import_public_lite.proto; sourceTree = "<group>"; };
-		F44FEADA28B546E300EC57B3 /* unittest_mset_wire_format.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_mset_wire_format.proto; sourceTree = "<group>"; };
 		F44FEADB28B546E300EC57B3 /* unittest_import.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import.proto; sourceTree = "<group>"; };
 		F44FEADC28B546E300EC57B3 /* unittest_mset.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_mset.proto; sourceTree = "<group>"; };
 		F44FEADD28B546E300EC57B3 /* unittest.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest.proto; sourceTree = "<group>"; };
@@ -525,10 +523,8 @@
 				F44FEAE328B546E300EC57B3 /* unittest_extension_chain_e.proto */,
 				F44FEADE28B546E300EC57B3 /* unittest_extension_chain_f.proto */,
 				F44FEAE128B546E300EC57B3 /* unittest_extension_chain_g.proto */,
-				F44FEAD928B546E300EC57B3 /* unittest_import_public_lite.proto */,
 				F44FEAE028B546E300EC57B3 /* unittest_import_public.proto */,
 				F44FEADB28B546E300EC57B3 /* unittest_import.proto */,
-				F44FEADA28B546E300EC57B3 /* unittest_mset_wire_format.proto */,
 				F44FEADC28B546E300EC57B3 /* unittest_mset.proto */,
 				8B35468621A61EB2000BD30D /* unittest_objc_options.proto */,
 				F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */,
diff --git a/objectivec/ProtocolBuffers_tvOS.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_tvOS.xcodeproj/project.pbxproj
index c2925a9..6faf5eb 100644
--- a/objectivec/ProtocolBuffers_tvOS.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_tvOS.xcodeproj/project.pbxproj
@@ -218,9 +218,7 @@
 		F4487C801AAF62FC00531423 /* GPBMessageTests+Serialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Serialization.m"; sourceTree = "<group>"; };
 		F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Merge.m"; sourceTree = "<group>"; };
 		F44929021C866B3B00C2548A /* GPBCodedOutputStream_PackagePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBCodedOutputStream_PackagePrivate.h; sourceTree = "<group>"; };
-		F44FEAE428B5471300EC57B3 /* unittest_import_public_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import_public_lite.proto; sourceTree = "<group>"; };
 		F44FEAE528B5471300EC57B3 /* unittest_extension_chain_a.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_extension_chain_a.proto; sourceTree = "<group>"; };
-		F44FEAE628B5471300EC57B3 /* unittest_mset_wire_format.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_mset_wire_format.proto; sourceTree = "<group>"; };
 		F44FEAE728B5471300EC57B3 /* unittest_extension_chain_c.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_extension_chain_c.proto; sourceTree = "<group>"; };
 		F44FEAE828B5471300EC57B3 /* unittest_extension_chain_g.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_extension_chain_g.proto; sourceTree = "<group>"; };
 		F44FEAE928B5471300EC57B3 /* unittest_import.proto */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.protobuf; path = unittest_import.proto; sourceTree = "<group>"; };
@@ -525,10 +523,8 @@
 				F44FEAF428B5471300EC57B3 /* unittest_extension_chain_e.proto */,
 				F44FEAEC28B5471300EC57B3 /* unittest_extension_chain_f.proto */,
 				F44FEAE828B5471300EC57B3 /* unittest_extension_chain_g.proto */,
-				F44FEAE428B5471300EC57B3 /* unittest_import_public_lite.proto */,
 				F44FEAEB28B5471300EC57B3 /* unittest_import_public.proto */,
 				F44FEAE928B5471300EC57B3 /* unittest_import.proto */,
-				F44FEAE628B5471300EC57B3 /* unittest_mset_wire_format.proto */,
 				F44FEAF128B5471300EC57B3 /* unittest_mset.proto */,
 				8B35468621A61EB2000BD30D /* unittest_objc_options.proto */,
 				F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */,
diff --git a/objectivec/Tests/GPBARCUnittestProtos.m b/objectivec/Tests/GPBARCUnittestProtos.m
index 08b8426..fa23692 100644
--- a/objectivec/Tests/GPBARCUnittestProtos.m
+++ b/objectivec/Tests/GPBARCUnittestProtos.m
@@ -40,7 +40,6 @@
 #import "objectivec/Tests/UnittestDeprecatedFile.pbobjc.h"
 #import "objectivec/Tests/UnittestImport.pbobjc.h"
 #import "objectivec/Tests/UnittestImportPublic.pbobjc.h"
-#import "objectivec/Tests/UnittestImportPublicLite.pbobjc.h"
 #import "objectivec/Tests/UnittestMset.pbobjc.h"
 #import "objectivec/Tests/UnittestObjc.pbobjc.h"
 #import "objectivec/Tests/UnittestObjcOptions.pbobjc.h"
diff --git a/objectivec/Tests/GPBUnittestProtos.m b/objectivec/Tests/GPBUnittestProtos.m
index bebe4ee..6208e12 100644
--- a/objectivec/Tests/GPBUnittestProtos.m
+++ b/objectivec/Tests/GPBUnittestProtos.m
@@ -40,9 +40,7 @@
 #import "objectivec/Tests/UnittestDeprecatedFile.pbobjc.m"
 #import "objectivec/Tests/UnittestImport.pbobjc.m"
 #import "objectivec/Tests/UnittestImportPublic.pbobjc.m"
-#import "objectivec/Tests/UnittestImportPublicLite.pbobjc.m"
 #import "objectivec/Tests/UnittestMset.pbobjc.m"
-#import "objectivec/Tests/UnittestMsetWireFormat.pbobjc.m"
 #import "objectivec/Tests/UnittestObjc.pbobjc.m"
 #import "objectivec/Tests/UnittestObjcOptions.pbobjc.m"
 #import "objectivec/Tests/UnittestObjcStartup.pbobjc.m"
diff --git a/objectivec/Tests/GPBWellKnownTypesTest.m b/objectivec/Tests/GPBWellKnownTypesTest.m
index bd25d55..b7f28a6 100644
--- a/objectivec/Tests/GPBWellKnownTypesTest.m
+++ b/objectivec/Tests/GPBWellKnownTypesTest.m
@@ -161,9 +161,9 @@
 
   // Set and extract covers most of the code.
 
-  TestAny *subMessage = [TestAny message];
+  AnyTestMessage *subMessage = [AnyTestMessage message];
   subMessage.int32Value = 12345;
-  TestAny *message = [TestAny message];
+  AnyTestMessage *message = [AnyTestMessage message];
   NSError *err = nil;
   message.anyValue = [GPBAny anyWithMessage:subMessage error:&err];
   XCTAssertNil(err);
@@ -171,14 +171,14 @@
   NSData *data = message.data;
   XCTAssertNotNil(data);
 
-  TestAny *message2 = [TestAny parseFromData:data error:&err];
+  AnyTestMessage *message2 = [AnyTestMessage parseFromData:data error:&err];
   XCTAssertNil(err);
   XCTAssertNotNil(message2);
   XCTAssertTrue(message2.hasAnyValue);
 
-  TestAny *subMessage2 =
-      (TestAny *)[message.anyValue unpackMessageClass:[TestAny class]
-                                                error:&err];
+  AnyTestMessage *subMessage2 =
+      (AnyTestMessage *)[message.anyValue unpackMessageClass:[AnyTestMessage class]
+                                                       error:&err];
   XCTAssertNil(err);
   XCTAssertNotNil(subMessage2);
   XCTAssertEqual(subMessage2.int32Value, 12345);
@@ -189,9 +189,9 @@
   NSData *data2 = message.data;
   XCTAssertEqualObjects(data2, data);
 
-  TestAny *subMessage3 =
-      (TestAny *)[message.anyValue unpackMessageClass:[TestAny class]
-                                                error:NULL];
+  AnyTestMessage *subMessage3 =
+      (AnyTestMessage *)[message.anyValue unpackMessageClass:[AnyTestMessage class]
+                                                       error:NULL];
   XCTAssertNotNil(subMessage3);
   XCTAssertEqualObjects(subMessage2, subMessage3);
 
diff --git a/objectivec/Tests/GPBWireFormatTests.m b/objectivec/Tests/GPBWireFormatTests.m
index 24d68f9..e100667 100644
--- a/objectivec/Tests/GPBWireFormatTests.m
+++ b/objectivec/Tests/GPBWireFormatTests.m
@@ -35,7 +35,6 @@
 #import "GPBUnknownField_PackagePrivate.h"
 #import "objectivec/Tests/Unittest.pbobjc.h"
 #import "objectivec/Tests/UnittestMset.pbobjc.h"
-#import "objectivec/Tests/UnittestMsetWireFormat.pbobjc.h"
 
 @interface WireFormatTests : GPBTestCase
 @end
@@ -144,11 +143,11 @@
 const int kUnknownTypeId = 1550055;
 
 - (void)testSerializeMessageSet {
-  // Set up a TestMessageSet with two known messages and an unknown one.
-  TestMessageSet* message_set = [TestMessageSet message];
-  [[message_set getExtension:[TestMessageSetExtension1 messageSetExtension]]
+  // Set up a MSetMessage with two known messages and an unknown one.
+  MSetMessage* message_set = [MSetMessage message];
+  [[message_set getExtension:[MSetMessageExtension1 messageSetExtension]]
       setI:123];
-  [[message_set getExtension:[TestMessageSetExtension2 messageSetExtension]]
+  [[message_set getExtension:[MSetMessageExtension2 messageSetExtension]]
       setStr:@"foo"];
   GPBUnknownField* unknownField =
       [[[GPBUnknownField alloc] initWithNumber:kUnknownTypeId] autorelease];
@@ -160,26 +159,26 @@
 
   NSData* data = [message_set data];
 
-  // Parse back using RawMessageSet and check the contents.
-  RawMessageSet* raw = [RawMessageSet parseFromData:data error:NULL];
+  // Parse back using MSetRawMessageSet and check the contents.
+  MSetRawMessageSet* raw = [MSetRawMessageSet parseFromData:data error:NULL];
 
   XCTAssertEqual([raw.unknownFields countOfFields], (NSUInteger)0);
 
   XCTAssertEqual(raw.itemArray.count, (NSUInteger)3);
   XCTAssertEqual((uint32_t)[raw.itemArray[0] typeId],
-                 [TestMessageSetExtension1 messageSetExtension].fieldNumber);
+                 [MSetMessageExtension1 messageSetExtension].fieldNumber);
   XCTAssertEqual((uint32_t)[raw.itemArray[1] typeId],
-                 [TestMessageSetExtension2 messageSetExtension].fieldNumber);
+                 [MSetMessageExtension2 messageSetExtension].fieldNumber);
   XCTAssertEqual([raw.itemArray[2] typeId], kUnknownTypeId);
 
-  TestMessageSetExtension1* message1 =
-      [TestMessageSetExtension1 parseFromData:[((RawMessageSet_Item*)raw.itemArray[0]) message]
-                                        error:NULL];
+  MSetMessageExtension1* message1 =
+      [MSetMessageExtension1 parseFromData:[((MSetRawMessageSet_Item*)raw.itemArray[0]) message]
+                                     error:NULL];
   XCTAssertEqual(message1.i, 123);
 
-  TestMessageSetExtension2* message2 =
-      [TestMessageSetExtension2 parseFromData:[((RawMessageSet_Item*)raw.itemArray[1]) message]
-                                        error:NULL];
+  MSetMessageExtension2* message2 =
+      [MSetMessageExtension2 parseFromData:[((MSetRawMessageSet_Item*)raw.itemArray[1]) message]
+                                     error:NULL];
   XCTAssertEqualObjects(message2.str, @"foo");
 
   XCTAssertEqualObjects([raw.itemArray[2] message],
@@ -187,29 +186,29 @@
 }
 
 - (void)testParseMessageSet {
-  // Set up a RawMessageSet with two known messages and an unknown one.
-  RawMessageSet* raw = [RawMessageSet message];
+  // Set up a MSetRawMessageSet with two known messages and an unknown one.
+  MSetRawMessageSet* raw = [MSetRawMessageSet message];
 
   {
-    RawMessageSet_Item* item = [RawMessageSet_Item message];
-    item.typeId = [TestMessageSetExtension1 messageSetExtension].fieldNumber;
-    TestMessageSetExtension1* message = [TestMessageSetExtension1 message];
+    MSetRawMessageSet_Item* item = [MSetRawMessageSet_Item message];
+    item.typeId = [MSetMessageExtension1 messageSetExtension].fieldNumber;
+    MSetMessageExtension1* message = [MSetMessageExtension1 message];
     message.i = 123;
     item.message = [message data];
     [raw.itemArray addObject:item];
   }
 
   {
-    RawMessageSet_Item* item = [RawMessageSet_Item message];
-    item.typeId = [TestMessageSetExtension2 messageSetExtension].fieldNumber;
-    TestMessageSetExtension2* message = [TestMessageSetExtension2 message];
+    MSetRawMessageSet_Item* item = [MSetRawMessageSet_Item message];
+    item.typeId = [MSetMessageExtension2 messageSetExtension].fieldNumber;
+    MSetMessageExtension2* message = [MSetMessageExtension2 message];
     message.str = @"foo";
     item.message = [message data];
     [raw.itemArray addObject:item];
   }
 
   {
-    RawMessageSet_Item* item = [RawMessageSet_Item message];
+    MSetRawMessageSet_Item* item = [MSetRawMessageSet_Item message];
     item.typeId = kUnknownTypeId;
     item.message = [NSData dataWithBytes:"bar" length:3];
     [raw.itemArray addObject:item];
@@ -217,19 +216,19 @@
 
   NSData* data = [raw data];
 
-  // Parse as a TestMessageSet and check the contents.
-  TestMessageSet* messageSet =
-      [TestMessageSet parseFromData:data
-                  extensionRegistry:[UnittestMsetRoot extensionRegistry]
+  // Parse as a MSetMessage and check the contents.
+  MSetMessage* messageSet =
+      [MSetMessage parseFromData:data
+                  extensionRegistry:[MSetUnittestMsetRoot extensionRegistry]
                               error:NULL];
 
   XCTAssertEqual(
       [[messageSet
-          getExtension:[TestMessageSetExtension1 messageSetExtension]] i],
+          getExtension:[MSetMessageExtension1 messageSetExtension]] i],
       123);
   XCTAssertEqualObjects(
       [[messageSet
-          getExtension:[TestMessageSetExtension2 messageSetExtension]] str],
+          getExtension:[MSetMessageExtension2 messageSetExtension]] str],
       @"foo");
 
   XCTAssertEqual([messageSet.unknownFields countOfFields], (NSUInteger)1);
diff --git a/objectivec/Tests/any_test.proto b/objectivec/Tests/any_test.proto
index 032c620..f2461bf 100644
--- a/objectivec/Tests/any_test.proto
+++ b/objectivec/Tests/any_test.proto
@@ -30,11 +30,13 @@
 
 syntax = "proto3";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.any;
 
 import "google/protobuf/any.proto";
 
-message TestAny {
+option objc_class_prefix = "Any";
+
+message TestMessage {
   int32 int32_value = 1;
   google.protobuf.Any any_value = 2;
   repeated google.protobuf.Any repeated_any_value = 3;
diff --git a/objectivec/Tests/expected_prefixes.txt b/objectivec/Tests/expected_prefixes.txt
new file mode 100644
index 0000000..1665ab1
--- /dev/null
+++ b/objectivec/Tests/expected_prefixes.txt
@@ -0,0 +1,12 @@
+objc.protobuf.tests = ""  # Explicit empty prefix
+objc.protobuf.tests.any = Any
+objc.protobuf.tests.chain = Chain
+objc.protobuf.tests.cycle = Cycle
+objc.protobuf.tests.deprecated = Dep
+objc.protobuf.tests.deprecated_file = FileDep
+objc.protobuf.tests.import = Import
+objc.protobuf.tests.mset = MSet
+objc.protobuf.tests.options = GPBTEST
+objc.protobuf.tests.proto3_preserve_unknown_enum = UnknownEnums
+objc.protobuf.tests.public_import = PublicImport
+objc.protobuf.tests.startup = TestObjCStartup
diff --git a/objectivec/Tests/map_proto2_unittest.proto b/objectivec/Tests/map_proto2_unittest.proto
index 30e4ae1..d7b494c 100644
--- a/objectivec/Tests/map_proto2_unittest.proto
+++ b/objectivec/Tests/map_proto2_unittest.proto
@@ -32,11 +32,11 @@
 
 import "objectivec/Tests/unittest_import.proto";
 
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In map_test_util.h we do "using namespace unittest = objc.protobuf.tests".
 package objc.protobuf.tests;
 
+// Explicit empty prefix, tests some validations code paths also.
+option objc_class_prefix = "";
+
 enum Proto2MapEnum {
   PROTO2_MAP_ENUM_FOO   = 0;
   PROTO2_MAP_ENUM_BAR   = 1;
@@ -61,7 +61,7 @@
 }
 
 message TestImportEnumMap {
-  map<int32, objc.protobuf.tests.import.ImportEnumForMap> import_enum_amp = 1;
+  map<int32, objc.protobuf.tests.import.EnumForMap> import_enum_amp = 1;
 }
 
 message TestIntIntMap {
diff --git a/objectivec/Tests/map_unittest.proto b/objectivec/Tests/map_unittest.proto
index 8a4a529..ba41439 100644
--- a/objectivec/Tests/map_unittest.proto
+++ b/objectivec/Tests/map_unittest.proto
@@ -32,11 +32,11 @@
 
 import "objectivec/Tests/unittest.proto";
 
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In map_test_util.h we do "using namespace unittest = objc.protobuf.tests".
 package objc.protobuf.tests;
 
+// Explicit empty prefix, tests some validations code paths also.
+option objc_class_prefix = "";
+
 // Tests maps.
 message TestMap {
   map<int32, int32> map_int32_int32 = 1;
diff --git a/objectivec/Tests/unittest.proto b/objectivec/Tests/unittest.proto
index 6414993..31353b4 100644
--- a/objectivec/Tests/unittest.proto
+++ b/objectivec/Tests/unittest.proto
@@ -28,21 +28,15 @@
 // (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: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// A proto file we will use for unit testing.
-//
 // LINT: ALLOW_GROUPS, LEGACY_NAMES
 
 syntax = "proto2";
 
 import "objectivec/Tests/unittest_import.proto";
 
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In test_util.h we do "using namespace unittest = objc.protobuf.tests".
+// Explicit empty prefix, tests some validations code paths also.
+option objc_class_prefix = "";
+
 package objc.protobuf.tests;
 
 // This proto includes every type of field in both singular and repeated
@@ -85,17 +79,17 @@
 
   optional NestedMessage                        optional_nested_message  = 18;
   optional ForeignMessage                       optional_foreign_message = 19;
-  optional objc.protobuf.tests.import.ImportMessage optional_import_message  = 20;
+  optional objc.protobuf.tests.import.Message   optional_import_message  = 20;
 
   optional NestedEnum                           optional_nested_enum     = 21;
   optional ForeignEnum                          optional_foreign_enum    = 22;
-  optional objc.protobuf.tests.import.ImportEnum    optional_import_enum     = 23;
+  optional objc.protobuf.tests.import.Enum      optional_import_enum     = 23;
 
   optional string optional_string_piece = 24 [ctype=STRING_PIECE];
   optional string optional_cord = 25 [ctype=CORD];
 
   // Defined in unittest_import_public.proto
-  optional objc.protobuf.tests.import.PublicImportMessage
+  optional objc.protobuf.tests.public_import.Message
       optional_public_import_message = 26;
 
   optional NestedMessage optional_lazy_message = 27 [lazy=true];
@@ -124,11 +118,11 @@
 
   repeated NestedMessage                        repeated_nested_message  = 48;
   repeated ForeignMessage                       repeated_foreign_message = 49;
-  repeated objc.protobuf.tests.import.ImportMessage repeated_import_message  = 50;
+  repeated objc.protobuf.tests.import.Message   repeated_import_message  = 50;
 
   repeated NestedEnum                           repeated_nested_enum     = 51;
   repeated ForeignEnum                          repeated_foreign_enum    = 52;
-  repeated objc.protobuf.tests.import.ImportEnum    repeated_import_enum     = 53;
+  repeated objc.protobuf.tests.import.Enum      repeated_import_enum     = 53;
 
   repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
   repeated string repeated_cord = 55 [ctype=CORD];
@@ -154,7 +148,7 @@
 
   optional NestedEnum  default_nested_enum  = 81 [default = BAR        ];
   optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
-  optional objc.protobuf.tests.import.ImportEnum
+  optional objc.protobuf.tests.import.Enum
       default_import_enum = 83 [default = IMPORT_BAR];
 
   optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
@@ -241,18 +235,18 @@
 
   optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
   optional ForeignMessage optional_foreign_message_extension = 19;
-  optional objc.protobuf.tests.import.ImportMessage
+  optional objc.protobuf.tests.import.Message
     optional_import_message_extension = 20;
 
   optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
   optional ForeignEnum optional_foreign_enum_extension = 22;
-  optional objc.protobuf.tests.import.ImportEnum
+  optional objc.protobuf.tests.import.Enum
     optional_import_enum_extension = 23;
 
   optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
   optional string optional_cord_extension = 25 [ctype=CORD];
 
-  optional objc.protobuf.tests.import.PublicImportMessage
+  optional objc.protobuf.tests.public_import.Message
     optional_public_import_message_extension = 26;
 
   optional TestAllTypes.NestedMessage
@@ -283,12 +277,12 @@
 
   repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
   repeated ForeignMessage repeated_foreign_message_extension = 49;
-  repeated objc.protobuf.tests.import.ImportMessage
+  repeated objc.protobuf.tests.import.Message
     repeated_import_message_extension = 50;
 
   repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
   repeated ForeignEnum repeated_foreign_enum_extension = 52;
-  repeated objc.protobuf.tests.import.ImportEnum
+  repeated objc.protobuf.tests.import.Enum
     repeated_import_enum_extension = 53;
 
   repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
@@ -318,7 +312,7 @@
     default_nested_enum_extension = 81 [default = BAR];
   optional ForeignEnum
     default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
-  optional objc.protobuf.tests.import.ImportEnum
+  optional objc.protobuf.tests.import.Enum
     default_import_enum_extension = 83 [default = IMPORT_BAR];
 
   optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
diff --git a/objectivec/Tests/unittest_cycle.proto b/objectivec/Tests/unittest_cycle.proto
index 6d6927d..91e33ce 100644
--- a/objectivec/Tests/unittest_cycle.proto
+++ b/objectivec/Tests/unittest_cycle.proto
@@ -29,7 +29,9 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.cycle;
+
+option objc_class_prefix = "Cycle";
 
 // Cycles in the Message graph can cause problems for message class
 // initialization order.
@@ -37,20 +39,20 @@
 // You can't make a object graph that spans files, so this can only be done
 // within a single proto file.
 
-message CycleFoo {
-  optional CycleFoo a_foo = 1;
-  optional CycleBar a_bar = 2;
-  optional CycleBaz a_baz = 3;
+message Foo {
+  optional Foo a_foo = 1;
+  optional Bar a_bar = 2;
+  optional Baz a_baz = 3;
 }
 
-message CycleBar {
-  optional CycleBar a_bar = 1;
-  optional CycleBaz a_baz = 2;
-  optional CycleFoo a_foo = 3;
+message Bar {
+  optional Bar a_bar = 1;
+  optional Baz a_baz = 2;
+  optional Foo a_foo = 3;
 }
 
-message CycleBaz {
-  optional CycleBaz a_baz = 1;
-  optional CycleFoo a_foo = 2;
-  optional CycleBar a_bar = 3;
+message Baz {
+  optional Baz a_baz = 1;
+  optional Foo a_foo = 2;
+  optional Bar a_bar = 3;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_a.proto b/objectivec/Tests/unittest_extension_chain_a.proto
index bcce42a..2e09a40 100644
--- a/objectivec/Tests/unittest_extension_chain_a.proto
+++ b/objectivec/Tests/unittest_extension_chain_a.proto
@@ -29,7 +29,7 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest.proto";
 
@@ -37,15 +37,17 @@
 import "objectivec/Tests/unittest_extension_chain_c.proto";
 import "objectivec/Tests/unittest_extension_chain_d.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should end up adding the local extension and merging
 // in the extensions from D's Root (unittest and C will come via D's).
 
-message ChainAMessage {
-  optional ChainBMessage b = 1;
-  optional ChainCMessage c = 2;
-  optional ChainDMessage d = 3;
+message AMessage {
+  optional BMessage b = 1;
+  optional CMessage c = 2;
+  optional DMessage d = 3;
 }
 
-extend TestAllExtensions {
+extend objc.protobuf.tests.TestAllExtensions {
   optional int32 chain_a_extension = 10001;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_b.proto b/objectivec/Tests/unittest_extension_chain_b.proto
index a4055fe..5cf7ea3 100644
--- a/objectivec/Tests/unittest_extension_chain_b.proto
+++ b/objectivec/Tests/unittest_extension_chain_b.proto
@@ -29,19 +29,21 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest.proto";
 
 import "objectivec/Tests/unittest_extension_chain_c.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should end up adding the local extension and merging
 // in the extensions from C's Root (unittest will come via C's).
 
-message ChainBMessage {
-  optional ChainCMessage c = 1;
+message BMessage {
+  optional CMessage c = 1;
 }
 
-extend TestAllExtensions {
+extend objc.protobuf.tests.TestAllExtensions {
   optional int32 chain_b_extension = 10002;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_c.proto b/objectivec/Tests/unittest_extension_chain_c.proto
index b30e20b..b07b288 100644
--- a/objectivec/Tests/unittest_extension_chain_c.proto
+++ b/objectivec/Tests/unittest_extension_chain_c.proto
@@ -29,17 +29,19 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should end up adding the local extension and merging
 // in the extensions from unittest.proto's Root.
 
-message ChainCMessage {
+message CMessage {
   optional int32 my_field = 1;
 }
 
-extend TestAllExtensions {
+extend objc.protobuf.tests.TestAllExtensions {
   optional int32 chain_c_extension = 10003;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_d.proto b/objectivec/Tests/unittest_extension_chain_d.proto
index f12040b..44d9ee8 100644
--- a/objectivec/Tests/unittest_extension_chain_d.proto
+++ b/objectivec/Tests/unittest_extension_chain_d.proto
@@ -29,21 +29,23 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest.proto";
 
 import "objectivec/Tests/unittest_extension_chain_b.proto";
 import "objectivec/Tests/unittest_extension_chain_c.proto";
 
+option objc_class_prefix = "Chain";
+
 // The root should end up needing to merge B (C will be merged into B, so it
 // doesn't need to be directly merged).
 
-message ChainDMessage {
-  optional ChainBMessage b = 1;
-  optional ChainCMessage c = 2;
+message DMessage {
+  optional BMessage b = 1;
+  optional CMessage c = 2;
 }
 
-extend TestAllExtensions {
+extend objc.protobuf.tests.TestAllExtensions {
   optional int32 chain_d_extension = 10004;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_e.proto b/objectivec/Tests/unittest_extension_chain_e.proto
index 6087fd0..9c7cea8 100644
--- a/objectivec/Tests/unittest_extension_chain_e.proto
+++ b/objectivec/Tests/unittest_extension_chain_e.proto
@@ -29,12 +29,14 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should end up just merging in unittest's Root.
 
-message ChainEMessage {
+message EMessage {
   optional TestAllTypes my_field = 1;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_f.proto b/objectivec/Tests/unittest_extension_chain_f.proto
index 520f895..33fcaf9 100644
--- a/objectivec/Tests/unittest_extension_chain_f.proto
+++ b/objectivec/Tests/unittest_extension_chain_f.proto
@@ -29,16 +29,18 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest_extension_chain_g.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should just be merging in the extensions from C's
 // Root (because G doesn't define anything itself).
 
 // The generated source will also have to directly import C's .h file so it can
 // compile the reference to C's Root class.
 
-message ChainFMessage {
-  optional ChainGMessage g = 1;
+message FMessage {
+  optional GMessage g = 1;
 }
diff --git a/objectivec/Tests/unittest_extension_chain_g.proto b/objectivec/Tests/unittest_extension_chain_g.proto
index 435e8e6..9044e46 100644
--- a/objectivec/Tests/unittest_extension_chain_g.proto
+++ b/objectivec/Tests/unittest_extension_chain_g.proto
@@ -29,13 +29,15 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests;
+package objc.protobuf.tests.chain;
 
 import "objectivec/Tests/unittest_extension_chain_c.proto";
 
+option objc_class_prefix = "Chain";
+
 // The Root for this file should just be merging in the extensions from C's
 // Root.
 
-message ChainGMessage {
-  optional ChainCMessage c = 1;
+message GMessage {
+  optional CMessage c = 1;
 }
diff --git a/objectivec/Tests/unittest_import.proto b/objectivec/Tests/unittest_import.proto
index 7d3ee25..8b8996f 100644
--- a/objectivec/Tests/unittest_import.proto
+++ b/objectivec/Tests/unittest_import.proto
@@ -28,10 +28,6 @@
 // (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: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
 // A proto file which is imported by unittest.proto to test importing.
 
 syntax = "proto2";
@@ -41,11 +37,13 @@
 // Test public import
 import public "objectivec/Tests/unittest_import_public.proto";
 
-message ImportMessage {
+option objc_class_prefix = "Import";
+
+message Message {
   optional int32 d = 1;
 }
 
-enum ImportEnum {
+enum Enum {
   IMPORT_FOO = 7;
   IMPORT_BAR = 8;
   IMPORT_BAZ = 9;
@@ -53,7 +51,7 @@
 
 
 // To use an enum in a map, it must has the first value as 0.
-enum ImportEnumForMap {
+enum EnumForMap {
   UNKNOWN = 0;
   FOO = 1;
   BAR = 2;
diff --git a/objectivec/Tests/unittest_import_public.proto b/objectivec/Tests/unittest_import_public.proto
index c7f8ed8..05969b6 100644
--- a/objectivec/Tests/unittest_import_public.proto
+++ b/objectivec/Tests/unittest_import_public.proto
@@ -32,8 +32,10 @@
 
 syntax = "proto2";
 
-package objc.protobuf.tests.import;
+package objc.protobuf.tests.public_import;
 
-message PublicImportMessage {
+option objc_class_prefix = "PublicImport";
+
+message Message {
   optional int32 e = 1;
 }
diff --git a/objectivec/Tests/unittest_import_public_lite.proto b/objectivec/Tests/unittest_import_public_lite.proto
deleted file mode 100644
index 92d95b9..0000000
--- a/objectivec/Tests/unittest_import_public_lite.proto
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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: liujisi@google.com (Pherl Liu)
-
-syntax = "proto2";
-
-package objc.protobuf.tests.import;
-
-option optimize_for = LITE_RUNTIME;
-
-message PublicImportMessageLite {
-  optional int32 e = 1;
-}
diff --git a/objectivec/Tests/unittest_mset.proto b/objectivec/Tests/unittest_mset.proto
index e53040b..9ff070f 100644
--- a/objectivec/Tests/unittest_mset.proto
+++ b/objectivec/Tests/unittest_mset.proto
@@ -28,68 +28,34 @@
 // (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: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// This file is similar to unittest_mset_wire_format.proto, but does not
-// have a TestMessageSet, so it can be downgraded to proto1.
-
 syntax = "proto2";
 
-import "objectivec/Tests/unittest_mset_wire_format.proto";
+package objc.protobuf.tests.mset;
 
-package objc.protobuf.tests;
+option objc_class_prefix = "MSet";
 
-message TestMessageSetContainer {
-  optional objc.protobuf.tests.wireformat.TestMessageSet message_set = 1;
+// A message with message_set_wire_format.
+message Message {
+  option message_set_wire_format = true;
+  extensions 4 to max;
 }
 
-message NestedTestMessageSetContainer {
-  optional TestMessageSetContainer container = 1;
-  optional NestedTestMessageSetContainer child = 2;
-}
-
-message NestedTestInt {
-  optional fixed32 a = 1;
-  optional int32 b = 3;
-  optional NestedTestInt child = 2;
-}
-
-message TestMessageSetExtension1 {
-  extend objc.protobuf.tests.wireformat.TestMessageSet {
-    optional TestMessageSetExtension1 message_set_extension = 1545008;
+message MessageExtension1 {
+  extend Message {
+    optional MessageExtension1 message_set_extension = 1545008;
   }
   optional int32 i = 15;
-  optional objc.protobuf.tests.wireformat.TestMessageSet recursive = 16;
+  optional Message recursive = 16;
   optional string test_aliasing = 17 [ctype = STRING_PIECE];
 }
 
-message TestMessageSetExtension2 {
-  extend objc.protobuf.tests.wireformat.TestMessageSet {
-    optional TestMessageSetExtension2 message_set_extension = 1547769;
+message MessageExtension2 {
+  extend Message {
+    optional MessageExtension2 message_set_extension = 1547769;
   }
   optional string str = 25;
 }
 
-message TestMessageSetExtension3 {
-  extend objc.protobuf.tests.wireformat.TestMessageSet {
-    optional TestMessageSetExtension3 message_set_extension = 195273129;
-  }
-  optional NestedTestInt msg = 35;
-}
-
-// This message was used to generate
-// //net/proto2/python/internal/testdata/message_set_message, but is commented
-// out since it must not actually exist in code, to simulate an "unknown"
-// extension.
-// message TestMessageSetUnknownExtension {
-//   extend TestMessageSet {
-//     optional TestMessageSetUnknownExtension message_set_extension = 56141421;
-//   }
-//   optional int64 a = 1;
-// }
-
 // MessageSet wire format is equivalent to this.
 message RawMessageSet {
   repeated group Item = 1 {
diff --git a/objectivec/Tests/unittest_mset_wire_format.proto b/objectivec/Tests/unittest_mset_wire_format.proto
deleted file mode 100644
index d0150ad..0000000
--- a/objectivec/Tests/unittest_mset_wire_format.proto
+++ /dev/null
@@ -1,48 +0,0 @@
-// 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: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// This file contains messages for testing message_set_wire_format.
-
-syntax = "proto2";
-package objc.protobuf.tests.wireformat;
-
-// A message with message_set_wire_format.
-message TestMessageSet {
-  option message_set_wire_format = true;
-  extensions 4 to max;
-}
-
-message TestMessageSetWireFormatContainer {
-  optional TestMessageSet message_set = 1;
-}
diff --git a/objectivec/Tests/unittest_objc.proto b/objectivec/Tests/unittest_objc.proto
index 63da921..aed200b 100644
--- a/objectivec/Tests/unittest_objc.proto
+++ b/objectivec/Tests/unittest_objc.proto
@@ -34,6 +34,9 @@
 
 package objc.protobuf.tests;
 
+// Explicit empty prefix, tests some validations code paths also.
+option objc_class_prefix = "";
+
 // Used to check that Headerdocs and appledoc work correctly. If these comments
 // are not handled correctly, Xcode will fail to build the tests.
 message TestGeneratedComments {
diff --git a/objectivec/Tests/unittest_objc_startup.proto b/objectivec/Tests/unittest_objc_startup.proto
index 711431c..f2bf9d5 100644
--- a/objectivec/Tests/unittest_objc_startup.proto
+++ b/objectivec/Tests/unittest_objc_startup.proto
@@ -31,19 +31,20 @@
 syntax = "proto2";
 
 package objc.protobuf.tests.startup;
+option objc_class_prefix = "TestObjCStartup";
 
-message TestObjCStartupMessage {
+message Message {
   extensions 1 to max;
 }
 
-extend TestObjCStartupMessage {
+extend Message {
   // Singular
   optional    int32 optional_int32_extension    = 1;
   repeated    int32 repeated_int32_extension    = 2;
 }
 
-message TestObjCStartupNested {
-  extend TestObjCStartupMessage {
+message Nested {
+  extend Message {
     optional string nested_string_extension = 3;
   }
 }
diff --git a/objectivec/Tests/unittest_runtime_proto2.proto b/objectivec/Tests/unittest_runtime_proto2.proto
index 3be7f33..12c2b1c 100644
--- a/objectivec/Tests/unittest_runtime_proto2.proto
+++ b/objectivec/Tests/unittest_runtime_proto2.proto
@@ -29,8 +29,11 @@
 
 syntax = "proto2";
 
+// Explicit empty prefix, tests some validations code paths also.
 package objc.protobuf.tests;
 
+option objc_class_prefix = "";
+
 message Message2 {
   enum Enum {
     FOO = 0;
diff --git a/objectivec/Tests/unittest_runtime_proto3.proto b/objectivec/Tests/unittest_runtime_proto3.proto
index 6dacbbb..d6d4380 100644
--- a/objectivec/Tests/unittest_runtime_proto3.proto
+++ b/objectivec/Tests/unittest_runtime_proto3.proto
@@ -29,8 +29,11 @@
 
 syntax = "proto3";
 
+// Explicit empty prefix, tests some validations code paths also.
 package objc.protobuf.tests;
 
+option objc_class_prefix = "";
+
 message Message3 {
   enum Enum {
     FOO = 0;