@@ -1260,6 +1260,162 @@ func TestApplyMoveActionsToLibrary_NonExistentSource(t *testing.T) {
12601260 }
12611261}
12621262
1263+ func TestRestructureToLibrary (t * testing.T ) {
1264+ t .Parallel ()
1265+ for _ , tc := range []struct {
1266+ name string
1267+ monolithic bool
1268+ includeSamples bool
1269+ filesToWrite map [string ]string
1270+ wantFiles map [string ]string
1271+ }{
1272+ {
1273+ name : "standard multi-module" ,
1274+ monolithic : false ,
1275+ includeSamples : true ,
1276+ filesToWrite : map [string ]string {
1277+ "v1/gapic/src/main/java/Foo.java" : "class Foo {}" ,
1278+ "v1/gapic/src/test/FooTest.java" : "class FooTest {}" ,
1279+ "v1/proto/com/google/cloud/test/v1/BarProto.java" : "class BarProto {}" ,
1280+ "v1/grpc/com/google/cloud/test/v1/BarGrpc.java" : "class BarGrpc {}" ,
1281+ "v1/gapic/proto/src/main/java/Resource.java" : "class Resource {}" ,
1282+ "v1/gapic/samples/snippets/generated/src/main/java/Sample.java" : "class Sample {}" ,
1283+ },
1284+ wantFiles : map [string ]string {
1285+ "proto-google-cloud-test-v1/src/main/java/com/google/cloud/test/v1/BarProto.java" : "class BarProto {}" ,
1286+ "grpc-google-cloud-test-v1/src/main/java/com/google/cloud/test/v1/BarGrpc.java" : "class BarGrpc {}" ,
1287+ "proto-google-cloud-test-v1/src/main/java/Resource.java" : "class Resource {}" ,
1288+ "google-cloud-test/src/main/java/Foo.java" : "class Foo {}" ,
1289+ "google-cloud-test/src/test/FooTest.java" : "class FooTest {}" ,
1290+ "samples/snippets/generated/Sample.java" : "class Sample {}" ,
1291+ },
1292+ },
1293+ {
1294+ name : "monolithic library" ,
1295+ monolithic : true ,
1296+ includeSamples : false ,
1297+ filesToWrite : map [string ]string {
1298+ "v1/gapic/src/main/java/Gapic.java" : "class Gapic {}" ,
1299+ "v1/grpc/Grpc.java" : "class Grpc {}" ,
1300+ "v1/proto/Proto.java" : "class Proto {}" ,
1301+ },
1302+ wantFiles : map [string ]string {
1303+ "src/main/java/Gapic.java" : "class Gapic {}" ,
1304+ "src/main/java/Grpc.java" : "class Grpc {}" ,
1305+ "src/main/java/Proto.java" : "class Proto {}" ,
1306+ },
1307+ },
1308+ {
1309+ name : "samples disabled" ,
1310+ monolithic : false ,
1311+ includeSamples : false ,
1312+ filesToWrite : map [string ]string {
1313+ "v1/gapic/src/main/java/Foo.java" : "class Foo {}" ,
1314+ "v1/gapic/samples/snippets/generated/src/main/java/Sample.java" : "class Sample {}" ,
1315+ },
1316+ wantFiles : map [string ]string {
1317+ "google-cloud-test/src/main/java/Foo.java" : "class Foo {}" ,
1318+ },
1319+ },
1320+ } {
1321+ t .Run (tc .name , func (t * testing.T ) {
1322+ t .Parallel ()
1323+ srcDir := t .TempDir ()
1324+ destDir := t .TempDir ()
1325+ writeFiles (t , srcDir , tc .filesToWrite )
1326+ library := & config.Library {
1327+ Name : "test-lib" ,
1328+ APIs : []* config.API {{Path : "google/cloud/test/v1" , Java : & config.JavaAPI {Monolithic : tc .monolithic }}},
1329+ Java : & config.JavaModule {GroupID : "com.google.cloud" , ArtifactID : "google-cloud-test" },
1330+ }
1331+ params := postProcessParams {
1332+ cfg : & config.Config {},
1333+ library : library ,
1334+ javaAPI : library .APIs [0 ].Java ,
1335+ outDir : srcDir ,
1336+ includeSamples : tc .includeSamples ,
1337+ apiBase : "v1" ,
1338+ }
1339+ if err := RestructureToLibrary (params , destDir , nil ); err != nil {
1340+ t .Fatal (err )
1341+ }
1342+ gotFiles := readDirFiles (t , destDir )
1343+ if diff := cmp .Diff (tc .wantFiles , gotFiles ); diff != "" {
1344+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
1345+ }
1346+ })
1347+ }
1348+ }
1349+
1350+ // TestRestructureToLibrary_OverwritesExistingFiles verifies that existing files in the destination are overwritten.
1351+ func TestRestructureToLibrary_OverwritesExistingFiles (t * testing.T ) {
1352+ t .Parallel ()
1353+ srcDir := t .TempDir ()
1354+ destDir := t .TempDir ()
1355+ writeFiles (t , srcDir , map [string ]string {
1356+ "v1/gapic/src/main/java/Foo.java" : "class Foo { /* new content */ }" ,
1357+ })
1358+ writeFiles (t , destDir , map [string ]string {
1359+ "google-cloud-test/src/main/java/Foo.java" : "class Foo { /* old content */ }" ,
1360+ })
1361+ library := & config.Library {
1362+ Name : "test-lib" ,
1363+ APIs : []* config.API {{Path : "google/cloud/test/v1" , Java : & config.JavaAPI {}}},
1364+ Java : & config.JavaModule {GroupID : "com.google.cloud" , ArtifactID : "google-cloud-test" },
1365+ }
1366+ params := postProcessParams {
1367+ cfg : & config.Config {},
1368+ library : library ,
1369+ javaAPI : library .APIs [0 ].Java ,
1370+ outDir : srcDir ,
1371+ includeSamples : false ,
1372+ apiBase : "v1" ,
1373+ }
1374+ // Pass nil keepSet to expect default overwriting of conflicting files.
1375+ if err := RestructureToLibrary (params , destDir , nil ); err != nil {
1376+ t .Fatal (err )
1377+ }
1378+ gotFiles := readDirFiles (t , destDir )
1379+ wantFiles := map [string ]string {
1380+ "google-cloud-test/src/main/java/Foo.java" : "class Foo { /* new content */ }" ,
1381+ }
1382+ if diff := cmp .Diff (wantFiles , gotFiles ); diff != "" {
1383+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
1384+ }
1385+ }
1386+
1387+ func TestRestructureToLibrary_CommonProtos (t * testing.T ) {
1388+ t .Parallel ()
1389+ srcDir := t .TempDir ()
1390+ destDir := t .TempDir ()
1391+ writeFiles (t , srcDir , map [string ]string {
1392+ "v1/proto/com/google/cloud/location/LocationsProto.java" : "class LocationsProto {}" ,
1393+ })
1394+ library := & config.Library {
1395+ Name : commonProtosLibrary ,
1396+ APIs : []* config.API {{Path : "google/cloud/test/v1" , Java : & config.JavaAPI {ProtoArtifactIDOverride : "proto-google-common-protos" }}},
1397+ Java : & config.JavaModule {GroupID : "com.google.cloud" , ArtifactID : "google-cloud-" + commonProtosLibrary },
1398+ }
1399+ params := postProcessParams {
1400+ cfg : & config.Config {},
1401+ library : library ,
1402+ javaAPI : library .APIs [0 ].Java ,
1403+ outDir : srcDir ,
1404+ includeSamples : false ,
1405+ apiBase : "v1" ,
1406+ }
1407+ if err := RestructureToLibrary (params , destDir , nil ); err != nil {
1408+ t .Fatal (err )
1409+ }
1410+ gotFiles := readDirFiles (t , destDir )
1411+ wantFiles := map [string ]string {
1412+ "proto-google-common-protos/src/main/java/com/google/cloud/location/LocationsProto.java" : "class LocationsProto {}" ,
1413+ }
1414+ if diff := cmp .Diff (wantFiles , gotFiles ); diff != "" {
1415+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
1416+ }
1417+ }
1418+
12631419func writeFiles (t * testing.T , dir string , files map [string ]string ) {
12641420 t .Helper ()
12651421 if err := os .MkdirAll (dir , 0755 ); err != nil {
0 commit comments