Removing Proto3LiteTest
diff --git a/BUILD b/BUILD
index e4393d9..27ee9e5 100644
--- a/BUILD
+++ b/BUILD
@@ -1530,7 +1530,7 @@
 genrule(
     name = "gen_kotlin_proto3_unittest_lite",
     srcs = [
-        "src/google/protobuf/unittest_proto3_lite.proto",
+        "src/google/protobuf/unittest_proto3.proto",
         "src/google/protobuf/unittest_import.proto",
         "src/google/protobuf/unittest_import_public.proto",
     ],
@@ -1541,10 +1541,10 @@
     visibility = ["//java:__subpackages__"],
     cmd = "$(location //:protoc) " +
           "--kotlin_out=lite:$(@D) -Isrc/ " +
-          "$(location src/google/protobuf/unittest_proto3_lite.proto) && " +
-          "cp $(@D)/proto3_lite_unittest/TestAllTypesKt.kt " +
+          "$(location src/google/protobuf/unittest_proto3.proto) && " +
+          "cp $(@D)/proto3_unittest/TestAllTypesKt.kt " +
           "$(location TestAllTypesProto3LiteKt.kt) && " +
-          "cp $(@D)/proto3_lite_unittest/TestEmptyMessageKt.kt " +
+          "cp $(@D)/proto3_unittest/TestEmptyMessageKt.kt " +
           "$(location TestEmptyMessageProto3LiteKt.kt)",
     tools = ["//:protoc"],
 )
diff --git a/java/kotlin-lite/BUILD b/java/kotlin-lite/BUILD
index bfd7b8d..0d1694c 100644
--- a/java/kotlin-lite/BUILD
+++ b/java/kotlin-lite/BUILD
@@ -168,7 +168,7 @@
 
 kt_jvm_library(
     name = "proto3_test_lite_library",
-    srcs = ["src/test/kotlin/com/google/protobuf/Proto3LiteTest.kt"],
+    srcs = ["//java/kotlin:src/test/kotlin/com/google/protobuf/Proto3Test.kt"],
     deps = [
         ":kotlin_proto3_unittest_lite",
         "//java/core:test_util_lite",
@@ -180,5 +180,5 @@
 java_test(
     name = "proto3_test_lite",
     runtime_deps = [":proto3_test_lite_library"],
-    test_class = "com.google.protobuf.kotlin.Proto3LiteTest",
+    test_class = "com.google.protobuf.kotlin.Proto3Test",
 )
diff --git a/java/kotlin-lite/src/test/kotlin/com/google/protobuf/Proto3LiteTest.kt b/java/kotlin-lite/src/test/kotlin/com/google/protobuf/Proto3LiteTest.kt
deleted file mode 100644
index 8d3680a..0000000
--- a/java/kotlin-lite/src/test/kotlin/com/google/protobuf/Proto3LiteTest.kt
+++ /dev/null
@@ -1,365 +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.
-
-package com.google.protobuf.kotlin
-
-import com.google.common.truth.Truth.assertThat
-import com.google.protobuf.kotlin.generator.EvilNamesProto3OuterClass.Class
-import com.google.protobuf.kotlin.generator.EvilNamesProto3OuterClass.EvilNamesProto3
-import com.google.protobuf.kotlin.generator.EvilNamesProto3OuterClass.HardKeywordsAllTypesProto3
-import com.google.protobuf.kotlin.generator.HardKeywordsAllTypesProto3Kt
-import com.google.protobuf.kotlin.generator.class_
-import com.google.protobuf.kotlin.generator.evilNamesProto3
-import com.google.protobuf.kotlin.generator.hardKeywordsAllTypesProto3
-import proto3_lite_unittest.TestAllTypesKt
-import proto3_lite_unittest.TestAllTypesKt.nestedMessage
-import proto3_lite_unittest.UnittestProto3Lite.TestAllTypes
-import proto3_lite_unittest.UnittestProto3Lite.TestAllTypes.NestedEnum
-import proto3_lite_unittest.UnittestProto3Lite.TestEmptyMessage
-import proto3_lite_unittest.copy
-import proto3_lite_unittest.testAllTypes
-import proto3_lite_unittest.testEmptyMessage
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class Proto3LiteTest {
-  @Test
-  fun testGettersAndSetters() {
-    testAllTypes {
-      optionalInt32 = 101
-      assertThat(optionalInt32).isEqualTo(101)
-      optionalString = "115"
-      assertThat(optionalString).isEqualTo("115")
-      optionalNestedMessage = TestAllTypesKt.nestedMessage { bb = 118 }
-      assertThat(optionalNestedMessage).isEqualTo(TestAllTypesKt.nestedMessage { bb = 118 })
-      optionalNestedEnum = NestedEnum.BAZ
-      assertThat(optionalNestedEnum).isEqualTo(NestedEnum.BAZ)
-      oneofUint32 = 601
-      assertThat(oneofUint32).isEqualTo(601)
-    }
-  }
-
-  @Test
-  fun testRepeatedGettersAndSetters() {
-    testAllTypes {
-      repeatedInt32.addAll(listOf(1, 2))
-      assertThat(repeatedInt32).isEqualTo(listOf(1, 2))
-      repeatedInt32 += listOf(3, 4)
-      assertThat(repeatedInt32).isEqualTo(listOf(1, 2, 3, 4))
-      repeatedInt32[0] = 5
-      assertThat(repeatedInt32).isEqualTo(listOf(5, 2, 3, 4))
-
-      repeatedString.addAll(listOf("1", "2"))
-      assertThat(repeatedString).isEqualTo(listOf("1", "2"))
-      repeatedString += listOf("3", "4")
-      assertThat(repeatedString).isEqualTo(listOf("1", "2", "3", "4"))
-      repeatedString[0] = "5"
-      assertThat(repeatedString).isEqualTo(listOf("5", "2", "3", "4"))
-
-      repeatedNestedMessage.addAll(listOf(nestedMessage { bb = 1 }, nestedMessage { bb = 2 }))
-      assertThat(repeatedNestedMessage).isEqualTo(
-        listOf(
-          nestedMessage { bb = 1 },
-          nestedMessage { bb = 2 }
-        )
-      )
-      repeatedNestedMessage += listOf(nestedMessage { bb = 3 }, nestedMessage { bb = 4 })
-      assertThat(repeatedNestedMessage).isEqualTo(
-        listOf(
-          nestedMessage { bb = 1 },
-          nestedMessage { bb = 2 },
-          nestedMessage { bb = 3 },
-          nestedMessage { bb = 4 }
-        )
-      )
-      repeatedNestedMessage[0] = nestedMessage { bb = 5 }
-      assertThat(repeatedNestedMessage).isEqualTo(
-        listOf(
-          nestedMessage { bb = 5 },
-          nestedMessage { bb = 2 },
-          nestedMessage { bb = 3 },
-          nestedMessage { bb = 4 }
-        )
-      )
-
-      repeatedNestedEnum.addAll(listOf(NestedEnum.FOO, NestedEnum.BAR))
-      assertThat(repeatedNestedEnum).isEqualTo(listOf(NestedEnum.FOO, NestedEnum.BAR))
-      repeatedNestedEnum += listOf(NestedEnum.BAZ, NestedEnum.FOO)
-      assertThat(repeatedNestedEnum).isEqualTo(
-        listOf(NestedEnum.FOO, NestedEnum.BAR, NestedEnum.BAZ, NestedEnum.FOO)
-      )
-      repeatedNestedEnum[0] = NestedEnum.BAR
-      assertThat(repeatedNestedEnum).isEqualTo(
-        listOf(NestedEnum.BAR, NestedEnum.BAR, NestedEnum.BAZ, NestedEnum.FOO)
-      )
-    }
-  }
-
-  @Test
-  fun testClears() {
-    assertThat(
-      testAllTypes {
-        optionalInt32 = 101
-        clearOptionalInt32()
-
-        optionalString = "115"
-        clearOptionalString()
-
-        optionalNestedMessage = TestAllTypesKt.nestedMessage { bb = 118 }
-        clearOptionalNestedMessage()
-
-        optionalNestedEnum = NestedEnum.BAZ
-        clearOptionalNestedEnum()
-
-        oneofUint32 = 601
-        clearOneofUint32()
-      }
-    ).isEqualTo(
-      TestAllTypes.newBuilder().build()
-    )
-  }
-
-  @Test
-  fun testCopy() {
-    val message = testAllTypes {
-      optionalInt32 = 101
-      optionalString = "115"
-    }
-    val modifiedMessage = message.copy {
-      optionalInt32 = 201
-    }
-
-    assertThat(message).isEqualTo(
-      TestAllTypes.newBuilder()
-        .setOptionalInt32(101)
-        .setOptionalString("115")
-        .build()
-    )
-    assertThat(modifiedMessage).isEqualTo(
-      TestAllTypes.newBuilder()
-        .setOptionalInt32(201)
-        .setOptionalString("115")
-        .build()
-    )
-  }
-
-  @Test
-  fun testOneof() {
-    val message = testAllTypes {
-      oneofString = "foo"
-      assertThat(oneofFieldCase)
-        .isEqualTo(TestAllTypes.OneofFieldCase.ONEOF_STRING)
-      assertThat(oneofString).isEqualTo("foo")
-      clearOneofField()
-      assertThat(oneofFieldCase)
-        .isEqualTo(TestAllTypes.OneofFieldCase.ONEOFFIELD_NOT_SET)
-      oneofUint32 = 5
-    }
-
-    assertThat(message.getOneofFieldCase())
-      .isEqualTo(TestAllTypes.OneofFieldCase.ONEOF_UINT32)
-    assertThat(message.getOneofUint32()).isEqualTo(5)
-  }
-
-  @Test
-  fun testEmptyMessages() {
-    assertThat(
-      testEmptyMessage {}
-    ).isEqualTo(
-      TestEmptyMessage.newBuilder().build()
-    )
-  }
-
-  @Test
-  fun testEvilNames() {
-    assertThat(
-      evilNamesProto3 {
-        initialized = true
-        hasFoo = true
-        bar = "foo"
-        isInitialized = true
-        fooBar = "foo"
-        aLLCAPS += "foo"
-        aLLCAPSMAP[1] = true
-        hasUnderbarPrecedingNumeric1Foo = true
-        hasUnderbarPrecedingNumeric42Bar = true
-        hasUnderbarPrecedingNumeric123Foo42BarBaz = true
-        extension += "foo"
-        class_ = "foo"
-        int = 1.0
-        long = true
-        boolean = 1L
-        sealed = "foo"
-        interface_ = 1F
-        in_ = 1
-        object_ = "foo"
-        cachedSize_ = "foo"
-        serializedSize_ = true
-        value = "foo"
-        index = 1L
-        values += "foo"
-        newValues += "foo"
-        builder = true
-        k[1] = 1
-        v["foo"] = "foo"
-        key["foo"] = 1
-        map[1] = "foo"
-        pairs["foo"] = 1
-        LeadingUnderscore = "foo"
-        option = 1
-      }
-    ).isEqualTo(
-      EvilNamesProto3.newBuilder()
-        .setInitialized(true)
-        .setHasFoo(true)
-        .setBar("foo")
-        .setIsInitialized(true)
-        .setFooBar("foo")
-        .addALLCAPS("foo")
-        .putALLCAPSMAP(1, true)
-        .setHasUnderbarPrecedingNumeric1Foo(true)
-        .setHasUnderbarPrecedingNumeric42Bar(true)
-        .setHasUnderbarPrecedingNumeric123Foo42BarBaz(true)
-        .addExtension("foo")
-        .setClass_("foo")
-        .setInt(1.0)
-        .setLong(true)
-        .setBoolean(1L)
-        .setSealed("foo")
-        .setInterface(1F)
-        .setIn(1)
-        .setObject("foo")
-        .setCachedSize_("foo")
-        .setSerializedSize_(true)
-        .setValue("foo")
-        .setIndex(1L)
-        .addValues("foo")
-        .addNewValues("foo")
-        .setBuilder(true)
-        .putK(1, 1)
-        .putV("foo", "foo")
-        .putKey("foo", 1)
-        .putMap(1, "foo")
-        .putPairs("foo", 1)
-        .setLeadingUnderscore("foo")
-        .setOption(1)
-        .build()
-    )
-
-    assertThat(class_ {}).isEqualTo(Class.newBuilder().build())
-  }
-
-  @Test
-  fun testHardKeywordGettersAndSetters() {
-    hardKeywordsAllTypesProto3 {
-      as_ = 1
-      assertThat(as_).isEqualTo(1)
-
-      in_ = "foo"
-      assertThat(in_).isEqualTo("foo")
-
-      break_ = HardKeywordsAllTypesProto3.NestedEnum.FOO
-      assertThat(break_).isEqualTo(HardKeywordsAllTypesProto3.NestedEnum.FOO)
-
-      do_ = HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 }
-      assertThat(do_).isEqualTo(HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 })
-
-      continue_[1] = 1
-      assertThat(continue_[1]).isEqualTo(1)
-
-      else_ += 1
-      assertThat(else_).isEqualTo(listOf(1))
-
-      for_ += "foo"
-      assertThat(for_).isEqualTo(listOf("foo"))
-
-      fun_ += HardKeywordsAllTypesProto3.NestedEnum.FOO
-      assertThat(fun_).isEqualTo(listOf(HardKeywordsAllTypesProto3.NestedEnum.FOO))
-
-      if_ += HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 }
-      assertThat(if_).isEqualTo(listOf(HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 }))
-    }
-  }
-
-  @Test
-  fun testHardKeywordHazzers() {
-    hardKeywordsAllTypesProto3 {
-      as_ = 1
-      assertThat(hasAs_()).isTrue()
-
-      in_ = "foo"
-      assertThat(hasIn_()).isTrue()
-
-      break_ = HardKeywordsAllTypesProto3.NestedEnum.FOO
-      assertThat(hasBreak_()).isTrue()
-
-      do_ = HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 }
-      assertThat(hasDo_()).isTrue()
-    }
-  }
-
-  @Test
-  fun testHardKeywordClears() {
-    hardKeywordsAllTypesProto3 {
-      as_ = 1
-      clearAs_()
-      assertThat(hasAs_()).isFalse()
-
-      in_ = "foo"
-      clearIn_()
-      assertThat(hasIn_()).isFalse()
-
-      break_ = HardKeywordsAllTypesProto3.NestedEnum.FOO
-      clearBreak_()
-      assertThat(hasBreak_()).isFalse()
-
-      do_ = HardKeywordsAllTypesProto3Kt.nestedMessage { while_ = 1 }
-      clearDo_()
-      assertThat(hasDo_()).isFalse()
-    }
-  }
-
-  @Test
-  fun testMultipleFiles() {
-    assertThat(
-      com.google.protobuf.kotlin.generator.multipleFilesMessageA {}
-    ).isEqualTo(
-      com.google.protobuf.kotlin.generator.MultipleFilesMessageA.newBuilder().build()
-    )
-
-    assertThat(
-      com.google.protobuf.kotlin.generator.multipleFilesMessageB {}
-    ).isEqualTo(
-      com.google.protobuf.kotlin.generator.MultipleFilesMessageB.newBuilder().build()
-    )
-  }
-}
diff --git a/java/kotlin/BUILD b/java/kotlin/BUILD
index bcdf4ec..0cb27e5 100644
--- a/java/kotlin/BUILD
+++ b/java/kotlin/BUILD
@@ -3,6 +3,10 @@
 load("@rules_proto//proto:defs.bzl", "proto_library")
 load("//:protobuf_version.bzl", "PROTOBUF_VERSION")
 
+exports_files([
+  "src/test/kotlin/com/google/protobuf/Proto3Test.kt",
+])
+
 # Kotlin generated protos depend on this and only this.
 kt_jvm_library(
     name = "shared_runtime",