<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
<link rel="help" href="https://drafts.csswg.org/css-values-4/#mixed-percentages">
<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize">
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
<link rel="author" title="Tab Atkins-Bittner" href="https://xanthir.com/contact">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../support/serialize-testcommon.js"></script>
<div style="width: 100px;">
    <div id=target></div>
</div>
<script>
function test_serialization(t,s,c,u, {prop}={}) {
    test_specified_serialization(prop || 'text-indent', t, s);
    test_computed_serialization(prop || 'text-indent', t, c);
    if(u) test_used_serialization(prop || 'margin-left', t, u);
}

// If fully resolvable to a number, serialize to a calc() or all the way to a number.
test_serialization(
    'min(1px)',
    'calc(1px)',
    '1px',
    '1px');
test_serialization(
    'max(1px)',
    'calc(1px)',
    '1px',
    '1px');

// If not, keep as the function.
test_serialization(
    'min(1% + 1px)',
    'min(1% + 1px)',
    'min(1% + 1px)',
    '2px');
test_serialization(
    'min(1px + 1%)',
    'min(1% + 1px)',
    'min(1% + 1px)',
    '2px');
test_serialization(
    'max(1px + 1%)',
    'max(1% + 1px)',
    'max(1% + 1px)',
    '2px');

// Arguments are simplified, but not reordered.
test_serialization(
    'min(20px, 10%)',
    'min(20px, 10%)',
    'min(20px, 10%)',
    '10px');
test_serialization(
    'min(1em, 10%)',
    'min(1em, 10%)',
    'min(16px, 10%)',
    '10px');
test_serialization(
    'min(10%, 20px)',
    'min(10%, 20px)',
    'min(10%, 20px)',
    '10px');
test_serialization(
    'min(10%, 1em)',
    'min(10%, 1em)',
    'min(10%, 16px)',
    '10px');
test_serialization(
    'max(20px, 10%)',
    'max(20px, 10%)',
    'max(20px, 10%)',
    '20px');
test_serialization(
    'max(1em, 10%)',
    'max(1em, 10%)',
    'max(16px, 10%)',
    '16px');
test_serialization(
    'max(10%, 20px)',
    'max(10%, 20px)',
    'max(10%, 20px)',
    '20px');
test_serialization(
    'max(10%, 1em)',
    'max(10%, 1em)',
    'max(10%, 16px)',
    '16px');

// Within an argument, normal sorting occurs
test_serialization(
    'min(10% + 30px, 5em + 5%)',
    'min(10% + 30px, 5% + 5em)',
    'min(10% + 30px, 5% + 80px)',
    '40px');
test_serialization(
    'max(10% + 30px, 5em + 5%)',
    'max(10% + 30px, 5% + 5em)',
    'max(10% + 30px, 5% + 80px)',
    '85px');

// min()/max() are valid inside a calc(),
// and retain their relative order
test_serialization(
    'calc(min(10% + 1px) + max(1em + 10%) + min(10% + 20px))',
    'calc(min(10% + 1px) + max(10% + 1em) + min(10% + 20px))',
    'calc(min(10% + 1px) + max(10% + 16px) + min(10% + 20px))',
    '67px');

// min()/max() can be combined with plain units as well.
// While min()/max() maintain their own ordering,
// ordinary units will re-sort around them.
test_serialization(
    'calc(1em + max(10% + 20px) + 5% + min(1em + 10%) + 10px)',
    'calc(5% + 1em + 10px + max(10% + 20px) + min(10% + 1em))',
    'calc(5% + 26px + max(10% + 20px) + min(10% + 16px))',
    '87px');
</script>
