initial commit v 0.2.0
Verify source and build Android / android (push) Canceled after 0s

This commit is contained in:
2026-09-24 22:49:27 +02:00
commit db873063f8
129 changed files with 7512 additions and 0 deletions
@@ -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
+114
View File
@@ -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
+23
View File
@@ -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)
+1
View File
@@ -0,0 +1 @@
Kotlin PSI syntax: 44 files, 0 parse errors. Android/Compose type resolution is NOT tested.
+13
View File
@@ -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
+3
View File
@@ -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).