Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
9893628
add workflows to sln
Dec 12, 2025
5e2f294
update versions in yml files
Dec 12, 2025
dd975ed
remove non-working workaround around coverlet (with github issue refe…
Dec 12, 2025
45b4a59
dotnet outdated is deprecated
Dec 12, 2025
2274297
copilot fix for error "The specified RuntimeIdentifier '.testcoverage…
Dec 12, 2025
d86ff0e
netcoreapp3.1 fails build so update
Dec 12, 2025
5b19ee5
fix yaml - nuget restore obsolete
Dec 12, 2025
12999db
newtonsoft not used outside ios
Dec 12, 2025
353ac51
nullable disable for apple - legacy project
Dec 12, 2025
90f0d6f
fix nullable issue
Dec 12, 2025
beda865
Update CSharpMath.Wiki submodule to latest commit
Dec 12, 2025
feccce7
Update Typography submodule to latest commit
Dec 12, 2025
abe3d0f
remove some typography tests from slnf since they cause a build failure
Dec 12, 2025
2d22e79
fix
Dec 12, 2025
b1e6f22
copilot submodule work
Dec 12, 2025
6c28e67
typography update fix
Dec 12, 2025
35936ae
Update Typography submodule to latest commit
Dec 12, 2025
3a70d26
nowarn about Typography
Dec 12, 2025
ce2234b
typography build fixes
Dec 12, 2025
5f073b2
steps towards a build
Dec 12, 2025
42d240a
try putting the input in as a manual handler
Dec 12, 2025
7779d49
ignore nullable warnings in test projs
Dec 12, 2025
c1999ff
remove a brittle smiley faces test
Dec 12, 2025
771f4bf
create an ios slnf to fix ios test stage (claude 4.5 commit)
Dec 12, 2025
207164e
use dotnet build
Dec 12, 2025
3584552
Remove ios projects
Dec 12, 2025
79abd33
craete a buildeverything slnf for use in pipeline
Dec 12, 2025
edca973
remove shared projects to fix build (claude)
Dec 12, 2025
02f6508
fix slnf error (claude)
Dec 12, 2025
5a40206
nowarn typography
Dec 12, 2025
239081e
wip interfaces
Dec 12, 2025
618b51c
wip test interfaces
Dec 12, 2025
8f3b3f4
separate project for shared test stuff
Dec 12, 2025
3baee53
create a Tests.Frontend project to put shared test files in
Dec 13, 2025
3a89582
update skiasharp
Dec 13, 2025
d1b6616
fix build
Dec 13, 2025
8757b72
rename to testutils
Dec 13, 2025
70a21f8
slnf copilot
Dec 13, 2025
1640671
put new project in right place
Dec 13, 2025
fee44b3
fix build
Dec 13, 2025
9f5e946
rename
Dec 13, 2025
28f5385
wiki update
Dec 13, 2025
744dcca
build fixes
Dec 13, 2025
0a5e6b3
fix warning
Dec 13, 2025
fe52930
Remove wiki submodule, add wiki files directly, and remove deprecated…
Copilot Dec 13, 2025
55ced85
claude build fix
Dec 13, 2025
61f08fd
try claude fix
Dec 13, 2025
dfba580
remove Forms WPF which doesn't build
Dec 13, 2025
3cba373
fix fsharp file
Dec 13, 2025
b2c6505
claude fixes
Dec 13, 2025
2d96954
disable Avalonia test
Dec 13, 2025
a99bfb1
remove avalonia reference to try to fix skiasharp versioning error
Dec 13, 2025
9c7bf74
copilot suggests adding skiasharp directly to the Rendering.Tests pro…
Dec 13, 2025
0b9d72f
try another copilot suggestion to include native assets explicitly
Dec 13, 2025
e158dea
revert avalonia removal
Dec 13, 2025
92a495b
Revert "disable Avalonia test"
Dec 13, 2025
14093bd
Reapply "disable Avalonia test"
Dec 13, 2025
7b1e81d
Revert "Reapply "disable Avalonia test""
Dec 13, 2025
5e0d634
updates
Dec 14, 2025
2bae526
claude fixes
Dec 14, 2025
87a7538
dotnet10 ymls
Dec 14, 2025
76c8877
skiasharp update and copilot fixes
Dec 14, 2025
a74ecc5
fixes
Dec 14, 2025
25495e2
comment out avalonia from rendering tests
Dec 14, 2025
aa92dd2
comment out avalonia tests
Dec 14, 2025
6d9f84f
allo updating baselines
Dec 14, 2025
c8a7b50
add comment
Dec 14, 2025
2c94e56
baseeline updates
Dec 14, 2025
7c6960e
icons aren't related to project
Dec 14, 2025
f3a0542
code coverage step failing, but don't fail CI
Dec 14, 2025
d8916f3
update system.memory
Dec 15, 2025
e07fd60
avalonia update (claude)
Dec 15, 2025
db4afbd
readd avalonia test
Dec 15, 2025
d4ae50e
re-add avalona tests
Dec 15, 2025
7ae7f07
Add MAUI
Happypig375 Dec 15, 2025
73f986b
Make Avalonia Example run again
Happypig375 Dec 16, 2025
2b08a17
WIP MAUI math keyboard
Happypig375 Dec 16, 2025
7e70e7a
Maybe stream position should be zero
Happypig375 Dec 16, 2025
1eba6e7
Editor now works
Happypig375 Dec 17, 2025
ad08b4a
Fix MAUI editor page
Happypig375 Dec 18, 2025
c14466f
Updated evaluation, pending tests update
Happypig375 Dec 18, 2025
574d4d2
CSharpMath.Evaluation.Tests now pass
Happypig375 Dec 19, 2025
1a0fd7e
Update AngouriMath and add logical operators
Happypig375 Jan 1, 2026
83d8c16
Make the editor page awesome to use with proper keyboard handling
Happypig375 Jan 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions .github/workflows/Benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ jobs:
Rendering:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 3.1.401
dotnet-version: '10.0.x'
- run: dotnet run -p CSharpMath.Rendering.Benchmarks
- name: Store benchmark result
uses: Happypig375/github-action-benchmark@v1
Expand Down
16 changes: 7 additions & 9 deletions .github/workflows/Build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,16 @@ jobs:
Everything:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '3.1.401'
- name: Setup NuGet
uses: NuGet/setup-nuget@v1.0.5
dotnet-version: '10.0.x'
- name: Setup MSBuild Path
uses: microsoft/setup-msbuild@v1.0.2
uses: microsoft/setup-msbuild@v2
- name: Restore NuGet Packages
run: nuget restore CSharpMath.sln
run: dotnet restore BuildEverythingYml.slnf
- name: Build Everything
run: msbuild CSharpMath.sln /p:Configuration=Release
run: msbuild BuildEverythingYml.slnf /p:Configuration=Release
8 changes: 4 additions & 4 deletions .github/workflows/Release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ jobs:
CSharpMath:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '3.1.401'
dotnet-version: '10.0.x'
- name: Build GitHub Releases draft artifacts
env:
RELEASE_NOTES: |
Expand Down
128 changes: 15 additions & 113 deletions .github/workflows/Test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,16 @@ jobs:
steps:
- name: Update draft on GitHub Releases
id: release_drafter
uses: release-drafter/release-drafter@v5
uses: release-drafter/release-drafter@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Setup .NET Core # Required to execute ReportGenerator
uses: actions/setup-dotnet@v1
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '3.1.401'
- name: Update dependencies in CSharpMath.Xaml.Tests.NuGet
run: |
dotnet tool install -g dotnet-outdated
update() {
dotnet outdated -u CSharpMath.Xaml.Tests.NuGet
dotnet outdated -pre Always -inc CSharpMath -u CSharpMath.Xaml.Tests.NuGet
}
# retry 5 times since dotnet outdated fails often: https://github.com/jerriep/dotnet-outdated/issues/299
update || update || update || update || update
dotnet-version: '10.0.x'
- name: Build and Test
env:
RELEASE_NOTES: |
Expand All @@ -35,46 +26,46 @@ jobs:
run: |
# .NET Core MSBuild cannot parse , and ; correctly so we replace them with substitutions: https://github.com/dotnet/msbuild/issues/471#issuecomment-366268743
# https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
# ${parameter/pattern/string} If pattern begins with ‘/’, all matches of pattern are replaced with string. Normally only the first match is replaced.
# ${parameter/pattern/string} If pattern begins with '/', all matches of pattern are replaced with string. Normally only the first match is replaced.
RELEASE_NOTES=${RELEASE_NOTES//,/%2C}
RELEASE_NOTES=${RELEASE_NOTES//;/%3B}

# --collect:"XPlat Code Coverage" means collect test coverage with https://github.com/coverlet-coverage/coverlet
# Coverlet settings come after --: https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/VSTestIntegration.md#advanced-options-supported-via-runsettings
dotnet test CSharpMath.CrossPlatform.slnf -c Release -l GitHubActions --blame --collect:"XPlat Code Coverage" -r .testcoverage -p:PackageReleaseNotes="$RELEASE_NOTES" -p:PackageVersion=${{ steps.release_drafter.outputs.tag_name || format('{0}-pr', github.event.number) }}-ci-${{ github.sha }} -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeTestAssembly=true
dotnet test CSharpMath.CrossPlatform.slnf -c Release -l GitHubActions --blame --collect:"XPlat Code Coverage" --results-directory .testcoverage -p:PackageReleaseNotes="$RELEASE_NOTES" -p:PackageVersion=${{ steps.release_drafter.outputs.tag_name || format('{0}-pr', github.event.number) }}-ci-${{ github.sha }} -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeTestAssembly=true
- name: Run ReportGenerator on Test Coverage results
uses: danielpalme/ReportGenerator-GitHub-Action@4.6.7
uses: danielpalme/ReportGenerator-GitHub-Action@5
with:
reports: '.testcoverage/**/*.*' # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported.
targetdir: '.testcoverage/report' # REQUIRED # The directory where the generated report should be saved.
reporttypes: 'Html' # The output formats and scope (separated by semicolon) Values: Badges, Clover, Cobertura, CsvSummary, Html, HtmlChart, HtmlInline, HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Dark, HtmlSummary, JsonSummary, Latex, LatexSummary, lcov, MHtml, PngChart, SonarQube, TeamCitySummary, TextSummary, Xml, XmlSummary
title: 'CSharpMath test coverage results' # Optional title.
tag: ${{ steps.release_drafter.outputs.tag_name || format('{0}-pr', github.event.number) }}-ci-${{ github.sha }} # Optional tag or build version.
- name: Upload CSharpMath test coverage results as CI artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: CSharpMath test coverage results
path: .testcoverage/
- name: Upload CSharpMath test coverage results to codecov.io
uses: codecov/codecov-action@v1
uses: codecov/codecov-action@v4
with:
file: .testcoverage/**/*.xml # optional
name: CSharpMath test coverage # optional
fail_ci_if_error: true # optional (default = false)
fail_ci_if_error: false # optional (default = false)
- name: Upload CSharpMath.Rendering.Tests results as CI artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: always() # Run even when a previous step failed: https://stackoverflow.com/a/58859404/5429648
with:
name: CSharpMath.Rendering.Tests results
path: CSharpMath.Rendering.Tests/*/*.png
- name: Upload CSharpMath.Xaml.Tests.NuGet results as CI artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: always()
with:
name: CSharpMath.Xaml.Tests.NuGet results
path: CSharpMath.Xaml.Tests.NuGet/*.png
- name: Upload NuGet packages as CI artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
if: always()
with:
name: NuGet packages
Expand All @@ -86,93 +77,4 @@ jobs:
# So we must specify api-key directly in "dotnet nuget push" instead of following the GitHub Packages documentation
# We use quotes to avoid shell globbing: https://github.com/NuGet/Home/issues/4393#issuecomment-667618120
# --no-symbols true to not let GitHub Releases interpret .snupkg as .nupkg
dotnet nuget push '.nupkgs/*.nupkg' --source 'https://nuget.pkg.github.com/verybadcat/index.json' --api-key ${{ github.token }} --skip-duplicate --no-symbols true
Ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- run: nuget restore CSharpMath.sln
- run: msbuild CSharpMath.Ios.Tests
- name: Run tests
env:
IOS_SIM_NAME: iPhone 11 # https://github.com/actions/virtual-environments/blob/master/images/macos/macos-10.15-Readme.md#installed-simulators
BUNDLE_IDENTIFIER: CSharpMath.Ios.Unit-Tests # Located inside CSharpMath.Ios.Tests Info.plist file
APP_PATH: CSharpMath.Ios.Tests/bin/iPhoneSimulator/Debug/CSharpMath.Ios.Tests.app
run: |
# This script is a heavily modified version of https://gist.github.com/jerrymarino/1f9eb6a06c423f9744ea297d80193a9b

IOS_SIM_UDID=`xcrun simctl list | grep -w "$IOS_SIM_NAME" | awk 'match($0, /\(([-0-9A-F]+)\)/) { print substr( $0, RSTART + 1, RLENGTH - 2 )}' | head -1`
SIMULATOR_PATH='/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator'

# run_ios_sim builds and runs an iOS app on the simulator
#
# It is designed to replicate the behavior of "Run" in Xcode and assumes basic
# xcodebuild usage.
#
# USAGE:
# export IOS_SIM_UDID=342F9A20-DF48-41A9-BE60-C6B35F47E97F; \
# export BUNDLE_IDENTIFIER=a.Some; \
# export APP_PATH=$PWD/Build/Debug-iphonesimulator/$APP_NAME.app \
# /path/to/run_ios_sim.sh
#
# Note that the UDID must match a device where runtime is installed See
# available devices with "simctl list"
#
# Tested on Xcode 8.3.1 a few times
# Author: Jerry Marino - @jerrymarino

APP_NAME=`echo ""${APP_PATH##*/}"" | cut -d'.' -f1`

echo "Running sim for $APP_NAME - $BUNDLE_IDENTIFIER"

# If the booted simulator does not match, then we need to restart it. Expect an
# output list of the form
# "Phone: iPhone 7 Plus (342F9A20-DF48-41A9-BE60-C6B35F47E97F) (Booted)"
BOOTED_UDID=`xcrun simctl list | grep Booted | perl -pe 's/(.*\()(.*)\)+ (.*)/\2/' | sed -n 1p`
if [[ $BOOTED_UDID != $IOS_SIM_UDID ]]; then
killall Simulator || true # Ignore error code 1: No matching process has been found
else
# FIXME: We don't need to do this for all cases and
# it is slow
killall Simulator || true # Ignore error code 1: No matching process has been found
fi

# Open the simulator
open -a "$SIMULATOR_PATH" --args -CurrentDeviceUDID $IOS_SIM_UDID

# Wait until there is a device booted

function booted_sim_ct() {
echo `xcrun simctl list | grep Booted | wc -l | sed -e 's/ //g'`
}

while [ `booted_sim_ct` -lt 1 ]
do
sleep 1
done

echo "Installing app at path $APP_PATH"
xcrun simctl install booted $APP_PATH

# Launch the app program into the booted sim
TESTS_OUTPUT=`xcrun simctl launch --console booted "$BUNDLE_IDENTIFIER" 2>&1`
# 2>&1 means "redirect stderr to stdout": https://stackoverflow.com/a/818284/5429648

echo "$TESTS_OUTPUT"

# Move artifacts (generated pictures) to a known path for uploading
TESTS_ARTIFACTS="`xcrun simctl get_app_container booted $BUNDLE_IDENTIFIER data`/Documents/*"
mkdir -p /tmp/tests_artifacts
mv $TESTS_ARTIFACTS /tmp/tests_artifacts # We don't put $TESTS_ARTIFACTS in double quotes because we need path expansion

# We fail this workflow if the debug output contains [FAIL] (i.e. a test has failed).
if [[ "$TESTS_OUTPUT" == *"[FAIL]"* ]]
then exit 1
fi
- uses: actions/upload-artifact@v2
if: always() # Run even when a previous step failed: https://stackoverflow.com/a/58859404/5429648
with:
name: CSharpMath.Ios.Tests Results
path: /tmp/tests_artifacts
dotnet nuget push '.nupkgs/*.nupkg' --source 'https://nuget.pkg.github.com/verybadcat/index.json' --api-key ${{ github.token }} --skip-duplicate --no-symbols true
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
[submodule "Typography"]
path = Typography
url = https://github.com/LayoutFarm/Typography.git
[submodule "Wiki"]
path = CSharpMath.Wiki
url = https://github.com/verybadcat/CSharpMath.wiki.git
29 changes: 29 additions & 0 deletions BuildEverythingYml.slnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"solution": {
"path": "CSharpMath.sln",
"projects": [
"CSharpMath\\CSharpMath.csproj",
"CSharpMath.CoreTests\\CSharpMath.CoreTests.csproj",
"CSharpMath.Editor\\CSharpMath.Editor.csproj",
"CSharpMath.Editor.Tests\\CSharpMath.Editor.Tests.csproj",
"CSharpMath.Editor.Tests.Visualizer\\CSharpMath.Editor.Tests.Visualizer.csproj",
"CSharpMath.Evaluation\\CSharpMath.Evaluation.csproj",
"CSharpMath.Evaluation.Tests\\CSharpMath.Evaluation.Tests.csproj",
"CSharpMath.Rendering.Benchmarks\\CSharpMath.Rendering.Benchmarks.csproj",
"CSharpMath.Rendering.Tests\\CSharpMath.Rendering.Tests.csproj",
"CSharpMath.Rendering.Tests.FSharp\\CSharpMath.Rendering.Tests.FSharp.fsproj",
"CSharpMath.Rendering.Text.Tests\\CSharpMath.Rendering.Text.Tests.csproj",
"CSharpMath.Rendering\\CSharpMath.Rendering.csproj",
"CSharpMath.TestUtils\\CSharpMath.TestUtils.csproj",
"CSharpMath.Xaml.Tests\\CSharpMath.Xaml.Tests.csproj",
"CSharpMath.Xaml.Tests.NuGet\\CSharpMath.Xaml.Tests.NuGet.csproj",
"CSharpMath.Playground\\CSharpMath.Playground.csproj",
"CSharpMath.Avalonia\\CSharpMath.Avalonia.csproj",
"CSharpMath.Avalonia.Example\\CSharpMath.Avalonia.Example.csproj",
"CSharpMath.SkiaSharp\\CSharpMath.SkiaSharp.csproj",
"CSharpMath.Forms\\CSharpMath.Forms.csproj",
"CSharpMath.Forms.Example\\CSharpMath.Forms.Example\\CSharpMath.Forms.Example.csproj",
"CSharpMath.Forms.Tests\\CSharpMath.Forms.Tests.csproj"
]
}
}
Loading
Loading