Ristretto

A short shot of espresso

License

License

Categories

Categories

Singularity Application Layer Libs Cluster Management
GroupId

GroupId

com.appsingularity
ArtifactId

ArtifactId

ristretto
Last Version

Last Version

1.0.0
Release Date

Release Date

Type

Type

aar
Description

Description

Ristretto
A short shot of espresso
Project URL

Project URL

https://github.com/vincetreur/ristretto
Source Code Management

Source Code Management

https://github.com/vincetreur/ristretto

Download ristretto

How to add to project

<!-- https://jarcasting.com/artifacts/com.appsingularity/ristretto/ -->
<dependency>
    <groupId>com.appsingularity</groupId>
    <artifactId>ristretto</artifactId>
    <version>1.0.0</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/com.appsingularity/ristretto/
implementation 'com.appsingularity:ristretto:1.0.0'
// https://jarcasting.com/artifacts/com.appsingularity/ristretto/
implementation ("com.appsingularity:ristretto:1.0.0")
'com.appsingularity:ristretto:aar:1.0.0'
<dependency org="com.appsingularity" name="ristretto" rev="1.0.0">
  <artifact name="ristretto" type="aar" />
</dependency>
@Grapes(
@Grab(group='com.appsingularity', module='ristretto', version='1.0.0')
)
libraryDependencies += "com.appsingularity" % "ristretto" % "1.0.0"
[com.appsingularity/ristretto "1.0.0"]

Dependencies

compile (1)

Group / Artifact Type Version
com.android.support.test.espresso » espresso-core jar 2.2.2

Project Modules

There are no modules declared in this project.

Ristretto

A short shot of Espresso.

A shorthand extension on top of Espresso.

Espresso's consistency makes it really easy to learn.

Want to match a view with a specific id? Use withId(R.id.some_id). Need to match with a piece of text? Use withText(R.id.some_text) or withText("some text). Awesome, consistent and it's very clear what it is you are doing.

However...

After a few hours writing test code you'll find your code being a little bit too verbose. Not anymore.

Why should you need to explicitly specify that you are matching with some text if you are passing in some text as a parameter? Some for the view id, you can already see that it is a view id.

Ristretto allows you to write the same test code as you already write, but less verbose. Let's see some examples.

Espresso vs Ristretto

Simple replacements

Espresso Ristretto
withId(R.id.some_id) with(R.id.some_id)
withText(R.string.some_text) with(R.string.some_text)
withText("some text") with("some text")

In combination with onView()

Espresso Ristretto
onView(withId(R.id.some_id)) withView(R.id.some_id)
onView(withText(R.string.some_text)) withView(R.string.some_text)
onView(withText("some text")) withView("some text")

For displayed views

Espresso Ristretto
onView(allOf(withId(R.id.some_id), isDisplayed())) withDisplayedView(R.id.some_id)
onView(allOf(withText(R.string.some_text), isDisplayed())) withDisplayedView(R.string.some_text)
onView(allOf(withText("some text"), isDisplayed())) withDisplayedView("some text")

Ordering does not matter. onView(allOf(withId(R.id.some_id), isDisplayed())) is equal to onView(allOf(isDisplayed(), withId(R.id.some_id))).

How to use

Configure your build.gradle and add one dependency and you are ready to go.

repositories {
    jcenter()
}

dependencies {
    androidTestCompile project("com.appsingularity:ristretto:1.0.0")
}

How to learn

Ristretto comes with a set of lint checks that will point out all the places where you can write Ristretto shorthand instead of the longform Espresso. Just add the Ristretto Lint dependency to your build.gradle

dependencies {
    debugCompile project("com.appsingularity:ristretto-lint:1.0.0")
}

Version

Version 1.0.0

  • Initial release.

License

Copyright 2017 Vince M. Treur

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Versions

Version
1.0.0