IND$FILE Browse!
Build and Test j3270 / Build JAR & Run Tests (Java 17) (push) Successful in 36s
Build and Test j3270 / Build JAR & Run Tests (Java 11) (push) Successful in 47s
Build and Test j3270 / Build JAR & Run Tests (Java 21) (push) Successful in 1m27s

This commit is contained in:
2026-09-24 01:28:55 +00:00
parent 3d3a939ece
commit 8286af19e6
13 changed files with 664 additions and 94 deletions
@@ -125,4 +125,66 @@ public class FTConfigTest {
String cmd = config.buildCommand();
assertEquals("IND$FILE PUT FILE01 (BINARY NOCRLF REPLACE", cmd);
}
@Test
public void testPdsAllocationCommand() {
FTConfig config = new FTConfig();
config.setHostType(FTConfig.HostType.TSO);
config.setDirection(FTConfig.Direction.SEND);
config.setHostFilename("'USER.PDS.DATA'");
config.setTransferMode(FTConfig.TransferMode.ASCII);
config.setCrAction(FTConfig.CrAction.REMOVE);
config.setRecfm("FB");
config.setLrecl("80");
config.setBlksize("3120");
config.setPrimarySpace(15);
config.setSecondarySpace(5);
config.setDirectoryBlocks(10);
config.setUnits(FTConfig.AllocationUnit.TRACKS);
String cmd = config.buildCommand();
assertEquals("IND$FILE PUT 'USER.PDS.DATA' ASCII CRLF RECFM(F) LRECL(80) BLKSIZE(3120) SPACE(15,5,10) TRACKS", cmd);
}
@Test
public void testPdsParseOptionsThreeParameters() {
FTConfig config = new FTConfig();
config.setDirection(FTConfig.Direction.SEND);
config.setHostFilename("SYS1.PARMLIB");
config.parseOptions("TSO ASCII CRLF SPACE(20,10,15) TRACKS");
assertEquals(20, config.getPrimarySpace());
assertEquals(10, config.getSecondarySpace());
assertEquals(15, config.getDirectoryBlocks());
assertEquals(FTConfig.AllocationUnit.TRACKS, config.getUnits());
assertEquals("IND$FILE PUT SYS1.PARMLIB ASCII CRLF SPACE(20,10,15) TRACKS", config.buildCommand());
}
@Test
public void testPdsParseOptionsWithDirToken() {
FTConfig config = new FTConfig();
config.setDirection(FTConfig.Direction.SEND);
config.setHostFilename("SYS1.PROCLIB");
config.parseOptions("TSO ASCII CRLF SPACE(10,5) DIR(20) CYLINDERS");
assertEquals(10, config.getPrimarySpace());
assertEquals(5, config.getSecondarySpace());
assertEquals(20, config.getDirectoryBlocks());
assertEquals(FTConfig.AllocationUnit.CYLINDERS, config.getUnits());
assertEquals("IND$FILE PUT SYS1.PROCLIB ASCII CRLF SPACE(10,5,20) CYLINDERS", config.buildCommand());
}
@Test
public void testPdsSetSpaceWithThreeArguments() {
FTConfig config = new FTConfig();
config.setDirection(FTConfig.Direction.SEND);
config.setHostFilename("MY.PDS");
config.setSpace("12,4,8");
assertEquals(12, config.getPrimarySpace());
assertEquals(4, config.getSecondarySpace());
assertEquals(8, config.getDirectoryBlocks());
assertEquals(FTConfig.AllocationUnit.TRACKS, config.getUnits());
assertTrue(config.buildCommand().contains("SPACE(12,4,8) TRACKS"));
}
}
@@ -121,4 +121,34 @@ public class DirectoryParserTest {
assertEquals("GENPASS", entries.get(1).getFilename());
assertEquals("REXX", entries.get(1).getFiletype());
}
@Test
public void testContinuousScreenBufferParsingCms() {
// Continuous 80-character rows without newlines (as produced by unformatted 3270 presentation space)
String row1 = String.format("%-80s", "PROFILE EXEC A1 V 80 25 1 2026-05-10 14:22:01");
String row2 = String.format("%-80s", "TEST DATA A1 F 80 100 2 2026-08-01 09:15:00");
String row3 = String.format("%-80s", "Ready; T=0.01/0.01 12:00:00");
String continuousScreen = row1 + row2 + row3;
List<CMSDirectoryEntry> entries = CMSDirectoryParser.parse(continuousScreen);
assertEquals(2, entries.size(), "Should parse 2 CMS entries and ignore Ready;");
assertEquals("PROFILE", entries.get(0).getFilename());
assertEquals("TEST", entries.get(1).getFilename());
}
@Test
public void testContinuousScreenBufferParsingTso() {
// Continuous 80-character rows without newlines for ISPF DSLIST
String row1 = String.format("%-80s", "Dslist - Data Sets Matching USER.*");
String row2 = String.format("%-80s", "Command - Enter \"/\" to select action Tracks Dsorg Recfm Volume");
String row3 = String.format("%-80s", " USER.TEST.CNTL 15 PO FB TSO001");
String row4 = String.format("%-80s", " USER.TEST.DATA 10 PS FB TSO001");
String row5 = String.format("%-80s", "***");
String continuousScreen = row1 + row2 + row3 + row4 + row5;
List<TSODirectoryEntry> entries = TSODirectoryParser.parse(continuousScreen);
assertEquals(2, entries.size(), "Should parse 2 TSO entries and ignore ***");
assertEquals("USER.TEST.CNTL", entries.get(0).getName());
assertEquals("USER.TEST.DATA", entries.get(1).getName());
}
}