[libcalamares] Truncate to a character count as well
This commit is contained in:
parent
1542bad224
commit
5c402ffd66
@ -175,7 +175,36 @@ truncateMultiLine( const QString& string, CalamaresUtils::LinesStartEnd lines, C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return front + back;
|
if ( front.length() + back.length() <= chars.total )
|
||||||
|
{
|
||||||
|
return front + back;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to cut off some bits, preserving whether there are
|
||||||
|
// newlines present at the end of the string. Go case-by-case:
|
||||||
|
if ( !front.isEmpty() && back.isEmpty() )
|
||||||
|
{
|
||||||
|
// Truncate towards the front
|
||||||
|
bool needsNewline = front.endsWith( NEWLINE );
|
||||||
|
front.truncate( chars.total );
|
||||||
|
if ( !front.endsWith( NEWLINE ) && needsNewline )
|
||||||
|
{
|
||||||
|
front.append( NEWLINE );
|
||||||
|
}
|
||||||
|
return front;
|
||||||
|
}
|
||||||
|
if ( front.isEmpty() && !back.isEmpty() )
|
||||||
|
{
|
||||||
|
// Truncate towards the tail
|
||||||
|
return back.right( chars.total );
|
||||||
|
}
|
||||||
|
// Both are non-empty, so nibble away at both of them
|
||||||
|
front.truncate( chars.total / 2 );
|
||||||
|
if ( !front.endsWith( NEWLINE ) )
|
||||||
|
{
|
||||||
|
front.append( NEWLINE );
|
||||||
|
}
|
||||||
|
return front + back.right( chars.total / 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -597,6 +597,8 @@ and the translations updated.)" );
|
|||||||
QVERIFY( !longString.endsWith( NEWLINE ) );
|
QVERIFY( !longString.endsWith( NEWLINE ) );
|
||||||
QCOMPARE( longString.count( NEWLINE ), 2 );
|
QCOMPARE( longString.count( NEWLINE ), 2 );
|
||||||
QVERIFY( longString.length() > insufficientLength );
|
QVERIFY( longString.length() > insufficientLength );
|
||||||
|
// Even the first line must be more than the insufficientLength
|
||||||
|
QVERIFY( longString.indexOf( NEWLINE ) > insufficientLength );
|
||||||
|
|
||||||
// Grab first line, untruncated
|
// Grab first line, untruncated
|
||||||
{
|
{
|
||||||
@ -626,11 +628,51 @@ and the translations updated.)" );
|
|||||||
QVERIFY( longString.endsWith( s ) );
|
QVERIFY( longString.endsWith( s ) );
|
||||||
QVERIFY( !s.endsWith( NEWLINE ) );
|
QVERIFY( !s.endsWith( NEWLINE ) );
|
||||||
QVERIFY( s.endsWith( "updated." ) );
|
QVERIFY( s.endsWith( "updated." ) );
|
||||||
cDebug() << "Result-line" << Logger::Quote << s;
|
|
||||||
QCOMPARE( s.count( NEWLINE ), 1 ); // Because last line doesn't end with a newline
|
QCOMPARE( s.count( NEWLINE ), 1 ); // Because last line doesn't end with a newline
|
||||||
QVERIFY( s.startsWith( "displayed in " ) );
|
QVERIFY( s.startsWith( "displayed in " ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// First line, truncated
|
||||||
|
{
|
||||||
|
auto s = truncateMultiLine( longString, LinesStartEnd { 1, 0 }, CharCount { insufficientLength } );
|
||||||
|
cDebug() << "Result-line" << Logger::Quote << s;
|
||||||
|
QVERIFY( s.length() > 1 );
|
||||||
|
QVERIFY( s.endsWith( NEWLINE ) );
|
||||||
|
QVERIFY( s.startsWith( "Some " ) );
|
||||||
|
// Because the first line has a newline, the truncated version does too,
|
||||||
|
// but that makes it one longer than requested.
|
||||||
|
QCOMPARE( s.length(), insufficientLength + 1 );
|
||||||
|
QVERIFY( longString.startsWith( s.left( insufficientLength ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Last line, truncated; this line is quite short
|
||||||
|
{
|
||||||
|
const int quiteShort = 8;
|
||||||
|
QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort );
|
||||||
|
|
||||||
|
auto s = truncateMultiLine( longString, LinesStartEnd { 0, 1 }, CharCount { quiteShort } );
|
||||||
|
cDebug() << "Result-line" << Logger::Quote << s;
|
||||||
|
QVERIFY( s.length() > 1 );
|
||||||
|
QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either
|
||||||
|
QVERIFY( s.startsWith( "upda" ) );
|
||||||
|
QCOMPARE( s.length(), quiteShort ); // No extra newlines
|
||||||
|
QVERIFY( longString.endsWith( s ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// First and last, but both truncated
|
||||||
|
{
|
||||||
|
const int quiteShort = 16;
|
||||||
|
QVERIFY( longString.indexOf( NEWLINE ) > quiteShort );
|
||||||
|
QVERIFY( longString.lastIndexOf( NEWLINE ) < longString.length() - quiteShort );
|
||||||
|
|
||||||
|
auto s = truncateMultiLine( longString, LinesStartEnd { 1, 1 }, CharCount { quiteShort } );
|
||||||
|
cDebug() << "Result-line" << Logger::Quote << s;
|
||||||
|
QVERIFY( s.length() > 1 );
|
||||||
|
QVERIFY( !s.endsWith( NEWLINE ) ); // Because the original doesn't either
|
||||||
|
QVERIFY( s.startsWith( "Some " ) );
|
||||||
|
QVERIFY( s.endsWith( "updated." ) );
|
||||||
|
QCOMPARE( s.length(), quiteShort + 1 ); // Newline between front and back part
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user