initial includes tutorial
This commit is contained in:
		
							parent
							
								
									cd205f2eb9
								
							
						
					
					
						commit
						63cc9353b1
					
				|  | @ -0,0 +1,60 @@ | ||||||
|  | @@warning("-44") | ||||||
|  | module InternalExpressionValue = ReducerInterface_InternalExpressionValue | ||||||
|  | module Project = ForTS_ReducerProject | ||||||
|  | module Bindings = Reducer_Bindings | ||||||
|  | 
 | ||||||
|  | open Jest | ||||||
|  | open Expect | ||||||
|  | open Expect.Operators | ||||||
|  | 
 | ||||||
|  | describe("ReducerProject Tutorial", () => { | ||||||
|  |   /* Case: Includes | ||||||
|  | In the previous tutorial we have set the similarity between setContinues and parseIncludes. | ||||||
|  | Here we will finally proceed to a real life scenario. */ | ||||||
|  | 
 | ||||||
|  |   describe("parseIncludes", () => { | ||||||
|  |     /* Here we investigate the details about parseIncludes, before setting up a real life senario in the next section. */ | ||||||
|  |     /* Everything happens inside a project, so let's have a project */ | ||||||
|  |     let project = Project.createProject() | ||||||
|  |     Project.setSource( | ||||||
|  |       project, | ||||||
|  |       "main", | ||||||
|  |       ` | ||||||
|  |     #include "common" | ||||||
|  |     x=1 | ||||||
|  |     `, | ||||||
|  |     ) | ||||||
|  |     /* We need to parse includes after changing the source */ | ||||||
|  |     Project.parseIncludes(project, "main") | ||||||
|  |     test("getDependencies", () => { | ||||||
|  |       /* Parse includes has set the dependencies */ | ||||||
|  |       Project.getDependencies(project, "main")->expect == ["common"] | ||||||
|  |       /* If there were no includes than there would be no dependencies */ | ||||||
|  |       /* However if there was a syntax error at includes then would be no dependencies also */ | ||||||
|  |       /* Therefore looking at dependencies is not the right way to load includes */ | ||||||
|  |       /* getDependencies does not distinguish between setContinues or parseIncludes */ | ||||||
|  |     }) | ||||||
|  |     test("getIncludes", () => { | ||||||
|  |       /* Parse includes has set the includes */ | ||||||
|  |       switch Project.getIncludes(project, "main") { | ||||||
|  |       | Ok(includes) => includes->expect == ["common"] | ||||||
|  |       | Error(err) => err->Reducer_ErrorValue.errorToString->fail | ||||||
|  |       } | ||||||
|  |       /* If the includes cannot be parsed then you get a syntax error. | ||||||
|  |       Otherwise you get the includes. | ||||||
|  |       If there is no syntax error then you can load that file and use setSource to add it to the project. | ||||||
|  |       And so on recursively... */ | ||||||
|  |     }) | ||||||
|  |     test("getDependents", () => { | ||||||
|  |       /* For any reason, you are able to query what other sources | ||||||
|  |         include or depend on the current source. | ||||||
|  |         But you don't need to use this to execute the projects. | ||||||
|  |         It is provided for completeness of information. */ | ||||||
|  |       Project.getDependents(project, "main")->expect == [] | ||||||
|  |       /* Nothing is depending on or including main */ | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     /* Let's look at recursive and possibly cyclic includes */ | ||||||
|  |     /* ... */ | ||||||
|  |   }) | ||||||
|  | }) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user