// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // @dart = 2.7 import 'package:expect/expect.dart'; import 'package:compiler/src/js_backend/string_abbreviation.dart'; void test(List inputs, List expected, {int minLength = 6}) { Expect.listEquals( expected, abbreviateToIdentifiers(inputs, minLength: minLength)); } void main() { // No strings yields an empty pool. test([], []); // Results identical stretches compressed-out. test( [ 'Greetings Bob Smith', 'Great work!', 'Greetings Alice', 'Greetings Bob Henry', ], [ 'GreetiBS', 'Great_', 'GreetiA', 'GreetiBH', ], ); test( [ 'Greetings Bob Smith', 'Great work!', 'Greetings Alice', 'Greetings Bob Henry', ], [ 'GeBS', 'Ga', 'GeA', 'GeBH', ], minLength: 1, ); // Non-identifiers are replaced with '_' if that is unambiguous. test( ['!pingpong', 'xylograph'], ['_pingp', 'xylogr'], ); test(['\u1234\xff'], ['__']); test(['\u1234\xff', 'smile'], ['__', 'smile']); test( ['a*b+c', '(x,y)', 'a*c-e', '(x,z)'], ['a_b_c', '_x_y_', 'a_c_e', '_x_z_'], ); // Multiple discriminating non-identifier characters are replaced with an // escape, which causes a potentially ambiguous non-escape to be escaped. test( ['a xylograph', 'a !pingpong', 'a %percent'], ['a_x78ylo', 'a_x21pin', 'a_x25per'], ); test( ['a\u1234z', 'auz'], ['a_z', 'auz'], ); test( ['a\u1234z', 'auz'], ['a_', 'au'], minLength: 1, ); test( ['a\u1234z', 'auz', 'a&z'], ['au1234z', 'ax75z', 'ax26z'], ); test( ['a\u1234z', 'auz', 'a&z'], ['au1234', 'ax75', 'ax26'], minLength: 1, ); test( ['a\u1234z', 'auz', 'a&z', 'a\u2345z'], ['au1234z', 'ax75z', 'ax26z', 'au2345z'], ); test( ['a\u1234z', 'auz', 'a&z', 'a\u2345z'], ['au1234', 'ax75', 'ax26', 'au2345'], minLength: 1, ); test( ['a\u1234z', 'auz', 'a&z', 'a\u2345z', 'axe'], ['au1234z', 'ax75z', 'ax26z', 'au2345z', 'ax78e'], ); test( ['a\u1234z', 'auz', 'a&z', 'a\u2345z', 'axe'], ['au1234', 'ax75', 'ax26', 'au2345', 'ax78'], minLength: 1, ); }