Вы можете использовать display: table(-cell)
вместо поплавков. Совместимость IE8 +. Не забудьте активировать table-layout: fixed
, чтобы браузеры учитывали установленную вами ширину и не пытались сделать все возможное с содержанием «ячеек». Примечание: этот режим отображения CSS имеет мало общего с таблицами HTML, за исключением последних, конечно, по умолчанию используется тот же алгоритм. Это не таблица макетов HTML.
Вам нужно переместить заголовок за пределы «ряда». Вы не можете обернуть, как вы могли бы с Flexbox или плавает.
.red, .blue {
color: white;
}
.red {
background-color: red;
}
.blue {
background-color: blue;
}
.row{
overflow: auto;
display: table;
width: 100%;
height: 100%;
table-layout: fixed;
}
.row::after {
content: "";
clear: both;
display: table;
}
[class^="col-"] {
/*float: left;*/
display: table-cell;
height: 100%;
}
.col-3 {
width: 30%;
}
.col-7 {
width: 70%;
}
<h1> Example 1</h1>
<div class="row">
<div class="col-3 red">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Why do we use it?
</div>
<div class="col-7 blue">ipsum ipsum</div>
</div>
По моему скромному мнению, это - плохая практика, чтобы иметь модульные тесты, создают или ожидают на потоках, и т.д. Вы хотели бы, чтобы эти тесты работали в доли секунды. Вот почему я хотел бы предложить подход с 2 шагами к тестированию асинхронных процессов.
Начните процесс и ожидайте результата с помощью Future
.
An alternative is to use the CountDownLatch class.
public class DatabaseTest {
/**
* Data limit
*/
private static final int DATA_LIMIT = 5;
/**
* Countdown latch
*/
private CountDownLatch lock = new CountDownLatch(1);
/**
* Received data
*/
private List<Data> receiveddata;
@Test
public void testDataRetrieval() throws Exception {
Database db = new MockDatabaseImpl();
db.getData(DATA_LIMIT, new DataCallback() {
@Override
public void onSuccess(List<Data> data) {
receiveddata = data;
lock.countDown();
}
});
lock.await(2000, TimeUnit.MILLISECONDS);
assertNotNull(receiveddata);
assertEquals(DATA_LIMIT, receiveddata.size());
}
}
NOTE you can't just used syncronized with a regular object as a lock, as fast callbacks can release the lock before the lock's wait method is called. See this blog post by Joe Walnes.
EDIT Removed syncronized blocks around CountDownLatch thanks to comments from @jtahlborn and @Ring
Вы можете попробовать использовать библиотеку Awaitility. Она позволяет легко тестировать системы, о которых вы говорите.