@@ -1436,4 +1436,180 @@ public void contains_XMLString() {
14361436 assertEquals (true , t .apply ("abc" , "bc" ));
14371437 assertEquals (true , t .apply ("abcabc" , "abc" ));
14381438 }
1439+
1440+ // -------------------------------------------------------------------------
1441+ // startsWithLowerCase
1442+ // -------------------------------------------------------------------------
1443+
1444+ @ Test
1445+ public void startsWithLowerCase_exactMatchAllLower () {
1446+ final XMLString s = new XMLString ("/script" );
1447+ assertTrue (s .startsWithLowerCase ("/script" ));
1448+ }
1449+
1450+ @ Test
1451+ public void startsWithLowerCase_exactMatchUpperCaseInBuffer () {
1452+ final XMLString s = new XMLString ("/SCRIPT" );
1453+ assertTrue (s .startsWithLowerCase ("/script" ));
1454+ }
1455+
1456+ @ Test
1457+ public void startsWithLowerCase_exactMatchMixedCaseInBuffer () {
1458+ final XMLString s = new XMLString ("/Script" );
1459+ assertTrue (s .startsWithLowerCase ("/script" ));
1460+ }
1461+
1462+ @ Test
1463+ public void startsWithLowerCase_prefixShorterThanBuffer () {
1464+ final XMLString s = new XMLString ("/script>" );
1465+ assertTrue (s .startsWithLowerCase ("/script" ));
1466+ }
1467+
1468+ @ Test
1469+ public void startsWithLowerCase_prefixShorterThanBufferUpperCase () {
1470+ final XMLString s = new XMLString ("/SCRIPT>" );
1471+ assertTrue (s .startsWithLowerCase ("/script" ));
1472+ }
1473+
1474+ @ Test
1475+ public void startsWithLowerCase_noMatch () {
1476+ final XMLString s = new XMLString ("/style" );
1477+ assertFalse (s .startsWithLowerCase ("/script" ));
1478+ }
1479+
1480+ @ Test
1481+ public void startsWithLowerCase_noMatchPartialOverlap () {
1482+ final XMLString s = new XMLString ("/scrivener" );
1483+ assertFalse (s .startsWithLowerCase ("/script" ));
1484+ }
1485+
1486+ @ Test
1487+ public void startsWithLowerCase_bufferShorterThanPrefix () {
1488+ final XMLString s = new XMLString ("/scr" );
1489+ assertFalse (s .startsWithLowerCase ("/script" ));
1490+ }
1491+
1492+ @ Test
1493+ public void startsWithLowerCase_emptyPrefix () {
1494+ final XMLString s = new XMLString ("/script" );
1495+ assertTrue (s .startsWithLowerCase ("" ));
1496+ }
1497+
1498+ @ Test
1499+ public void startsWithLowerCase_emptyPrefixAgainstEmptyBuffer () {
1500+ final XMLString s = new XMLString (0 );
1501+ assertTrue (s .startsWithLowerCase ("" ));
1502+ }
1503+
1504+ @ Test
1505+ public void startsWithLowerCase_emptyBuffer_nonEmptyPrefix () {
1506+ final XMLString s = new XMLString (0 );
1507+ assertFalse (s .startsWithLowerCase ("/script" ));
1508+ }
1509+
1510+ @ Test
1511+ public void startsWithLowerCase_singleCharMatchLower () {
1512+ final XMLString s = new XMLString ("a" );
1513+ assertTrue (s .startsWithLowerCase ("a" ));
1514+ }
1515+
1516+ @ Test
1517+ public void startsWithLowerCase_singleCharMatchUpper () {
1518+ final XMLString s = new XMLString ("A" );
1519+ assertTrue (s .startsWithLowerCase ("a" ));
1520+ }
1521+
1522+ @ Test
1523+ public void startsWithLowerCase_singleCharNoMatch () {
1524+ final XMLString s = new XMLString ("b" );
1525+ assertFalse (s .startsWithLowerCase ("a" ));
1526+ }
1527+
1528+ @ Test
1529+ public void startsWithLowerCase_realWorldScriptLowerCase () {
1530+ final XMLString s = new XMLString ("/script>" );
1531+ assertTrue (s .startsWithLowerCase ("/script" ));
1532+ assertEquals ('>' , s .charAt (7 , ' ' ));
1533+ }
1534+
1535+ @ Test
1536+ public void startsWithLowerCase_realWorldScriptUpperCase () {
1537+ final XMLString s = new XMLString ("/SCRIPT>" );
1538+ assertTrue (s .startsWithLowerCase ("/script" ));
1539+ assertEquals ('>' , s .charAt (7 , ' ' ));
1540+ }
1541+
1542+ @ Test
1543+ public void startsWithLowerCase_realWorldScriptWhitespaceSeparator () {
1544+ final XMLString s = new XMLString ("/SCRIPT " );
1545+ assertTrue (s .startsWithLowerCase ("/script" ));
1546+ assertTrue (Character .isWhitespace (s .charAt (7 , ' ' )));
1547+ }
1548+
1549+ // -------------------------------------------------------------------------
1550+ // charAt(int, char)
1551+ // -------------------------------------------------------------------------
1552+
1553+ @ Test
1554+ public void charAtWithDefault_withinBounds () {
1555+ final XMLString s = new XMLString ("hello" );
1556+ assertEquals ('h' , s .charAt (0 , ' ' ));
1557+ assertEquals ('e' , s .charAt (1 , ' ' ));
1558+ assertEquals ('o' , s .charAt (4 , ' ' ));
1559+ }
1560+
1561+ @ Test
1562+ public void charAtWithDefault_exactlyAtLastIndex () {
1563+ final XMLString s = new XMLString ("hi" );
1564+ assertEquals ('i' , s .charAt (1 , ' ' ));
1565+ }
1566+
1567+ @ Test
1568+ public void charAtWithDefault_onePastEnd_returnsDefault () {
1569+ final XMLString s = new XMLString ("hi" );
1570+ assertEquals (' ' , s .charAt (2 , ' ' ));
1571+ }
1572+
1573+ @ Test
1574+ public void charAtWithDefault_wellBeyondEnd_returnsDefault () {
1575+ final XMLString s = new XMLString ("hi" );
1576+ assertEquals (' ' , s .charAt (99 , ' ' ));
1577+ }
1578+
1579+ @ Test
1580+ public void charAtWithDefault_emptyBuffer_returnsDefault () {
1581+ final XMLString s = new XMLString (0 );
1582+ assertEquals (' ' , s .charAt (0 , ' ' ));
1583+ }
1584+
1585+ @ Test
1586+ public void charAtWithDefault_customDefault () {
1587+ final XMLString s = new XMLString ("ab" );
1588+ assertEquals ('X' , s .charAt (5 , 'X' ));
1589+ }
1590+
1591+ @ Test
1592+ public void charAtWithDefault_sentinelPatternGt () {
1593+ // replicates: '>' == fNextContent.charAt(7, ' ')
1594+ // buffer has exactly 7 chars — index 7 is out of bounds, returns ' '
1595+ // which is whitespace, satisfying the isWhitespace branch
1596+ final XMLString s = new XMLString ("/script" ); // length 7
1597+ final char sentinel = s .charAt (7 , ' ' );
1598+ assertEquals (' ' , sentinel );
1599+ assertTrue (Character .isWhitespace (sentinel ));
1600+ }
1601+
1602+ @ Test
1603+ public void charAtWithDefault_sentinelPatternExactGt () {
1604+ // buffer has 8 chars ending with '>'
1605+ final XMLString s = new XMLString ("/script>" ); // length 8
1606+ assertEquals ('>' , s .charAt (7 , ' ' ));
1607+ }
1608+
1609+ @ Test
1610+ public void charAtWithDefault_bufferFilledToRequestedLen () {
1611+ // EOF case: nextContent asked for 8, got only 4 — index 7 out of bounds
1612+ final XMLString s = new XMLString ("/scr" ); // length 4
1613+ assertEquals (' ' , s .charAt (7 , ' ' ));
1614+ }
14391615}
0 commit comments