bucket_names.tentative.https.any.js (3156B)
1 // META: title=Buckets API: Basic tests for bucket names. 2 // META: script=resources/util.js 3 // META: global=window,worker 4 5 const kGoodBucketNameTests = [ 6 ['abcdefghijklmnopqrstuvwxyz0123456789-_', 'with allowed characters'], 7 ['2021-01-01', 'with `-` in the middle'], 8 ['2021_01_01', 'with `_` in the middle'], 9 ['2021_01_01_', 'ending with `_`'], 10 ['2021-01-01-', 'ending with `-`'], 11 ]; 12 13 const kBadBucketNameTests = [ 14 ['_bucket', 'start with `_`'], 15 ['-bucket', 'start with `-`'], 16 ['bucket name', 'have a space'], 17 ['bUcKet123', 'are not all lower case'], 18 ['bucket♦♥♠♣', 'are not in ASCII'], 19 ['2021/01/01', 'include an invalid special character'], 20 [' ', 'have no characters'], 21 ['', 'are an empty string'], 22 ['mjnkhtwsiyjsrxvrzzqafldfvomqopdjfiuxqelfkllcugrhvvblkvmiqlguhhqepoggyu', 23 'exceed 64 chars'] 24 ]; 25 26 // Test valid bucket names on open(). 27 kGoodBucketNameTests.forEach(test_data => { 28 const bucket_name = test_data[0]; 29 const test_description = test_data[1]; 30 31 promise_test(async testCase => { 32 await prepareForBucketTest(testCase); 33 const bucket = await navigator.storageBuckets.open(bucket_name); 34 assert_equals(bucket.name, bucket_name); 35 36 const buckets = await navigator.storageBuckets.keys(); 37 assert_array_equals(buckets, [bucket_name]); 38 }, `open() allows bucket names ${test_description}`); 39 }); 40 41 // Test invalid bucket names on open(). 42 kBadBucketNameTests.forEach(test_data => { 43 const bucket_name = test_data[0]; 44 const test_description = test_data[1]; 45 46 promise_test(async testCase => { 47 await prepareForBucketTest(testCase); 48 return promise_rejects_js( 49 testCase, TypeError, 50 navigator.storageBuckets.open(bucket_name)); 51 }, `open() throws an error if bucket names ${test_description}`); 52 }); 53 54 // Test valid bucket names on delete(). 55 kGoodBucketNameTests.forEach(test_data => { 56 const bucket_name = test_data[0]; 57 const test_description = test_data[1]; 58 59 promise_test(async testCase => { 60 await prepareForBucketTest(testCase); 61 await navigator.storageBuckets.open(bucket_name); 62 let buckets = await navigator.storageBuckets.keys(); 63 assert_equals(buckets.length, 1); 64 65 await navigator.storageBuckets.delete(bucket_name); 66 67 buckets = await navigator.storageBuckets.keys(); 68 assert_equals(buckets.length, 0); 69 }, `delete() allows bucket names ${test_description}`); 70 }); 71 72 // Test invalid bucket names on delete(). 73 kBadBucketNameTests.forEach(test_data => { 74 const bucket_name = test_data[0]; 75 const test_description = test_data[1]; 76 77 promise_test(async testCase => { 78 await prepareForBucketTest(testCase); 79 return promise_rejects_js( 80 testCase, TypeError, 81 navigator.storageBuckets.delete(bucket_name)); 82 }, `delete() throws an error if bucket names ${test_description}`); 83 }); 84 85 promise_test(async testCase => { 86 await prepareForBucketTest(testCase); 87 88 await navigator.storageBuckets.open('bucket_name'); 89 await navigator.storageBuckets.open('bucket_name'); 90 91 const buckets = await navigator.storageBuckets.keys(); 92 assert_array_equals(buckets, ['bucket_name']); 93 }, 'open() does not store duplicate bucket names');