19cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton/* 29cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * Copyright (C) 2017 The Android Open Source Project 39cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * 49cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * Licensed under the Apache License, Version 2.0 (the "License"); 59cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * you may not use this file except in compliance with the License. 69cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * You may obtain a copy of the License at 79cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * 89cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * http://www.apache.org/licenses/LICENSE-2.0 99cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * 109cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * Unless required by applicable law or agreed to in writing, software 119cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * distributed under the License is distributed on an "AS IS" BASIS, 129cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * See the License for the specific language governing permissions and 149cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton * limitations under the License. 159cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton */ 169cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 179c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonpackage androidx.core.util 189cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 198770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Whartonimport android.support.test.filters.SdkSuppress 209cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport android.util.AtomicFile 219c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonimport androidx.testutils.assertThrows 229cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.Assert.assertArrayEquals 239cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.Assert.assertEquals 249cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.Before 259cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.Rule 269cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.Test 279cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport org.junit.rules.TemporaryFolder 289cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonimport java.io.IOException 299cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 308770f84ffe4cf2ee98744f30ee8b4cd659a65633Jake Wharton@SdkSuppress(minSdkVersion = 17) 319cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Whartonclass AtomicFileTest { 329cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @get:Rule val temporaryFolder = TemporaryFolder() 339cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 349cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton private lateinit var file: AtomicFile 359cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 369cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Before fun before() { 379cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file = AtomicFile(temporaryFolder.newFile()) 389cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 399cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 409cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun tryWriteSuccess() { 419cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.tryWrite { 429cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton it.write(byteArrayOf(0, 1, 2)) 439cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 449cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val bytes = file.openRead().use { it.readBytes() } 459cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(0, 1, 2), bytes) 469cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 479cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 489cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun tryWriteFail() { 499cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val os = file.startWrite() 509cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton os.write(byteArrayOf(0, 1, 2)) 519cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.finishWrite(os) 529cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 539cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val failure = IOException("Broken!") 549cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertThrows<IOException> { 559cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.tryWrite { 569cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton it.write(byteArrayOf(3, 4, 5)) 579cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton throw failure 589cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 599cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton }.isSameAs(failure) 609cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 619cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val bytes = file.openRead().use { it.readBytes() } 629cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(0, 1, 2), bytes) 639cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 649cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 659cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun writeBytes() { 669cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.writeBytes(byteArrayOf(0, 1, 2)) 679cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 689cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val bytes = file.openRead().use { it.readBytes() } 699cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(0, 1, 2), bytes) 709cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 719cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 729cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun writeText() { 739cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.writeText("Hey") 749cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 759cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val bytes = file.openRead().use { it.readBytes() } 769cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(72, 101, 121), bytes) 779cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 789cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 799cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun writeTextCharset() { 809cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.writeText("Hey", charset = Charsets.UTF_16LE) 819cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 829cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val bytes = file.openRead().use { it.readBytes() } 839cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(72, 0, 101, 0, 121, 0), bytes) 849cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 859cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 869cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun readBytes() { 879cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val os = file.startWrite() 889cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton os.write(byteArrayOf(0, 1, 2)) 899cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.finishWrite(os) 909cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 919cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertArrayEquals(byteArrayOf(0, 1, 2), file.readBytes()) 929cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 939cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 949cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun readText() { 959cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val os = file.startWrite() 969cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton os.write(byteArrayOf(72, 101, 121)) 979cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.finishWrite(os) 989cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 999cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertEquals("Hey", file.readText()) 1009cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 1019cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 1029cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton @Test fun readTextCharset() { 1039cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton val os = file.startWrite() 1049cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton os.write(byteArrayOf(72, 0, 101, 0, 121, 0)) 1059cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton file.finishWrite(os) 1069cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton 1079cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton assertEquals("Hey", file.readText(charset = Charsets.UTF_16LE)) 1089cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton } 1099cb884da9674e8e590fbaa52f549f8cc52fd0958Jake Wharton} 110