@Test
	public void testGetCompositeDataStartingAt() throws Exception {
		startTransaction();
		mem.createInitializedBlock("test", addr(0), 1000, (byte) 0, TaskMonitor.DUMMY, false);

		Structure struct = new StructureDataType("struct_1", 100);
		Structure struct2 = new StructureDataType("struct_2", 0);
		Structure struct3 = new StructureDataType("struct_3", 0);
		DataTypeManager dtm = new StandAloneDataTypeManager("dummyDTM");
		int id = dtm.startTransaction("");
		struct = (Structure) dtm.resolve(struct, null);
		struct2 = (Structure) dtm.resolve(struct2, null);
		struct3 = (Structure) dtm.resolve(struct3, null);

		struct2.add(new ByteDataType());
		struct2.add(new StringDataType(), 20);
		struct2.add(new QWordDataType());
		struct3.add(struct2);

		struct.replace(0, struct2, struct2.getLength());
		struct.replace(1, new StringDataType(), 10);

		listing.createData(addr(0), struct, 0);

		listing.createData(addr(300), struct2, 0);

		listing.createData(addr(250), struct3, 0);

		Union union = new UnionDataType("union_1");
		union.add(struct3);
		union.add(struct2);

		listing.createData(addr(600), union, 0);
		endTransaction();

		DataIterator iter = listing.getCompositeData(addr(275), true);
		assertTrue(iter.hasNext());

		Data d = iter.next();
		assertNotNull(d);
		assertEquals(addr(300), d.getMinAddress());

		d = iter.next();
		assertNotNull(d);
		assertEquals(addr(600), d.getMinAddress());

		assertTrue(!iter.hasNext());
		assertNull(iter.next());
		dtm.endTransaction(id, true);
		dtm.close();

	}
** Diagnostic Aid ** Open program in tool
@throws Exception
Ghidra/Features/Base/src/test.slow/java/ghidra/program/database/code/CodeUnitIteratorTest.java