@dailephd/my-dev-kit-lab 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +46 -269
  2. package/dist/scripts/security/validate.js +177 -70
  3. package/dist/src/audits/codeRot/detectors/architectureDriftDetector.js +5 -2
  4. package/dist/src/audits/codeRot/detectors/securityValidationAssumptionRotDetector.js +5 -2
  5. package/dist/src/audits/core/collectSourceFacts.js +21 -10
  6. package/dist/src/mobile/android/audit/androidFinding.js +68 -0
  7. package/dist/src/mobile/android/audit/checkResultBuilder.js +97 -0
  8. package/dist/src/mobile/android/audit/deepLinkAudit.js +183 -0
  9. package/dist/src/mobile/android/audit/exportedComponentAudit.js +183 -0
  10. package/dist/src/mobile/android/audit/intentFilterAudit.js +128 -0
  11. package/dist/src/mobile/android/audit/permissionAudit.js +142 -0
  12. package/dist/src/mobile/android/detect/androidTargetDetection.js +18 -0
  13. package/dist/src/mobile/android/detect/buildFileEvidence.js +36 -0
  14. package/dist/src/mobile/android/detect/classify.js +150 -0
  15. package/dist/src/mobile/android/detect/detectAndroidProject.js +252 -0
  16. package/dist/src/mobile/android/detect/settingsModules.js +60 -0
  17. package/dist/src/mobile/android/detect/sourceEvidence.js +92 -0
  18. package/dist/src/mobile/android/detect/traversal.js +79 -0
  19. package/dist/src/mobile/android/detect/versionCatalogEvidence.js +37 -0
  20. package/dist/src/mobile/android/detection.js +28 -0
  21. package/dist/src/mobile/android/gradle/gradleMetadataCheckResult.js +120 -0
  22. package/dist/src/mobile/android/gradle/moduleMetadataExtractor.js +137 -0
  23. package/dist/src/mobile/android/gradle/pluginVersionExtractor.js +40 -0
  24. package/dist/src/mobile/android/gradle/readAndroidGradleMetadata.js +210 -0
  25. package/dist/src/mobile/android/gradle/releaseMetadataSummary.js +64 -0
  26. package/dist/src/mobile/android/gradle/settingsMetadata.js +20 -0
  27. package/dist/src/mobile/android/gradle/types.js +1 -0
  28. package/dist/src/mobile/android/gradle/validate/executor.js +9 -0
  29. package/dist/src/mobile/android/gradle/validate/operationCheckResult.js +99 -0
  30. package/dist/src/mobile/android/gradle/validate/operations.js +68 -0
  31. package/dist/src/mobile/android/gradle/validate/planner.js +49 -0
  32. package/dist/src/mobile/android/gradle/validate/runOptionalGradleValidation.js +113 -0
  33. package/dist/src/mobile/android/gradle/validate/targetMutation.js +45 -0
  34. package/dist/src/mobile/android/gradle/validate/taskListParser.js +24 -0
  35. package/dist/src/mobile/android/gradle/versionCatalogMetadata.js +94 -0
  36. package/dist/src/mobile/android/gradle/wrapperMetadata.js +32 -0
  37. package/dist/src/mobile/android/manifest/parseAndroidManifest.js +341 -0
  38. package/dist/src/mobile/android/manifest/types.js +29 -0
  39. package/dist/src/mobile/android/manifest/xml/parseXml.js +313 -0
  40. package/dist/src/mobile/android/profile.js +29 -0
  41. package/dist/src/mobile/android/report/model.js +104 -0
  42. package/dist/src/mobile/android/report/renderAndroidReport.js +223 -0
  43. package/dist/src/mobile/android/report/writeAndroidReportFiles.js +23 -0
  44. package/dist/src/mobile/android/targetMetadata.js +27 -0
  45. package/dist/src/mobile/android/validate/androidVerdict.js +248 -0
  46. package/dist/src/mobile/android/validate/detectionAndImmutabilityCheckResults.js +177 -0
  47. package/dist/src/mobile/android/validate/playReadinessChecklist.js +145 -0
  48. package/dist/src/mobile/android/validate/validateAndroidTarget.js +172 -0
  49. package/dist/src/mobile/android/validation/checkResult.js +51 -0
  50. package/dist/src/mobile/android/validation/result.js +25 -0
  51. package/dist/src/mobile/index.js +42 -0
  52. package/dist/src/mobile/types.js +27 -0
  53. package/dist/src/securityValidation/attackScenarios/attackProfile.js +2 -0
  54. package/dist/src/securityValidation/attackScenarios/profiles/androidProfile.js +20 -0
  55. package/dist/src/securityValidation/validate/cliOptions.js +46 -2
  56. package/package.json +2 -1
  57. package/tests/fixtures/android/compose-app/app/build.gradle.kts +21 -0
  58. package/tests/fixtures/android/compose-app/app/src/main/AndroidManifest.xml +22 -0
  59. package/tests/fixtures/android/compose-app/app/src/main/java/com/example/composeapp/MainActivity.kt +11 -0
  60. package/tests/fixtures/android/compose-app/build.gradle.kts +4 -0
  61. package/tests/fixtures/android/compose-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  62. package/tests/fixtures/android/compose-app/settings.gradle.kts +2 -0
  63. package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/build.gradle.kts +3 -0
  64. package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/gradle/libs.versions.toml +5 -0
  65. package/tests/fixtures/android/gradle-metadata-fixtures/comment-safety.gradle.kts +21 -0
  66. package/tests/fixtures/android/gradle-metadata-fixtures/dynamic-values.gradle.kts +17 -0
  67. package/tests/fixtures/android/gradle-metadata-fixtures/groovy-literal.gradle +23 -0
  68. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-malformed.properties +4 -0
  69. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-missing-url.properties +3 -0
  70. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-with-checksum.properties +5 -0
  71. package/tests/fixtures/android/java-app/app/build.gradle +16 -0
  72. package/tests/fixtures/android/java-app/app/src/main/AndroidManifest.xml +19 -0
  73. package/tests/fixtures/android/java-app/app/src/main/java/com/example/javaapp/MainActivity.java +4 -0
  74. package/tests/fixtures/android/java-app/build.gradle +3 -0
  75. package/tests/fixtures/android/java-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  76. package/tests/fixtures/android/java-app/settings.gradle +2 -0
  77. package/tests/fixtures/android/library/build.gradle.kts +3 -0
  78. package/tests/fixtures/android/library/gradle/wrapper/gradle-wrapper.properties +4 -0
  79. package/tests/fixtures/android/library/mylibrary/build.gradle.kts +13 -0
  80. package/tests/fixtures/android/library/mylibrary/src/main/AndroidManifest.xml +2 -0
  81. package/tests/fixtures/android/library/settings.gradle.kts +2 -0
  82. package/tests/fixtures/android/manifest-audit-fixtures/incomplete-intent-filter.xml +14 -0
  83. package/tests/fixtures/android/manifest-audit-fixtures/malformed-exported.xml +10 -0
  84. package/tests/fixtures/android/manifest-audit-fixtures/malformed.xml +5 -0
  85. package/tests/fixtures/android/manifest-audit-fixtures/missing-application.xml +7 -0
  86. package/tests/fixtures/android/manifest-audit-fixtures/missing-component-name.xml +11 -0
  87. package/tests/fixtures/android/manifest-audit-fixtures/permission-coverage.xml +29 -0
  88. package/tests/fixtures/android/manifest-audit-fixtures/risky-components.xml +62 -0
  89. package/tests/fixtures/android/manifest-audit-fixtures/risky-deep-links.xml +45 -0
  90. package/tests/fixtures/android/manifest-audit-fixtures/unresolved-placeholder.xml +14 -0
  91. package/tests/fixtures/android/manifest-audit-fixtures/unusual-namespace-prefix.xml +11 -0
  92. package/tests/fixtures/android/multi-module/app/build.gradle.kts +22 -0
  93. package/tests/fixtures/android/multi-module/app/src/androidTest/java/com/example/multimodule/app/ExampleInstrumentedTest.kt +3 -0
  94. package/tests/fixtures/android/multi-module/app/src/main/AndroidManifest.xml +11 -0
  95. package/tests/fixtures/android/multi-module/app/src/test/java/com/example/multimodule/app/ExampleUnitTest.kt +3 -0
  96. package/tests/fixtures/android/multi-module/build.gradle.kts +5 -0
  97. package/tests/fixtures/android/multi-module/core/build.gradle.kts +14 -0
  98. package/tests/fixtures/android/multi-module/core/src/main/AndroidManifest.xml +2 -0
  99. package/tests/fixtures/android/multi-module/feature-login/build.gradle.kts +18 -0
  100. package/tests/fixtures/android/multi-module/feature-login/src/main/AndroidManifest.xml +2 -0
  101. package/tests/fixtures/android/multi-module/gradle/libs.versions.toml +8 -0
  102. package/tests/fixtures/android/multi-module/gradle/wrapper/gradle-wrapper.properties +4 -0
  103. package/tests/fixtures/android/multi-module/settings.gradle.kts +4 -0
  104. package/tests/fixtures/android/non-android-gradle/build.gradle.kts +3 -0
  105. package/tests/fixtures/android/non-android-gradle/core/build.gradle.kts +3 -0
  106. package/tests/fixtures/android/non-android-gradle/core/src/main/java/com/example/core/Core.java +4 -0
  107. package/tests/fixtures/android/non-android-gradle/gradle/wrapper/gradle-wrapper.properties +4 -0
  108. package/tests/fixtures/android/non-android-gradle/settings.gradle.kts +2 -0
  109. package/tests/fixtures/android/partial/app/build.gradle.kts +7 -0
  110. package/tests/fixtures/android/partial/settings.gradle.kts +2 -0
  111. package/tests/fixtures/android/xml-view-app/app/build.gradle.kts +17 -0
  112. package/tests/fixtures/android/xml-view-app/app/src/main/AndroidManifest.xml +31 -0
  113. package/tests/fixtures/android/xml-view-app/app/src/main/kotlin/com/example/xmlviewapp/MainActivity.kt +7 -0
  114. package/tests/fixtures/android/xml-view-app/app/src/main/res/layout/activity_main.xml +4 -0
  115. package/tests/fixtures/android/xml-view-app/build.gradle.kts +4 -0
  116. package/tests/fixtures/android/xml-view-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  117. package/tests/fixtures/android/xml-view-app/settings.gradle.kts +2 -0
  118. package/tests/fixtures/audits/mixed-language/mixed-docs-claims/README.md +16 -0
  119. package/tests/fixtures/audits/mixed-language/mixed-docs-claims/build.gradle.kts +4 -0
  120. package/tests/fixtures/audits/mixed-language/mixed-docs-claims/src/main/java/com/example/Widget.java +7 -0
  121. package/tests/fixtures/audits/mixed-language/mixed-docs-claims/src/main/kotlin/com/example/Gadget.kt +7 -0
  122. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/README.md +10 -0
  123. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/build/Main.class +1 -0
  124. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/dist/index.js +1 -0
  125. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/generated/schema.ts +1 -0
  126. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/src/index.ts +3 -0
  127. package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/vendor/lib.py +2 -0
  128. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/README.md +10 -0
  129. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/build.gradle.kts +8 -0
  130. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/settings.gradle.kts +1 -0
  131. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/main/java/com/example/FooService.java +7 -0
  132. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/main/kotlin/com/example/BarService.kt +7 -0
  133. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/test/java/com/example/FooServiceTest.java +8 -0
  134. package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/test/kotlin/com/example/BarServiceTest.kt +8 -0
  135. package/tests/fixtures/audits/mixed-language/mixed-python-ts/README.md +8 -0
  136. package/tests/fixtures/audits/mixed-language/mixed-python-ts/src/app.py +7 -0
  137. package/tests/fixtures/audits/mixed-language/mixed-python-ts/src/index.ts +3 -0
  138. package/tests/fixtures/audits/mixed-language/mixed-python-ts/tests/test_app.py +5 -0
  139. package/tests/fixtures/audits/mixed-language/mixed-ts-js/README.md +7 -0
  140. package/tests/fixtures/audits/mixed-language/mixed-ts-js/src/helper.js +5 -0
  141. package/tests/fixtures/audits/mixed-language/mixed-ts-js/src/index.ts +3 -0
  142. package/tests/fixtures/audits/mixed-language/mixed-ts-js/tests/index.sample.ts +5 -0
  143. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/README.md +10 -0
  144. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/build.gradle.kts +4 -0
  145. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/pytests/test_app.py +5 -0
  146. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/app.py +2 -0
  147. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/helper.js +5 -0
  148. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/index.ts +3 -0
  149. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/main/java/com/example/Multiplier.java +7 -0
  150. package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/main/kotlin/com/example/Divider.kt +7 -0
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <application android:label="Multi Module App">
4
+ <activity android:name=".MainActivity" android:exported="true">
5
+ <intent-filter>
6
+ <action android:name="android.intent.action.MAIN" />
7
+ <category android:name="android.intent.category.LAUNCHER" />
8
+ </intent-filter>
9
+ </activity>
10
+ </application>
11
+ </manifest>
@@ -0,0 +1,3 @@
1
+ package com.example.multimodule.app
2
+
3
+ class ExampleUnitTest
@@ -0,0 +1,5 @@
1
+ plugins {
2
+ id("com.android.application") version "8.2.0" apply false
3
+ id("com.android.library") version "8.2.0" apply false
4
+ id("org.jetbrains.kotlin.android") version "1.9.22" apply false
5
+ }
@@ -0,0 +1,14 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.multimodule.core"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ minSdk = 24
12
+ targetSdk = 34
13
+ }
14
+ }
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
@@ -0,0 +1,18 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.multimodule.featurelogin"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ minSdk = 24
12
+ targetSdk = 34
13
+ }
14
+ }
15
+
16
+ dependencies {
17
+ implementation(project(":core"))
18
+ }
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
@@ -0,0 +1,8 @@
1
+ [versions]
2
+ agp = "8.2.0"
3
+ kotlin = "1.9.22"
4
+
5
+ [plugins]
6
+ android-application = { id = "com.android.application", version.ref = "agp" }
7
+ android-library = { id = "com.android.library", version.ref = "agp" }
8
+ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,4 @@
1
+ rootProject.name = "multi-module"
2
+ include(":app")
3
+ include(":core")
4
+ include(":feature-login")
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id("java-library")
3
+ }
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id("java-library")
3
+ }
@@ -0,0 +1,4 @@
1
+ package com.example.core;
2
+
3
+ public class Core {
4
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,2 @@
1
+ rootProject.name = "non-android-gradle"
2
+ include(":core")
@@ -0,0 +1,7 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ }
4
+
5
+ android {
6
+ namespace = "com.example.partial"
7
+ }
@@ -0,0 +1,2 @@
1
+ rootProject.name = "partial"
2
+ include(":app")
@@ -0,0 +1,17 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.xmlviewapp"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ applicationId = "com.example.xmlviewapp"
12
+ minSdk = 21
13
+ targetSdk = 34
14
+ versionCode = 1
15
+ versionName = "1.0"
16
+ }
17
+ }
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <application
5
+ android:label="XML View App"
6
+ android:icon="@mipmap/ic_launcher"
7
+ android:allowBackup="false">
8
+
9
+ <activity
10
+ android:name=".MainActivity"
11
+ android:exported="true">
12
+ <intent-filter>
13
+ <action android:name="android.intent.action.MAIN" />
14
+ <category android:name="android.intent.category.LAUNCHER" />
15
+ </intent-filter>
16
+ </activity>
17
+
18
+ <activity
19
+ android:name=".DeepLinkActivity"
20
+ android:exported="true">
21
+ <intent-filter android:autoVerify="true">
22
+ <action android:name="android.intent.action.VIEW" />
23
+ <category android:name="android.intent.category.DEFAULT" />
24
+ <category android:name="android.intent.category.BROWSABLE" />
25
+ <data android:scheme="https" android:host="example.com" android:pathPrefix="/share" />
26
+ </intent-filter>
27
+ </activity>
28
+
29
+ </application>
30
+
31
+ </manifest>
@@ -0,0 +1,7 @@
1
+ package com.example.xmlviewapp
2
+
3
+ class MainActivity {
4
+ fun bindViews() {
5
+ val view = findViewById<Any>(0)
6
+ }
7
+ }
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:layout_width="match_parent"
4
+ android:layout_height="match_parent" />
@@ -0,0 +1,4 @@
1
+ plugins {
2
+ id("com.android.application") version "8.2.0" apply false
3
+ id("org.jetbrains.kotlin.android") version "1.9.22" apply false
4
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,2 @@
1
+ rootProject.name = "xml-view-app"
2
+ include(":app")
@@ -0,0 +1,16 @@
1
+ # mixed-docs-claims fixture
2
+
3
+ Current: this fixture ships `com.example.Widget` (Java) and `com.example.Gadget`
4
+ (Kotlin), matching the classes actually present under `src/main/java` and
5
+ `src/main/kotlin` -- these are current, accurate claims about this fixture's
6
+ own source.
7
+
8
+ Planned (not yet implemented): Android-specific validation of this project's
9
+ JVM sources is planned for a later `v0.4.x` release track.
10
+
11
+ Out of scope: this fixture's `build.gradle.kts` is never executed by Gradle,
12
+ and `pom.xml`-style Maven execution is not performed against this project --
13
+ static classification only.
14
+
15
+ Future (not yet implemented): a combined `quality`, `project`, or `all`
16
+ audit type covering this fixture does not exist yet.
@@ -0,0 +1,4 @@
1
+ plugins {
2
+ id("java")
3
+ kotlin("jvm") version "1.9.0"
4
+ }
@@ -0,0 +1,7 @@
1
+ package com.example;
2
+
3
+ public class Widget {
4
+ public String label() {
5
+ return "widget";
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ package com.example
2
+
3
+ class Gadget {
4
+ fun label(): String {
5
+ return "gadget"
6
+ }
7
+ }
@@ -0,0 +1,10 @@
1
+ # mixed-generated-vendor fixture
2
+
3
+ Current: a single real source file (`src/index.ts`) alongside
4
+ `generated/schema.ts`, `dist/index.js`, `build/Main.class`, and
5
+ `vendor/lib.py` -- files that live under path segments the existing
6
+ `projectInventory.ts` policy already classifies as generated/build-output/
7
+ vendor. Used to prove those files do not pollute source-facts collection
8
+ (role stays generated/build-output/vendor, not source/test) and are excluded
9
+ from `SourceFactsSnapshot.files` the same way `sourceFacts.test.ts`'s
10
+ existing vendor/generated test already proves for a single language.
@@ -0,0 +1 @@
1
+ module.exports = { identity: (v) => v };
@@ -0,0 +1 @@
1
+ export type GeneratedSchema = { id: string };
@@ -0,0 +1,3 @@
1
+ export function identity<T>(value: T): T {
2
+ return value;
3
+ }
@@ -0,0 +1,2 @@
1
+ def vendored():
2
+ return "vendored"
@@ -0,0 +1,10 @@
1
+ # mixed-java-kotlin fixture
2
+
3
+ Current: a conventional Gradle Kotlin DSL JVM project layout with one Java
4
+ class (`src/main/java/com/example/FooService.java`), one Kotlin class
5
+ (`src/main/kotlin/com/example/BarService.kt`), and matching test classes
6
+ under `src/test/java` and `src/test/kotlin`. `build.gradle.kts` and
7
+ `settings.gradle.kts` are present to prove Gradle Kotlin DSL build scripts
8
+ are classified as config, not Kotlin source. Used to prove Java and Kotlin
9
+ source facts coexist in one JVM-style project without disrupting each
10
+ other's declarations or role classification.
@@ -0,0 +1,8 @@
1
+ plugins {
2
+ id("java")
3
+ kotlin("jvm") version "1.9.0"
4
+ }
5
+
6
+ repositories {
7
+ mavenCentral()
8
+ }
@@ -0,0 +1 @@
1
+ rootProject.name = "mixed-java-kotlin-fixture"
@@ -0,0 +1,7 @@
1
+ package com.example;
2
+
3
+ public class FooService {
4
+ public String greet(String name) {
5
+ return "Hello, " + name;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ package com.example
2
+
3
+ class BarService {
4
+ fun greet(name: String): String {
5
+ return "Hello, $name"
6
+ }
7
+ }
@@ -0,0 +1,8 @@
1
+ package com.example;
2
+
3
+ public class FooServiceTest {
4
+ public void testGreet() {
5
+ FooService service = new FooService();
6
+ assert service.greet("world").equals("Hello, world");
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ package com.example
2
+
3
+ class BarServiceTest {
4
+ fun testGreet() {
5
+ val service = BarService()
6
+ assert(service.greet("world") == "Hello, world")
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ # mixed-python-ts fixture
2
+
3
+ Current: a Python module (`src/app.py`) and a TypeScript module
4
+ (`src/index.ts`) that both declare an equivalent `add` function/declaration,
5
+ plus one Python test file. Used to prove Python and TypeScript source facts
6
+ coexist without schema or ordering drift, and that a duplicate-name
7
+ declaration across languages is not merged into a single cross-language
8
+ candidate.
@@ -0,0 +1,7 @@
1
+ def add(a, b):
2
+ return a + b
3
+
4
+
5
+ class Calculator:
6
+ def compute(self, a, b):
7
+ return add(a, b)
@@ -0,0 +1,3 @@
1
+ export function add(a: number, b: number): number {
2
+ return a + b;
3
+ }
@@ -0,0 +1,5 @@
1
+ from src.app import add
2
+
3
+
4
+ def test_add():
5
+ assert add(1, 2) == 3
@@ -0,0 +1,7 @@
1
+ # mixed-ts-js fixture
2
+
3
+ Current: a minimal TypeScript entrypoint (`src/index.ts`) calling a plain
4
+ JavaScript helper (`src/helper.js`), with one test file. Used by
5
+ `tests/audits/mixedLanguageSourceFacts.test.ts` to prove TypeScript and
6
+ JavaScript files coexist in a single source-facts collection without schema
7
+ or ordering drift.
@@ -0,0 +1,5 @@
1
+ function greet(name) {
2
+ return "Hello, " + name;
3
+ }
4
+
5
+ module.exports = { greet };
@@ -0,0 +1,3 @@
1
+ export function main(name: string): string {
2
+ return `Hello, ${name}`;
3
+ }
@@ -0,0 +1,5 @@
1
+ import { main } from "../src/index.js";
2
+
3
+ test("main returns a greeting", () => {
4
+ expect(main("world")).toContain("world");
5
+ });
@@ -0,0 +1,10 @@
1
+ # mixed-ts-python-jvm fixture
2
+
3
+ Current: TypeScript, JavaScript, Python, Java, and Kotlin source files
4
+ coexisting in one target, plus a `build.gradle.kts` JVM metadata file. Used
5
+ to prove all currently-supported language families (v0.3.3 baseline) can be
6
+ collected together without crashing, without cross-language schema drift,
7
+ and without one analyzer's output disturbing another's.
8
+
9
+ Planned (not implemented): Android-specific source-set validation and
10
+ manual pentest coverage are out of scope for this fixture and for v0.3.4.
@@ -0,0 +1,4 @@
1
+ plugins {
2
+ id("java")
3
+ kotlin("jvm") version "1.9.0"
4
+ }
@@ -0,0 +1,5 @@
1
+ from src.app import multiply
2
+
3
+
4
+ def test_multiply():
5
+ assert multiply(2, 3) == 6
@@ -0,0 +1,2 @@
1
+ def multiply(a, b):
2
+ return a * b
@@ -0,0 +1,5 @@
1
+ function double(x) {
2
+ return x * 2;
3
+ }
4
+
5
+ module.exports = { double };
@@ -0,0 +1,3 @@
1
+ export function multiply(a: number, b: number): number {
2
+ return a * b;
3
+ }
@@ -0,0 +1,7 @@
1
+ package com.example;
2
+
3
+ public class Multiplier {
4
+ public int multiply(int a, int b) {
5
+ return a * b;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ package com.example
2
+
3
+ class Divider {
4
+ fun divide(a: Int, b: Int): Int {
5
+ return a / b
6
+ }
7
+ }