예제 #1
0
SearchResult searchProperty(const Property &property,
                            const TestParams &params,
                            TestListener &listener) {
  SearchResult searchResult;
  searchResult.type = SearchResult::Type::Success;
  searchResult.numSuccess = 0;
  searchResult.numDiscarded = 0;
  searchResult.tags.reserve(params.maxSuccess);

  const auto maxDiscard = params.maxDiscardRatio * params.maxSuccess;

  auto recentDiscards = 0;
  auto r = Random(params.seed);
  while (searchResult.numSuccess < params.maxSuccess) {
    const auto size =
        sizeFor(params, searchResult.numSuccess) + (recentDiscards / 10);
    const auto random = r.split();

    auto shrinkable = property(random, size);
    auto caseDescription = shrinkable.value();
    listener.onTestCaseFinished(caseDescription);
    const auto &result = caseDescription.result;

    switch (result.type) {
    case CaseResult::Type::Failure:
      searchResult.type = SearchResult::Type::Failure;
      searchResult.failure =
          SearchResult::Failure(std::move(shrinkable), size, random);
      return searchResult;

    case CaseResult::Type::Discard:
      searchResult.numDiscarded++;
      recentDiscards++;
      if (searchResult.numDiscarded > maxDiscard) {
        searchResult.type = SearchResult::Type::GaveUp;
        searchResult.failure =
            SearchResult::Failure(std::move(shrinkable), size, random);
        return searchResult;
      }
      break;

    case CaseResult::Type::Success:
      searchResult.numSuccess++;
      recentDiscards = 0;
      if (!caseDescription.tags.empty()) {
        searchResult.tags.push_back(std::move(caseDescription.tags));
      }
      break;
    }
  }

  return searchResult;
}
ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState, EventTarget& eventTarget, HTMLImageElement* image, ExceptionState& exceptionState)
{
    LayoutSize s = sizeFor(image);
    return createImageBitmap(scriptState, eventTarget, image, 0, 0, s.width(), s.height(), exceptionState);
}
ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState, EventTarget& eventTarget, HTMLVideoElement* video, ExceptionState& exceptionState)
{
    IntSize s = sizeFor(video);
    return createImageBitmap(scriptState, eventTarget, video, 0, 0, s.width(), s.height(), exceptionState);
}