This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
|
||||
Build command: ./gradlew --no-daemon --console=plain :androidApp:assembleDebug :androidApp:assembleDebugAndroidTest
|
||||
Fetching the official Gradle 8.13 wrapper; a pinned SHA-256 is required.
|
||||
% Total % Received % Xferd Average Speed Time Time Time Current
|
||||
Dload Upload Total Spent Left Speed
|
||||
␍ 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
|
||||
Exit status: 6
|
||||
@@ -0,0 +1,114 @@
|
||||
Prepared 112 production-core/JVM checks.
|
||||
PASS CoreTests.pdfMagicWinsOverName
|
||||
PASS CoreTests.imageMagicWinsOverName
|
||||
PASS CoreTests.caseInsensitiveExtensions
|
||||
PASS CoreTests.mimeFallbackHandlesMissingExtension
|
||||
PASS CoreTests.htmlAndSvgAreOnlyText
|
||||
PASS CoreTests.unknownBinaryIsNotAssumedText
|
||||
PASS CoreTests.legacyBinaryDetected
|
||||
PASS CoreTests.zipMagicDisallowsTextPretence
|
||||
PASS CoreTests.extensionlessOfficeInspected
|
||||
PASS CoreTests.utf8BomAndUnicode
|
||||
PASS CoreTests.utf16LittleEndian
|
||||
PASS CoreTests.utf16BigEndian
|
||||
PASS CoreTests.utf16RejectsOddBytes
|
||||
PASS CoreTests.utf16RejectsLoneSurrogate
|
||||
PASS CoreTests.invalidUtf8Rejected
|
||||
PASS CoreTests.nulBinaryRejected
|
||||
PASS CoreTests.xmlPreservesMixedContent
|
||||
PASS CoreTests.xmlDecodesSafeEntities
|
||||
PASS CoreTests.xmlCdataIsLiteral
|
||||
PASS CoreTests.xmlRejectsDtd
|
||||
PASS CoreTests.xmlRejectsCustomEntity
|
||||
PASS CoreTests.xmlRejectsMismatchedTags
|
||||
PASS CoreTests.xmlRejectsMultipleRoots
|
||||
PASS CoreTests.xmlRejectsDeepNesting
|
||||
PASS CoreTests.xmlRejectsTooManyNodes
|
||||
PASS CoreTests.xmlRejectsTooManyAttributes
|
||||
PASS CoreTests.xmlRejectsDuplicateAttribute
|
||||
PASS CoreTests.xmlRejectsUnquotedAttribute
|
||||
PASS CoreTests.xmlRejectsInvalidCharacterReference
|
||||
PASS CoreTests.packagePathsStayInsideRoot
|
||||
PASS CoreTests.packageRootEscapeRejected
|
||||
PASS CoreTests.externalRelationshipsRejected
|
||||
PASS CoreTests.csvQuotedDelimitersAndNewlines
|
||||
PASS CoreTests.csvEscapedQuotes
|
||||
PASS CoreTests.csvEmptyTrailingCells
|
||||
PASS CoreTests.csvWindowsNewlines
|
||||
PASS CoreTests.csvSemicolonDetection
|
||||
PASS CoreTests.csvFormulaRemainsLiteral
|
||||
PASS CoreTests.csvBadQuotesFailClearly
|
||||
PASS CoreTests.csvRowLimit
|
||||
PASS CoreTests.csvColumnLimit
|
||||
PASS CoreTests.basicMarkdownHasHeadingsAndCode
|
||||
PASS CoreTests.textByteLimit
|
||||
PASS CoreTests.columnLabelsBeyondZ
|
||||
PASS CoreTests.docxReadingTextAndTables
|
||||
PASS CoreTests.xlsxSparseCellsAndSharedStrings
|
||||
PASS CoreTests.xlsxTooWideRejected
|
||||
PASS CoreTests.pptxFollowsRelationshipOrderNotFilenames
|
||||
PASS CoreTests.odtMixedTextSpacesAndHeadings
|
||||
PASS CoreTests.odsRepeatedPaddingDoesNotExplode
|
||||
PASS CoreTests.odsRepeatedNonemptyRowsRejected
|
||||
PASS CoreTests.odpSlideNamesPreserved
|
||||
PASS CoreTests.malformedOfficePartRejected
|
||||
PASS CoreTests.zipIndexDoesNotReadEntries
|
||||
PASS CoreTests.literalSearchAndHitCap
|
||||
PASS CoreTests.tableSearchUsesActualRows
|
||||
PASS CoreTests.textExportContainsSectionNamesAndValues
|
||||
PASS CoreTests.repeatedContentAmplificationBounded
|
||||
PASS CoreTests.veryLongSingleBlockRejected
|
||||
PASS CoreTests.macroExtensionsNotReclassifiedAsZip
|
||||
PASS CoreTests.renamedMacroPackageRejected
|
||||
PASS CoreTests.publicCoreFacadeReadsText
|
||||
PASS CoreTests.publicCoreFacadeRejectsBinary
|
||||
PASS BrowserTests.directoriesRemainFirstWhenDescending
|
||||
PASS BrowserTests.filtersNamesCaseInsensitively
|
||||
PASS BrowserTests.searchIsLiteralNotRegex
|
||||
PASS BrowserTests.hidesDotFilesUnlessEnabled
|
||||
PASS BrowserTests.unknownSizesRemainLastInBothDirections
|
||||
PASS BrowserTests.modifiedSortingUsesTimestamps
|
||||
PASS BrowserTests.typeSortingIsDeterministic
|
||||
PASS BrowserTests.duplicateProviderRowsDoNotDuplicateComposeKeys
|
||||
PASS BrowserTests.listingProcessingHasAnUpperBound
|
||||
PASS BrowserTests.labelsStripSpoofingButLeaveIdsUntouched
|
||||
PASS BrowserTests.labelsAreBoundedAndNonempty
|
||||
PASS BrowserTests.mimeMatchingHandlesWildcardsAndParameters
|
||||
PASS BrowserTests.malformedMimeRequestsFailClosed
|
||||
PASS BrowserTests.wildcardIsNotAnActualFileMimeType
|
||||
PASS BrowserTests.extraMimeTypesNarrowTheBaseType
|
||||
PASS BrowserTests.excessiveMimeTypesAreRejected
|
||||
PASS BrowserTests.foldersStayNavigableInFilteredPicker
|
||||
PASS BrowserTests.directoriesAndVirtualDocumentsCannotBeReturned
|
||||
PASS BrowserTests.singleSelectionReplacesPreviousSelection
|
||||
PASS BrowserTests.togglingSelectedFileRemovesIt
|
||||
PASS BrowserTests.multipleSelectionIsBounded
|
||||
PASS BrowserTests.unsupportedSelectionIsRejected
|
||||
PASS BrowserTests.emptySelectionIsRejected
|
||||
PASS BrowserTests.duplicateSelectionIsRejected
|
||||
PASS BrowserTests.singleRequestCannotReturnTwoFiles
|
||||
PASS BrowserTests.individualSizeBudgetIsChecked
|
||||
PASS BrowserTests.aggregateSizeBudgetIsChecked
|
||||
PASS BrowserTests.negativeSizeIsNotTrusted
|
||||
PASS BrowserTests.unknownSizesAreAllowedPendingStreamingLimit
|
||||
PASS BrowserTests.comparatorRemainsAntisymmetric
|
||||
PASS BrowserTests.actualStreamBytesAreLimitedEvenWithUnknownMetadata
|
||||
PASS BrowserTests.totalByteBudgetSpansFiles
|
||||
PASS BrowserTests.newFileResetsOnlyTheFileCounter
|
||||
PASS BrowserTests.zeroByteFilesAreAllowed
|
||||
PASS BrowserTests.negativeCopyCountsAreRejected
|
||||
PASS BrowserTests.byteCountersRejectHugeChunksWithoutOverflow
|
||||
PASS BrowserTests.invalidCopyBudgetsAreRejected
|
||||
PASS ZipTests.archiveRoundtrip
|
||||
PASS ZipTests.traversalRejected
|
||||
PASS ZipTests.absolutePathsRejected
|
||||
PASS ZipTests.backslashPathsRejected
|
||||
PASS ZipTests.tooManyEntriesRejected
|
||||
PASS ZipTests.oversizedEntryRejectedOnlyWhenRead
|
||||
PASS ZipTests.compressionBombRejected
|
||||
PASS ZipTests.cumulativeExpansionBudgetEnforced
|
||||
PASS ZipTests.repeatedReadsConsumeBudget
|
||||
PASS ZipTests.extensionlessOfficeLoadedThroughFullAdapter
|
||||
PASS ZipTests.textByteBudgetEnforcedBeforeRead
|
||||
PASS ZipTests.htmlRemainsInertSource
|
||||
RESULT: 112/112 checks passed
|
||||
@@ -0,0 +1,23 @@
|
||||
Source under test: /mnt/data/fw-0.2.2/fileworkbench/androidApp/src/main/kotlin/dev/fileworkbench/android/browser/SafBrowserStore.kt
|
||||
Extracted production cursor-reading block + real common models; Android APIs are test doubles.
|
||||
out/folder-listing/FolderListingHarness.kt:58:23: warning: variable 'loading' initializer is redundant
|
||||
var loading = false
|
||||
^
|
||||
out/folder-listing/FolderListingHarness.kt:59:36: warning: variable 'information' initializer is redundant
|
||||
var information: String? = null
|
||||
^
|
||||
PASS normal rows without extras are not rejected
|
||||
PASS empty cursor without extras is a valid empty directory
|
||||
PASS information-only cursor keeps rows and message
|
||||
PASS loading cursor without error keeps partial rows
|
||||
PASS loading cursor may initially contain no rows
|
||||
PASS provider error takes precedence over info without discarding available rows
|
||||
PASS actual null query result still raises the no-listing error
|
||||
PASS cursor closes when row iteration throws
|
||||
PASS cursor closes on cancellation during iteration
|
||||
PASS entry limit still marks an oversized directory truncated
|
||||
PASS exactly the entry limit is not marked truncated
|
||||
PASS duplicate provider IDs remain deduplicated
|
||||
PASS missing and oversized document IDs are skipped
|
||||
PASS provider messages still use the shared label sanitizer
|
||||
Folder-listing host regression: 14 passed, 0 failed. NOT an Android/device test.
|
||||
@@ -0,0 +1,21 @@
|
||||
Source under test: /mnt/data/SafBrowserStore-before-0.2.2.kt
|
||||
Extracted production cursor-reading block + real common models; Android APIs are test doubles.
|
||||
FAIL normal rows without extras are not rejected: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL empty cursor without extras is a valid empty directory: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL information-only cursor keeps rows and message: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL loading cursor without error keeps partial rows: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL loading cursor may initially contain no rows: PreviewException: The storage provider did not return a folder listing.
|
||||
PASS provider error takes precedence over info without discarding available rows
|
||||
PASS actual null query result still raises the no-listing error
|
||||
PASS cursor closes when row iteration throws
|
||||
PASS cursor closes on cancellation during iteration
|
||||
FAIL entry limit still marks an oversized directory truncated: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL exactly the entry limit is not marked truncated: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL duplicate provider IDs remain deduplicated: PreviewException: The storage provider did not return a folder listing.
|
||||
FAIL missing and oversized document IDs are skipped: PreviewException: The storage provider did not return a folder listing.
|
||||
PASS provider messages still use the shared label sanitizer
|
||||
Folder-listing host regression: 5 passed, 9 failed. NOT an Android/device test.
|
||||
Exception in thread "main" java.lang.IllegalStateException: 9 regression checks failed
|
||||
at dev.fileworkbench.testing.FolderListingHarnessKt.main(FolderListingHarness.kt:158)
|
||||
at dev.fileworkbench.testing.FolderListingHarnessKt.main(FolderListingHarness.kt)
|
||||
Original-source regression exit status: 1 (failure expected)
|
||||
@@ -0,0 +1 @@
|
||||
Kotlin PSI syntax: 44 files, 0 parse errors. Android/Compose type resolution is NOT tested.
|
||||
@@ -0,0 +1,13 @@
|
||||
PASS 0.2.0: git apply --check, apply (exact fixed bytes), reverse --check and reverse (exact original bytes)
|
||||
PASS 0.2.1: git apply --check, apply (exact fixed bytes), reverse --check and reverse (exact original bytes)
|
||||
PASS downloadable SafBrowserStore.kt is identical to the complete project file
|
||||
Modified files versus shipped 0.2.1:
|
||||
CHANGELOG.md
|
||||
README.md
|
||||
androidApp/build.gradle.kts
|
||||
androidApp/src/androidTest/kotlin/dev/fileworkbench/android/BrowserIntegrationTest.kt
|
||||
androidApp/src/debug/kotlin/dev/fileworkbench/android/testing/FixtureDocumentsProvider.kt
|
||||
androidApp/src/main/kotlin/dev/fileworkbench/android/browser/SafBrowserStore.kt
|
||||
docs/BROWSER.md
|
||||
docs/BROWSER_ACCEPTANCE.md
|
||||
docs/VALIDATION.md
|
||||
@@ -0,0 +1,3 @@
|
||||
PASS project invariants: XML, permission-free manifest, isolated PDF service, narrow FileProvider, portable core, no WebView/log calls.
|
||||
PASS browser source invariants: APP_FILES/GET_CONTENT, standard picker activity, no system-picker impersonation, narrow copied paths, read-only results, sanitized activity defaults, debug fixture excluded from main manifest.
|
||||
PASS PDF source regression guard: no PdfDocument().use call (pattern check only).
|
||||
Reference in New Issue
Block a user