Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1e7db22e
authored
Jan 06, 2020
by
ibaker
Committed by
Ian Baker
Jan 06, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Convert StyleSpan assertions in SpannedSubject to fluent style
PiperOrigin-RevId: 288274998
parent
29df73e2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
107 additions
and
168 deletions
library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttCueParserTest.java
library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java
testutils/src/test/java/com/google/android/exoplayer2/testutil/truth/SpannedSubjectTest.java
library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttCueParserTest.java
View file @
1e7db22e
...
...
@@ -36,10 +36,7 @@ public final class WebvttCueParserTest {
assertThat
(
text
.
toString
()).
isEqualTo
(
"This is text with html tags"
);
assertThat
(
text
).
hasUnderlineSpanBetween
(
"This "
.
length
(),
"This is"
.
length
());
assertThat
(
text
)
.
hasBoldItalicSpan
(
"This is text with "
.
length
(),
"This is text with html"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
.
hasBoldItalicSpanBetween
(
"This is text with "
.
length
(),
"This is text with html"
.
length
());
}
@Test
...
...
@@ -60,10 +57,8 @@ public final class WebvttCueParserTest {
assertThat
(
text
)
.
hasUnderlineSpanBetween
(
"An "
.
length
(),
"An unclosed u tag with italic inside"
.
length
());
assertThat
(
text
)
.
hasItalicSpan
(
"An unclosed u tag with "
.
length
(),
"An unclosed u tag with italic"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
.
hasItalicSpanBetween
(
"An unclosed u tag with "
.
length
(),
"An unclosed u tag with italic"
.
length
());
}
@Test
...
...
@@ -72,10 +67,9 @@ public final class WebvttCueParserTest {
assertThat
(
text
.
toString
()).
isEqualTo
(
"An italic tag with unclosed underline inside"
);
assertThat
(
text
)
.
hasItalicSpan
(
.
hasItalicSpan
Between
(
"An italic tag with unclosed "
.
length
(),
"An italic tag with unclosed underline"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
"An italic tag with unclosed underline"
.
length
());
assertThat
(
text
)
.
hasUnderlineSpanBetween
(
"An italic tag with unclosed "
.
length
(),
...
...
@@ -88,15 +82,11 @@ public final class WebvttCueParserTest {
String
expectedText
=
"Overlapping u and i tags"
;
assertThat
(
text
.
toString
()).
isEqualTo
(
expectedText
);
assertThat
(
text
).
hasBoldSpan
(
0
,
expectedText
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
text
).
hasBoldSpan
Between
(
0
,
expectedText
.
length
()
);
// Text between the <u> tags is underlined.
assertThat
(
text
).
hasUnderlineSpanBetween
(
0
,
"Overlapping u and"
.
length
());
// Only text from <i> to <\\u> is italic (unexpected - but simplifies the parsing).
assertThat
(
text
)
.
hasItalicSpan
(
"Overlapping u "
.
length
(),
"Overlapping u and"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
text
).
hasItalicSpanBetween
(
"Overlapping u "
.
length
(),
"Overlapping u and"
.
length
());
}
@Test
...
...
@@ -105,8 +95,7 @@ public final class WebvttCueParserTest {
assertThat
(
text
.
toString
()).
isEqualTo
(
"foobarbazbuzz"
);
// endIndex should be 9 when valid (i.e. "foobarbaz".length()
assertThat
(
text
)
.
hasBoldSpan
(
"foo"
.
length
(),
"foobar"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
text
).
hasBoldSpanBetween
(
"foo"
.
length
(),
"foobar"
.
length
());
}
@Test
...
...
@@ -156,13 +145,8 @@ public final class WebvttCueParserTest {
Spanned
text
=
parseCueText
(
"blah <b>blah</b> blah <b>foo</b>"
);
assertThat
(
text
.
toString
()).
isEqualTo
(
"blah blah blah foo"
);
assertThat
(
text
)
.
hasBoldSpan
(
"blah "
.
length
(),
"blah blah"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
text
)
.
hasBoldSpan
(
"blah blah blah "
.
length
(),
"blah blah blah foo"
.
length
(),
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
text
).
hasBoldSpanBetween
(
"blah "
.
length
(),
"blah blah"
.
length
());
assertThat
(
text
).
hasBoldSpanBetween
(
"blah blah blah "
.
length
(),
"blah blah blah foo"
.
length
());
}
@Test
...
...
library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java
View file @
1e7db22e
...
...
@@ -417,11 +417,7 @@ public class WebvttDecoderTest {
assertThat
(
s4
)
.
hasBackgroundColorSpanBetween
(
0
,
16
)
.
withColor
(
ColorParser
.
parseCssColor
(
"lime"
));
assertThat
(
s4
)
.
hasBoldSpan
(
/* startIndex= */
17
,
/* endIndex= */
s4
.
length
(),
/* flags= */
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
assertThat
(
s4
).
hasBoldSpanBetween
(
/* startIndex= */
17
,
/* endIndex= */
s4
.
length
());
}
@Test
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java
View file @
1e7db22e
...
...
@@ -33,6 +33,7 @@ import androidx.annotation.Nullable;
import
com.google.common.truth.FailureMetadata
;
import
com.google.common.truth.Subject
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
/** A Truth {@link Subject} for assertions on {@link Spanned} instances containing text styling. */
...
...
@@ -68,59 +69,59 @@ public final class SpannedSubject extends Subject {
failWithoutActual
(
simpleFact
(
"Expected no spans"
),
fact
(
"in text"
,
actual
),
fact
(
"but found"
,
getAllSpansAsString
WithoutFlags
(
actual
)));
fact
(
"but found"
,
getAllSpansAsString
(
actual
)));
}
}
/**
* Checks that the subject has an italic span from {@code start
Index} to {@code endIndex
}.
* Checks that the subject has an italic span from {@code start
} to {@code end
}.
*
* @param startIndex The start of the expected span.
* @param endIndex The end of the expected span.
* @param flags The flags of the expected span. See constants on {@link Spanned} for more
* information.
* @param start The start of the expected span.
* @param end The end of the expected span.
* @return A {@link WithSpanFlags} object for optional additional assertions on the flags.
*/
// TODO: swap this to fluent-style.
public
void
hasItalicSpan
(
int
startIndex
,
int
endIndex
,
int
flags
)
{
hasStyleSpan
(
startIndex
,
endIndex
,
flags
,
Typeface
.
ITALIC
);
public
WithSpanFlags
hasItalicSpanBetween
(
int
start
,
int
end
)
{
return
hasStyleSpan
(
start
,
end
,
Typeface
.
ITALIC
);
}
/**
* Checks that the subject has a bold span from {@code start
Index} to {@code endIndex
}.
* Checks that the subject has a bold span from {@code start
} to {@code end
}.
*
* @param startIndex The start of the expected span.
* @param endIndex The end of the expected span.
* @param flags The flags of the expected span. See constants on {@link Spanned} for more
* information.
* @param start The start of the expected span.
* @param end The end of the expected span.
* @return A {@link WithSpanFlags} object for optional additional assertions on the flags.
*/
// TODO: swap this to fluent-style.
public
void
hasBoldSpan
(
int
startIndex
,
int
endIndex
,
int
flags
)
{
hasStyleSpan
(
startIndex
,
endIndex
,
flags
,
Typeface
.
BOLD
);
public
WithSpanFlags
hasBoldSpanBetween
(
int
start
,
int
end
)
{
return
hasStyleSpan
(
start
,
end
,
Typeface
.
BOLD
);
}
private
void
hasStyleSpan
(
int
startIndex
,
int
endIndex
,
int
flags
,
int
style
)
{
private
WithSpanFlags
hasStyleSpan
(
int
start
,
int
end
,
int
style
)
{
if
(
actual
==
null
)
{
failWithoutActual
(
simpleFact
(
"Spanned must not be null"
));
return
;
return
ALREADY_FAILED_WITH_FLAGS
;
}
for
(
StyleSpan
span
:
findMatchingSpans
(
startIndex
,
endIndex
,
flags
,
StyleSpan
.
class
))
{
List
<
Integer
>
allFlags
=
new
ArrayList
<>();
boolean
matchingSpanFound
=
false
;
for
(
StyleSpan
span
:
findMatchingSpans
(
start
,
end
,
StyleSpan
.
class
))
{
allFlags
.
add
(
actual
.
getSpanFlags
(
span
));
if
(
span
.
getStyle
()
==
style
)
{
return
;
matchingSpanFound
=
true
;
break
;
}
}
if
(
matchingSpanFound
)
{
return
check
(
"StyleSpan (start=%s,end=%s,style=%s)"
,
start
,
end
,
style
)
.
about
(
spanFlags
())
.
that
(
allFlags
);
}
failWithExpectedSpanWithFlags
(
startIndex
,
endIndex
,
flags
,
new
StyleSpan
(
style
),
actual
.
toString
().
substring
(
startIndex
,
endIndex
));
failWithExpectedSpan
(
start
,
end
,
StyleSpan
.
class
,
actual
.
toString
().
substring
(
start
,
end
));
return
ALREADY_FAILED_WITH_FLAGS
;
}
/**
* Checks that the subject has bold and italic styling from {@code startIndex} to {@code
* endIndex}.
* Checks that the subject has bold and italic styling from {@code start} to {@code end}.
*
* <p>This can either be:
*
...
...
@@ -130,47 +131,41 @@ public final class SpannedSubject extends Subject {
* with {@code span.getStyle() == Typeface.ITALIC}.
* </ul>
*
* @param startIndex The start of the expected span.
* @param endIndex The end of the expected span.
* @param flags The flags of the expected span. See constants on {@link Spanned} for more
* information.
* @param start The start of the expected span.
* @param end The end of the expected span.
* @return A {@link WithSpanFlags} object for optional additional assertions on the flags.
*/
// TODO: swap this to fluent-style.
public
void
hasBoldItalicSpan
(
int
startIndex
,
int
endIndex
,
int
flags
)
{
public
WithSpanFlags
hasBoldItalicSpanBetween
(
int
start
,
int
end
)
{
if
(
actual
==
null
)
{
failWithoutActual
(
simpleFact
(
"Spanned must not be null"
));
return
;
return
ALREADY_FAILED_WITH_FLAGS
;
}
List
<
Integer
>
allFlags
=
new
ArrayList
<>();
List
<
Integer
>
styles
=
new
ArrayList
<>();
for
(
StyleSpan
span
:
findMatchingSpans
(
startIndex
,
endIndex
,
flags
,
StyleSpan
.
class
))
{
for
(
StyleSpan
span
:
findMatchingSpans
(
start
,
end
,
StyleSpan
.
class
))
{
allFlags
.
add
(
actual
.
getSpanFlags
(
span
));
styles
.
add
(
span
.
getStyle
());
}
if
(
styles
.
size
()
==
1
&&
styles
.
contains
(
Typeface
.
BOLD_ITALIC
))
{
return
;
}
else
if
(
styles
.
size
()
==
2
&&
styles
.
contains
(
Typeface
.
BOLD
)
&&
styles
.
contains
(
Typeface
.
ITALIC
))
{
return
;
if
(
styles
.
isEmpty
())
{
failWithExpectedSpan
(
start
,
end
,
StyleSpan
.
class
,
actual
.
subSequence
(
start
,
end
).
toString
());
return
ALREADY_FAILED_WITH_FLAGS
;
}
String
spannedSubstring
=
actual
.
toString
().
substring
(
startIndex
,
endIndex
);
String
boldSpan
=
getSpanAsStringWithFlags
(
startIndex
,
endIndex
,
flags
,
new
StyleSpan
(
Typeface
.
BOLD
),
spannedSubstring
);
String
italicSpan
=
getSpanAsStringWithFlags
(
startIndex
,
endIndex
,
flags
,
new
StyleSpan
(
Typeface
.
ITALIC
),
spannedSubstring
);
String
boldItalicSpan
=
getSpanAsStringWithFlags
(
startIndex
,
endIndex
,
flags
,
new
StyleSpan
(
Typeface
.
BOLD_ITALIC
),
spannedSubstring
);
if
(
styles
.
size
()
==
1
&&
styles
.
contains
(
Typeface
.
BOLD_ITALIC
)
||
styles
.
size
()
==
2
&&
styles
.
contains
(
Typeface
.
BOLD
)
&&
styles
.
contains
(
Typeface
.
ITALIC
))
{
return
check
(
"StyleSpan (start=%s,end=%s)"
,
start
,
end
).
about
(
spanFlags
()).
that
(
allFlags
);
}
failWithoutActual
(
simpleFact
(
"No matching span found"
),
simpleFact
(
String
.
format
(
"No matching StyleSpans found between start=%s,end=%s"
,
start
,
end
)),
fact
(
"in text"
,
actual
.
toString
()),
fact
(
"expected either"
,
boldItalicSpan
),
fact
(
"or both"
,
boldSpan
+
"\n"
+
italicSpan
),
fact
(
"but found"
,
getAllSpansAsStringWithFlags
(
actual
)));
fact
(
"expected either styles"
,
Arrays
.
asList
(
Typeface
.
BOLD_ITALIC
)),
fact
(
"or styles"
,
Arrays
.
asList
(
Typeface
.
BOLD
,
Typeface
.
BOLD_ITALIC
)),
fact
(
"but found styles"
,
styles
));
return
ALREADY_FAILED_WITH_FLAGS
;
}
/**
...
...
@@ -194,8 +189,7 @@ public final class SpannedSubject extends Subject {
if
(
underlineSpans
.
size
()
==
1
)
{
return
check
(
"UnderlineSpan (start=%s,end=%s)"
,
start
,
end
).
about
(
spanFlags
()).
that
(
allFlags
);
}
failWithExpectedSpanWithoutFlags
(
start
,
end
,
UnderlineSpan
.
class
,
actual
.
toString
().
substring
(
start
,
end
));
failWithExpectedSpan
(
start
,
end
,
UnderlineSpan
.
class
,
actual
.
toString
().
substring
(
start
,
end
));
return
ALREADY_FAILED_WITH_FLAGS
;
}
...
...
@@ -218,7 +212,7 @@ public final class SpannedSubject extends Subject {
List
<
ForegroundColorSpan
>
foregroundColorSpans
=
findMatchingSpans
(
start
,
end
,
ForegroundColorSpan
.
class
);
if
(
foregroundColorSpans
.
isEmpty
())
{
failWithExpectedSpan
WithoutFlags
(
failWithExpectedSpan
(
start
,
end
,
ForegroundColorSpan
.
class
,
actual
.
toString
().
substring
(
start
,
end
));
return
ALREADY_FAILED_COLORED
;
}
...
...
@@ -246,7 +240,7 @@ public final class SpannedSubject extends Subject {
List
<
BackgroundColorSpan
>
backgroundColorSpans
=
findMatchingSpans
(
start
,
end
,
BackgroundColorSpan
.
class
);
if
(
backgroundColorSpans
.
isEmpty
())
{
failWithExpectedSpan
WithoutFlags
(
failWithExpectedSpan
(
start
,
end
,
BackgroundColorSpan
.
class
,
actual
.
toString
().
substring
(
start
,
end
));
return
ALREADY_FAILED_COLORED
;
}
...
...
@@ -255,19 +249,6 @@ public final class SpannedSubject extends Subject {
.
that
(
backgroundColorSpans
);
}
private
<
T
>
List
<
T
>
findMatchingSpans
(
int
startIndex
,
int
endIndex
,
int
flags
,
Class
<
T
>
spanClazz
)
{
List
<
T
>
spans
=
new
ArrayList
<>();
for
(
T
span
:
actual
.
getSpans
(
startIndex
,
endIndex
,
spanClazz
))
{
if
(
actual
.
getSpanStart
(
span
)
==
startIndex
&&
actual
.
getSpanEnd
(
span
)
==
endIndex
&&
actual
.
getSpanFlags
(
span
)
==
flags
)
{
spans
.
add
(
span
);
}
}
return
spans
;
}
private
<
T
>
List
<
T
>
findMatchingSpans
(
int
startIndex
,
int
endIndex
,
Class
<
T
>
spanClazz
)
{
List
<
T
>
spans
=
new
ArrayList
<>();
for
(
T
span
:
actual
.
getSpans
(
startIndex
,
endIndex
,
spanClazz
))
{
...
...
@@ -278,72 +259,31 @@ public final class SpannedSubject extends Subject {
return
spans
;
}
private
void
failWithExpectedSpanWithFlags
(
int
start
,
int
end
,
int
flags
,
Object
span
,
String
spannedSubstring
)
{
failWithoutActual
(
simpleFact
(
"No matching span found"
),
fact
(
"in text"
,
actual
),
fact
(
"expected"
,
getSpanAsStringWithFlags
(
start
,
end
,
flags
,
span
,
spannedSubstring
)),
fact
(
"but found"
,
getAllSpansAsStringWithFlags
(
actual
)));
}
private
void
failWithExpectedSpanWithoutFlags
(
private
void
failWithExpectedSpan
(
int
start
,
int
end
,
Class
<?>
spanType
,
String
spannedSubstring
)
{
failWithoutActual
(
simpleFact
(
"No matching span found"
),
fact
(
"in text"
,
actual
),
fact
(
"expected"
,
getSpanAsStringWithoutFlags
(
start
,
end
,
spanType
,
spannedSubstring
)),
fact
(
"but found"
,
getAllSpansAsStringWithoutFlags
(
actual
)));
}
private
static
String
getAllSpansAsStringWithFlags
(
Spanned
spanned
)
{
List
<
String
>
actualSpanStrings
=
new
ArrayList
<>();
for
(
Object
span
:
spanned
.
getSpans
(
0
,
spanned
.
length
(),
Object
.
class
))
{
actualSpanStrings
.
add
(
getSpanAsStringWithFlags
(
span
,
spanned
));
}
return
TextUtils
.
join
(
"\n"
,
actualSpanStrings
);
}
private
static
String
getSpanAsStringWithFlags
(
Object
span
,
Spanned
spanned
)
{
int
spanStart
=
spanned
.
getSpanStart
(
span
);
int
spanEnd
=
spanned
.
getSpanEnd
(
span
);
return
getSpanAsStringWithFlags
(
spanStart
,
spanEnd
,
spanned
.
getSpanFlags
(
span
),
span
,
spanned
.
toString
().
substring
(
spanStart
,
spanEnd
));
}
private
static
String
getSpanAsStringWithFlags
(
int
start
,
int
end
,
int
flags
,
Object
span
,
String
spannedSubstring
)
{
String
suffix
;
if
(
span
instanceof
StyleSpan
)
{
suffix
=
"\tstyle="
+
((
StyleSpan
)
span
).
getStyle
();
}
else
{
suffix
=
""
;
}
return
String
.
format
(
"start=%s\tend=%s\tflags=%s\ttype=%s\tsubstring='%s'%s"
,
start
,
end
,
flags
,
span
.
getClass
().
getSimpleName
(),
spannedSubstring
,
suffix
);
fact
(
"expected"
,
getSpanAsString
(
start
,
end
,
spanType
,
spannedSubstring
)),
fact
(
"but found"
,
getAllSpansAsString
(
actual
)));
}
private
static
String
getAllSpansAsString
WithoutFlags
(
Spanned
spanned
)
{
private
static
String
getAllSpansAsString
(
Spanned
spanned
)
{
List
<
String
>
actualSpanStrings
=
new
ArrayList
<>();
for
(
Object
span
:
spanned
.
getSpans
(
0
,
spanned
.
length
(),
Object
.
class
))
{
actualSpanStrings
.
add
(
getSpanAsString
WithoutFlags
(
span
,
spanned
));
actualSpanStrings
.
add
(
getSpanAsString
(
span
,
spanned
));
}
return
TextUtils
.
join
(
"\n"
,
actualSpanStrings
);
}
private
static
String
getSpanAsString
WithoutFlags
(
Object
span
,
Spanned
spanned
)
{
private
static
String
getSpanAsString
(
Object
span
,
Spanned
spanned
)
{
int
spanStart
=
spanned
.
getSpanStart
(
span
);
int
spanEnd
=
spanned
.
getSpanEnd
(
span
);
return
getSpanAsString
WithoutFlags
(
return
getSpanAsString
(
spanStart
,
spanEnd
,
span
.
getClass
(),
spanned
.
toString
().
substring
(
spanStart
,
spanEnd
));
}
private
static
String
getSpanAsString
WithoutFlags
(
private
static
String
getSpanAsString
(
int
start
,
int
end
,
Class
<?>
span
,
String
spannedSubstring
)
{
return
String
.
format
(
"start=%s\tend=%s\ttype=%s\tsubstring='%s'"
,
...
...
testutils/src/test/java/com/google/android/exoplayer2/testutil/truth/SpannedSubjectTest.java
View file @
1e7db22e
...
...
@@ -63,7 +63,9 @@ public class SpannedSubjectTest {
int
end
=
start
+
"italic"
.
length
();
spannable
.
setSpan
(
new
StyleSpan
(
Typeface
.
ITALIC
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
).
hasItalicSpan
(
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
)
.
hasItalicSpanBetween
(
start
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
}
@Test
...
...
@@ -78,14 +80,21 @@ public class SpannedSubjectTest {
whenTesting
->
whenTesting
.
that
(
spannable
)
.
hasItalicSpan
(
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
.
hasItalicSpanBetween
(
start
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
assertThat
(
failure
).
factKeys
().
contains
(
"No matching span found"
);
assertThat
(
failure
).
factValue
(
"in text"
).
isEqualTo
(
spannable
.
toString
());
assertThat
(
failure
).
factValue
(
"expected"
).
contains
(
"flags="
+
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
failure
)
.
factValue
(
"but found"
)
.
contains
(
"flags="
+
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
.
factValue
(
"value of"
)
.
isEqualTo
(
String
.
format
(
"spanned.StyleSpan (start=%s,end=%s,style=%s).contains()"
,
start
,
end
,
Typeface
.
ITALIC
));
assertThat
(
failure
)
.
factValue
(
"expected to contain"
)
.
contains
(
String
.
valueOf
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
assertThat
(
failure
)
.
factValue
(
"but was"
)
.
contains
(
String
.
valueOf
(
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
));
}
@Test
...
...
@@ -93,7 +102,10 @@ public class SpannedSubjectTest {
AssertionError
failure
=
expectFailure
(
whenTesting
->
whenTesting
.
that
(
null
).
hasItalicSpan
(
0
,
5
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
whenTesting
.
that
(
null
)
.
hasItalicSpanBetween
(
0
,
5
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
assertThat
(
failure
).
factKeys
().
containsExactly
(
"Spanned must not be null"
);
}
...
...
@@ -105,7 +117,9 @@ public class SpannedSubjectTest {
int
end
=
start
+
"bold"
.
length
();
spannable
.
setSpan
(
new
StyleSpan
(
Typeface
.
BOLD
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
).
hasBoldSpan
(
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
)
.
hasBoldSpanBetween
(
start
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
}
@Test
...
...
@@ -116,7 +130,9 @@ public class SpannedSubjectTest {
spannable
.
setSpan
(
new
StyleSpan
(
Typeface
.
BOLD_ITALIC
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
).
hasBoldItalicSpan
(
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
)
.
hasBoldItalicSpanBetween
(
start
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
}
@Test
...
...
@@ -127,7 +143,9 @@ public class SpannedSubjectTest {
spannable
.
setSpan
(
new
StyleSpan
(
Typeface
.
BOLD
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
spannable
.
setSpan
(
new
StyleSpan
(
Typeface
.
ITALIC
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
).
hasBoldItalicSpan
(
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
assertThat
(
spannable
)
.
hasBoldItalicSpanBetween
(
start
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
);
}
@Test
...
...
@@ -144,8 +162,9 @@ public class SpannedSubjectTest {
whenTesting
->
whenTesting
.
that
(
spannable
)
.
hasBoldItalicSpan
(
incorrectStart
,
end
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
assertThat
(
expected
).
factValue
(
"expected either"
).
contains
(
"start="
+
incorrectStart
);
.
hasBoldItalicSpanBetween
(
incorrectStart
,
end
)
.
withFlags
(
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
));
assertThat
(
expected
).
factValue
(
"expected"
).
contains
(
"start="
+
incorrectStart
);
assertThat
(
expected
).
factValue
(
"but found"
).
contains
(
"start="
+
start
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment