// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "third_party/blink/renderer/core/css/cssom/inline_style_property_map.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/core/css/properties/css_property.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/style_property_shorthand.h" namespace blink { TEST(InlineStylePropertyMapTest, PendingSubstitutionValueCrash) { // Test that trying to reify any longhands with a CSSPendingSubstitutionValue // does not cause a crash. Document* document = Document::CreateForTest(); Element* div = document->CreateRawElement(html_names::kDivTag); InlineStylePropertyMap map(div); // For each shorthand, create a declaration with a var() reference and try // reifying all longhands. for (CSSPropertyID property_id : CSSPropertyIDList()) { const CSSProperty& shorthand = CSSProperty::Get(property_id); if (!shorthand.IsShorthand()) continue; if (shorthand.Exposure() == CSSExposure::kNone) continue; div->SetInlineStyleProperty(property_id, "var(--dummy)"); const StylePropertyShorthand& longhands = shorthandForProperty(property_id); for (unsigned i = 0; i < longhands.length(); i++) { map.get(document->GetExecutionContext(), longhands.properties()[i]->GetCSSPropertyName().ToAtomicString(), ASSERT_NO_EXCEPTION); } } } } // namespace blink