Beispiel #1
0
        public void EmptyStopsAreParsedCorrectly()
        {
            var parser = new SmParser(x => 180);
            var actual = parser.LoadFromFile("files/SM/empty_stops.sm").Tempo.Interruptions.ToArray();

            actual.Length.ShouldBe(0);
        }
Beispiel #2
0
        public void ChartsAreParsedCorrectly()
        {
            var parser = new SmParser(x => 180);
            var actual = parser.LoadFromFile("files/SM/chart_definitions.sm").Charts;

            actual.Count.ShouldBe(2);
            actual.First().Type.ShouldBe(StepChartType.Single);
            actual.First().DescriptionOrAuthor.ShouldBe("single chart");
            actual.First().DifficultyRating.Difficulty.ShouldBe(Difficulty.Easy);
            actual.First().DifficultyRating.Meter.ShouldBe(1);
            actual.First().DifficultyRating.Radar.Stream.ShouldBe(0.1);
            actual.First().DifficultyRating.Radar.Voltage.ShouldBe(0.2);
            actual.First().DifficultyRating.Radar.Air.ShouldBe(0.3);
            actual.First().DifficultyRating.Radar.Freeze.ShouldBe(0.4);
            actual.First().DifficultyRating.Radar.Chaos.ShouldBe(0.5);
            actual.Last().Type.ShouldBe(StepChartType.Double);
            actual.Last().DescriptionOrAuthor.ShouldBe("double chart");
            actual.Last().DifficultyRating.Difficulty.ShouldBe(Difficulty.Medium);
            actual.Last().DifficultyRating.Meter.ShouldBe(2);
            actual.Last().DifficultyRating.Radar.Stream.ShouldBe(0.5);
            actual.Last().DifficultyRating.Radar.Voltage.ShouldBe(0.4);
            actual.Last().DifficultyRating.Radar.Air.ShouldBe(0.3);
            actual.Last().DifficultyRating.Radar.Freeze.ShouldBe(0.2);
            actual.Last().DifficultyRating.Radar.Chaos.ShouldBe(0.1);
        }
Beispiel #3
0
        public void StopsAreParsedCorrectly()
        {
            var parser = new SmParser(x => 180);
            var actual = parser.LoadFromFile("files/SM/bpm_changes_and_stops.sm").Tempo.Interruptions.ToArray();

            actual.Length.ShouldBe(3);
            actual.Select(x => x.Time).ShouldBe(new[] { 1.0, 3.0, 5.0 });
            actual.Select(x => x.Duration).ShouldBe(new[] { 2.0, 4.0, 6.0 });
        }
Beispiel #4
0
        public void LoadsCorrectlyFromSMFormat()
        {
            var track = new SmParser(x => 180).LoadFromFile("files/SM/simple_test_song.sm");

            track.Information.Title.Original.ShouldBe("作品名");
            track.Information.Title.Alternative.ShouldBe("Sakuhinmei");
            track.Information.Subtitle.Original.ShouldBe("傍題");
            track.Information.Subtitle.Alternative.ShouldBe("Boudai");
            track.Information.Artist.Original.ShouldBe("作者");
            track.Information.Artist.Alternative.ShouldBe("Sakusha");
            track.Information.Selectable.ShouldBe(true);
            track.Information.Credit.ShouldBe("senritsu");
            track.Information.DisplayBpm.Min.ShouldBe(180);
            track.Information.DisplayBpm.Mode.ShouldBe(BpmDisplayMode.Static);
            track.Information.Genre.ShouldBe("Test Genre");
            track.Information.New.ShouldBe(false);

            track.Tempo.Bpm.Count().ShouldBe(2);
            track.Tempo.Bpm.First().Time.ShouldBe(0);
            track.Tempo.Bpm.First().Bpm.ShouldBe(120);
            track.Tempo.Bpm.Last().Time.ShouldBe(60);
            track.Tempo.Bpm.Last().Bpm.ShouldBe(180);
            track.Tempo.Interruptions.ShouldHaveSingleItem();
            track.Tempo.Interruptions.Single().Time.ShouldBe(120);
            track.Tempo.Interruptions.Single().Duration.ShouldBe(1);

            track.Files.Background.ShouldBe("bg.png");
            track.Files.Banner.ShouldBe("banner.png");
            track.Files.CdTitleIcon.ShouldBe("icon.png");
            track.Files.Lyrics.ShouldBe("test.lrc");
            track.Files.Music.ShouldBe("test.mp3");
            track.Files.MusicMd5.ShouldBe(null);

            track.Preview.SampleStart.ShouldBe(30);
            track.Preview.SampleLength.ShouldBe(10);

            track.Charts.ShouldHaveSingleItem();

            var chart = track.Charts.Single();

            chart.DescriptionOrAuthor.ShouldBe("description");
            chart.DifficultyRating.Difficulty.ShouldBe(Difficulty.Easy);
            chart.DifficultyRating.Meter.ShouldBe(1);
            chart.DifficultyRating.Radar.Stream.ShouldBe(0.1);
            chart.DifficultyRating.Radar.Voltage.ShouldBe(0.2);
            chart.DifficultyRating.Radar.Air.ShouldBe(0.3);
            chart.DifficultyRating.Radar.Freeze.ShouldBe(0.4);
            chart.DifficultyRating.Radar.Chaos.ShouldBe(0.5);

            chart.Type.ShouldBe(StepChartType.Single);
            chart.Measures.Count().ShouldBe(4);
            chart.Measures.ShouldAllBe(x => x.TimeSignature.BeatValue == 4);
            chart.Measures.ShouldAllBe(x => x.TimeSignature.Beats == 4);
            chart.Measures.ShouldAllBe(x => x.Rows.Length == 4);

            var notes = chart.Notes.ToArray();

            notes.Length.ShouldBe(16);
            notes.ShouldAllBe(x => x.Type == StepType.Normal);
            notes.ShouldAllBe(x => x.Numerator == 1);
            notes.ShouldAllBe(x => x.Denominator == 4);
            notes.Select(x => x.Direction).ShouldBe(new []
            {
                Direction.Left,
                Direction.Down,
                Direction.Up,
                Direction.Right,
                Direction.Left,
                Direction.Left,
                Direction.Left,
                Direction.Left,
                Direction.Down,
                Direction.Right,
                Direction.Down,
                Direction.Right,
                Direction.Left,
                Direction.Up,
                Direction.Left,
                Direction.Up
            });
            //notes.Select(x => x.Time.ShouldBe(new []
            //{
            //    1.234,
            //}))
        }